想看源码请直接翻到最后,使用方式如下图
如果同时需要多个书签可以直接在需要的位置创建书签,会认为是同一个实例。
若需要实现的效果是同时需要好几个部门审核,那么只要在对应的位置同时创建多个书签即可。
编写书签代码活动
注意几个地方,创建书签需要继承NativeActivity,随之要修改的就是Execute的参数类型
如下所有注释部分
public sealed class BookmarkActivity : NativeActivity { // 定义一个字符串类型的活动输入参数 public InArgument<string> Text { get; set; } public OutArgument<string> bookMark{get;set;} // 如果活动返回值,则从 CodeActivity<TResult> // 并从 Execute 方法返回该值。 //2.修改上下文类型 protected override void Execute(NativeActivityContext context) { // 获取 Text 输入参数的运行时值 string text = context.GetValue(this.Text); //3.创建书签并设置书签恢复会的回调函数 context.CreateBookmark("name", new BookmarkCallback(final)); } //4.重写CanInduceIdle protected override bool CanInduceIdle { get { return true; } } //5.通过恢复书签时自动调用此函数来将书签传递给外部变量 protected void final(NativeActivityContext context,Bookmark bookmark,object obj) { Dictionary<string, object> o = (Dictionary<string, object>)obj; context.SetValue(bookMark, context.ActivityInstanceId); }
1.使用WorkflowApplication启动活动
//与主线程同步 AutoResetEvent syncEvent = new AutoResetEvent(false); var act = new Activity1(); Dictionary<string, object> dictionary = new Dictionary<string, object>(); dictionary.Add("pic","1"); WorkflowApplication app = new WorkflowApplication(act, dictionary); //运行活动 app.Run(); //等待信号 syncEvent.WaitOne();
2.持久化的sql路径
C:\Windows\Microsoft.NET\Framework\v4.0.30319\SQL\en
3.添加程序集
3.添加引用
using System.Activities.DurableInstancing;
4.在合适位置绑定数据持久化使用的数据库
SqlWorkflowInstanceStore store = new SqlWorkflowInstanceStore(@"Server=DESKTOP-OIGV51O\SQLEXPRESS;database=WFTest;uid=sa;pwd=123"); //绑定数据库 app.InstanceStore = store;
到这一步数据库中便已经能够查看到数据了,接下来要在需要的位置获取我们的书签
5.继续执行后续步骤
//继续执行 //此处使用数据库中工作流的ID,而不是使用书签名 app.Load(Guid.Parse(textBox2.Text)); app.ResumeBookmark(textBox1.Text,null);
代码:下载
上一篇:.net WCF WF4.5