一、启动流程多种方式
1)调用活动(activity),假设通过新增项新建活动为Activity1,具体工作流程可以在工作流程编辑界面进行编辑。
using System;
using System.Linq;
using System.Activities;
using System.Activities.Statements;
namespace WorkflowConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
Activity workflow1 = new Activity1();
WorkflowInvoker.Invoke(workflow1);
Console.ReadLine();
}
}
}
2)直接代码声明一个活动,参考官网代码:
// Define the workflow
Activity wf = new Sequence
{
Variables = { var1, var2, var3 },
Activities =
{
new Assign<string>()
{
Value = new InArgument<string>(var1),
To = new OutArgument<string>(var2)
},
new WriteLine() { Text = var2 },
new Assign<string>()
{
Value = var2,
To = var3
},
new WriteLine() { Text = var3 }
}
};
WorkflowInvoker.Invoke(wf);
3)调用流程定义的xaml文件
二、变量和参数
流程中定义的变量作用于整个流程,codeactivity活动中定义输入输出变量分别为runnumber和modirunnumber,可以从流程变量中获得输入变量值,然后再将计算后的值赋予输出变量。
public sealed class CodeActivityDealArguments : CodeActivity
{
// 定义一个字符串类型的活动输入参数
public InArgument<int> runnumber { get; set; }
public OutArgument<int> modirunnumber { get; set; }
// 如果活动返回值,则从 CodeActivity<TResult>
// 并从 Execute 方法返回该值。
protected override void Execute(CodeActivityContext context)
{
// 获取 Text 输入参数的运行时值
int text = context.GetValue(this.runnumber);
Console.WriteLine("get argument runnumber:" + text);
context.SetValue(modirunnumber, text -1);
}
}
同时,在流程界面设置中,需要将上述变量的赋值活动定义出来。形如下图:
如果是传递给整个流程的初始参数,比如业务工单ID,则需要使用字典传参。
例如:
Activity workflow1 = new Activityhot();
IDictionary<string,Object> idparam = new Dictionary<String,Object>();
idparam.Add("businessid", "20210429001");
wfApp = new WorkflowApplication(workflow1,idparam);
三、活动的暂停好唤醒
应用场景主要是在并行处理环节,如果采用异步调用,比如活动中开启一个运算线程,希望线程开始计算时挂起当前活动,计算完后再恢复活动继续流转。
这里就得用到书签(bookmark)
更多参考https://docs.microsoft.com/zh-cn/dotnet/framework/windows-workflow-foundation/