如何运行工作流?
使用WorkflowApplication 这个类,代码如下:
//工作初始参数
Dictionary<string,object> inputs=new Dictionary<string,object>();
//创建工作流实例
WorkflowApplication app = new WorkflowApplication(new Activity1(), inputs);
//使用sqlserver来保存工作流的状态
app.InstanceStore = new SqlWorkflowInstanceStore();
//运行工作流
app.Run();
如何等待用户输入?
使用工作流的书签功能,不过WF里没有提供现成的书签,需要你自定义一个活动,来创建书签等待用户输入。具体就是继承NativeActivity,代码如下:
public sealed class ParametersReciever : NativeActivity<WFParameters>
{
//必须实现Execute这个方法,当工作流程走到这个活动的时候,创建一个书签,等待用户的输入。
protected override void Execute(NativeActivityContext context)
{
context.CreateBookmark("params", new BookmarkCallback(OnReadComplete));
}
void OnReadComplete(NativeActivityContext context, Bookmark bookmark, object state)
{
WFParameters input = state as WFParameters;
context.SetValue(this.Result, input);
}
}
如何返回工作流状态?
使用InvokeMethod活动,这个活动可以调用静态方法,或对象方法。具体设置如下图所示:
TargetType和TargetObject是互斥的,前者表示包含静态方法的类,后者表示实例对象。
设置参数
如何终止流程
使用WorkflowApplication的Terminate方法。撤销的流程将会被永久终止。代码如下:
Dictionary<string,object> inputs=new Dictionary<string,object>();
WorkflowApplication app = new WorkflowApplication(new Activity1(), inputs);
app.InstanceStore = new SqlWorkflowInstanceStore();
app.Run();
Guid id = new Guid("11b4b3e4-32db-4698-9fe2-5d783e23c65f");
//加载工作流实例
app.Load(id);
//终止流程
app.Terminate("撤销流程");