如何在XAML Windows工作流基础中有条件地使用InvokeMethod [英] How to conditionally use InvokeMethod in an XAML Windows workflow foundation

查看:121
本文介绍了如何在XAML Windows工作流基础中有条件地使用InvokeMethod的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Windows工作流基础序列工作流中,如何使用根据特定条件被调用的invoke方法标记?

In windows workflow foundation sequence workflow, How to use invoke method tags to be invoked based on certain condition?

例如,

<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>

假设我调用上述活动,所有的invoke方法都将被触发.

Suppose, I call the above activity, all the invoke methods will be triggered.

但是需要的是类似的东西

But what is needed, is something like,

<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>

有人可以提出一些建议吗?

Can someone give some idea how to go about this?

推荐答案

您可以使用If活动(在命名空间System.Activities.Statements中)有条件地执行工作流的各个部分:

You can use the If activity (in namespace System.Activities.Statements) for conditionally executing pieces of a workflow:

<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>

这篇关于如何在XAML Windows工作流基础中有条件地使用InvokeMethod的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆