0

In Windows-Workflow-Foundation-Sequenz-Workflow, wie aufrufende Methoden-Tags basierend auf bestimmten Bedingungen aufgerufen werden?Wie Sie InvokeMethod in einem XAML Windows-Workflow-Fundament bedingt verwenden

Zum Beispiel

<Sequence> 
    <Sequence.Variables> 
<Variable x:TypeArguments="x:String" Default="[&quot;this is an out param&quot;]" Name="outParam" /> 
    <Variable x:TypeArguments="x:Int32" Name="resultValue" /> 
    <Variable x:TypeArguments="msi:TestClass" Default="[New TestClass()]" Name="varTestClass" /> 
</Sequence.Variables> 
<sap:WorkflowViewStateService.ViewState> 
    <scg:Dictionary x:TypeArguments="x:String, s:Object"> 
    <x:Boolean x:Key="IsExpanded">True</x:Boolean> 
    </scg:Dictionary> 
</sap:WorkflowViewStateService.ViewState> 
<WriteLine sap:VirtualizedContainerService.HintSize="299.663333333333,59.2766666666667" Text="[&quot;Instance method call&quot;]" /> 
<InvokeMethod DisplayName="Instance Method Call" sap:VirtualizedContainerService.HintSize="299.663333333333,127.553333333333" MethodName="InstanceMethod1"> 
    <InvokeMethod.TargetObject> 
    <InArgument x:TypeArguments="msi:TestClass">[New TestClass()]</InArgument> 
    </InvokeMethod.TargetObject> 
</InvokeMethod> 
<InvokeMethod DisplayName="Instance Method Call with Parameters" sap:VirtualizedContainerService.HintSize="299.663333333333,127.553333333333" MethodName="InstanceMethod"> 
    <InvokeMethod.TargetObject> 
    <InArgument x:TypeArguments="msi:TestClass">[New TestClass()]</InArgument> 
    </InvokeMethod.TargetObject> 
    <InArgument x:TypeArguments="x:String">["My favorite number is"]</InArgument> 
    <InArgument x:TypeArguments="x:Int32">42</InArgument> 
</InvokeMethod> 
</Sequence> 

Angenommen, ich nenne die obige Tätigkeit, alle invoke Methoden ausgelöst wird.

Aber was benötigt wird, ist so etwas wie,

<Sequence> 
    <Sequence.Variables> 
<Variable x:TypeArguments="x:String" Default="[&quot;this is an out param&quot;]" Name="outParam" /> 
    <Variable x:TypeArguments="x:Int32" Name="resultValue" /> 
    <Variable x:TypeArguments="msi:TestClass" Default="[New TestClass()]" Name="varTestClass" /> 
</Sequence.Variables> 
<sap:WorkflowViewStateService.ViewState> 
    <scg:Dictionary x:TypeArguments="x:String, s:Object"> 
    <x:Boolean x:Key="IsExpanded">True</x:Boolean> 
    </scg:Dictionary> 
</sap:WorkflowViewStateService.ViewState> 
<WriteLine sap:VirtualizedContainerService.HintSize="299.663333333333,59.2766666666667" Text="[&quot;Instance method call&quot;]" /> 
//If (stateArgument =="created") 
//{ 
<InvokeMethod DisplayName="Instance Method Call" sap:VirtualizedContainerService.HintSize="299.663333333333,127.553333333333" MethodName="InstanceMethod1"> 
    <InvokeMethod.TargetObject> 
    <InArgument x:TypeArguments="msi:TestClass">[New TestClass()]</InArgument> 
    </InvokeMethod.TargetObject> 
</InvokeMethod> 
//} 
//else if(stateArguement == "running") 
//{ 
<InvokeMethod DisplayName="Instance Method Call with Parameters" sap:VirtualizedContainerService.HintSize="299.663333333333,127.553333333333" MethodName="InstanceMethod"> 
    <InvokeMethod.TargetObject> 
    <InArgument x:TypeArguments="msi:TestClass">[New TestClass()]</InArgument> 
    </InvokeMethod.TargetObject> 
    <InArgument x:TypeArguments="x:String">["My favorite number is"]</InArgument> 
    <InArgument x:TypeArguments="x:Int32">42</InArgument> 
</InvokeMethod> 
//} 
</Sequence> 

Kann jemand eine Idee geben, wie um dies zu realisieren?

+0

Sie bearbeiten Ihre XAML-Dateien von Hand? – Joao

+0

Ja, für den Prototyp werde ich den XAML von Hand bearbeiten. Später wird es verallgemeinert werden. –

Antwort

0

können Sie die If Aktivität verwenden (im Namensraum System.Activities.Statements) für bedingt Teile eines Workflow-Ausführung:

<If DisplayName="Invoke something based on a conditional" sap2010:WorkflowViewState.IdRef="If_1"> 
    <If.Condition> 
     <InArgument x:TypeArguments="x:Boolean"> 
      <mca:CSharpValue x:TypeArguments="x:Boolean">1 == 2</mca:CSharpValue> 
     </InArgument> 
    </If.Condition> 
    <If.Then> 
     <InvokeMethod sap2010:WorkflowViewState.IdRef="InvokeMethod_1" MethodName="WriteSomething" TargetType="local:MyStatics" /> 
    </If.Then> 
    <If.Else> 
     <InvokeMethod sap2010:WorkflowViewState.IdRef="InvokeMethod_2" MethodName="WriteSomethingElse" TargetType="local:MyStatics" /> 
    </If.Else> 
</If> 
+0

Wie lautet der Namespace für If? –

+0

Es befindet sich im Namespace [System.Activities.Statements]. – ajawad987