工作流帮助类:

 //让工作流继续沿着书签的位置向下执行
value是向书签传递参数 wfc.ResumeBookmark(bookmarkName,value);

//把传过来的数据value作为输出参数outResult的值 传到书签外面其实执行这个函数  
private void MyCallback(NativeActivityContext context, Bookmark bookmark, object value)
{

}


namespace EazyBPMS.WorkFlow
{
   public class WorkFlowApplicationHelper
    {
        //创建工作流
        public static WorkflowApplication CreateWorkflowApp(Activity activity,string instanceId, Dictionary<string, object> dictionary)
        {
             //每次点击的时候都会创建新的工作流实例
            WorkflowApplication wfc = new WorkflowApplication(activity, dictionary);
            //WorkflowInvoker.Invoke(new DemoActivity());
            wfc.Idle += a =>//监控,当工作流停下来的时候执行
              {
                  Console.WriteLine("工作流停下来了....");
              };
            //当工作流停顿下来了,进行什么操作,如果返回的是unload  就卸载当前工作流实例  持久化到数据库中
               wfc.PersistableIdle = delegate (WorkflowApplicationIdleEventArgs e2)
                {
                    Console.WriteLine("工作流被卸载了,进行持久化");
                    return PersistableIdleAction.Unload;
                };
            //监听卸载事件
            wfc.Unloaded += a =>
              {
                  Console.WriteLine("工作流被卸载了");
              };
            //当出现了未处理的异常的时候
            wfc.OnUnhandledException += a =>
              {
                  return UnhandledExceptionAction.Terminate;//当出现异常的时候直接结束工作流

              };
            wfc.Aborted += a =>
              {
                  Console.WriteLine("工作流终止了");
              };
            //创建一个保存工作流实例的sqlstore对象
            SqlWorkflowInstanceStore store =
    new SqlWorkflowInstanceStore(DbHelperSQL.connectionString);

            //当前工作实例持久化的时候保存到数据库中
            wfc.InstanceStore = store;
            // wfApp.Id;//工作流实例id需要将此实例id保存到实例数据库中
            EazyBPMS.BLL.eazy_wf_instance bll = new BLL.eazy_wf_instance();
           EazyBPMS.Model.eazy_wf_instance model = bll.GetModel(Convert.ToInt32(instanceId));
            model.WFApplicationId = wfc.Id;
            bll.Update(model);
            wfc.Run();
            return wfc;
        }

        //继续往下执行工作流
        public static WorkflowApplication ResumeBookMark(Activity activity,Guid InstanceId,string bookmarkName, BaseResumeBookMarkValue value)
        {
            //每次点击的时候都会创建新的工作流实例
            WorkflowApplication wfc = new WorkflowApplication(activity);
            //WorkflowInvoker.Invoke(new DemoActivity());
            wfc.Idle += a =>//监控,当工作流停下来的时候执行
              {
                  Console.WriteLine("工作流停下来了....");
              };
            //当工作流停顿下来了,进行什么操作,如果返回的是unload  就卸载当前工作流实例  持久化到数据库中
               wfc.PersistableIdle = delegate (WorkflowApplicationIdleEventArgs e3)
                {
                    Console.WriteLine("工作流被卸载了,进行持久化");
                    return PersistableIdleAction.Unload;
                };
            //监听卸载事件
            wfc.Unloaded += a =>
              {
                  Console.WriteLine("工作流被卸载了");
              };
            //当出现了未处理的异常的时候
            wfc.OnUnhandledException += a =>
              {
                  return UnhandledExceptionAction.Terminate;//当出现异常的时候直接结束工作流

              };
            wfc.Aborted += a =>
              {
                  Console.WriteLine("工作流终止了");
              };
            //创建一个保存工作流实例的sqlstore对象
            SqlWorkflowInstanceStore store =
    new SqlWorkflowInstanceStore(DbHelperSQL.connectionString);

            //当前工作实例持久化的时候保存到数据库中
            wfc.InstanceStore = store;
            wfc.Load(InstanceId);
            //从数据库中加载工作流状态
            //让工作流继续沿着书签的位置向下执行
            wfc.ResumeBookmark(bookmarkName,value);
            return wfc;
        }
    }
}
View Code

相关文章: