zoukankan      html  css  js  c++  java
  • Asp.net工作流workflow实战之工作流启动与继续(三)

    工作流帮助类:

     //让工作流继续沿着书签的位置向下执行
    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

    工作流启动:

     protected void btnstart_Click(object sender, EventArgs e)
            {
                try
                {
                    int i = 0;
                EazyBPMS.Web.UI.ManagePage bllmanage = new UI.ManagePage();
                Model.manager currentusermodel = bllmanage.GetAdminInfo();
                txttest.Text = currentusermodel.real_name;
                int currentUserId = currentusermodel.id;
    
                //1、将本页面的表单数据提交到表单实例表中(包括附件等等)
                eazy_wf_instance bll = new eazy_wf_instance();
                EazyBPMS.Model.eazy_wf_instance model = new EazyBPMS.Model.eazy_wf_instance();
                model.InstName = txtInstanceName.Text;
                model.InstanceForm = txtInstanceForm.InnerText;
                model.Remark = txtRemark.Text;
                model.SubBy = currentUserId;
                model.Status = (short)EazyEnums.WFInstanceStatusEnum.Running;
                model.WFApplicationId = Guid.Empty;
                model.WF_TempID = this.id;
                int instanceid= bll.Add(model);
                if (instanceid > 0)
                {
                    i += 1;
                }
    
              
                //3、在步骤表中添加2个步骤:第一个为当前已经完成的步骤,第二个为下一步谁审批的步骤
    
                EazyBPMS.BLL.eazy_wf_step stepBLL = new eazy_wf_step();
                //第一个步骤  一个当前已经处理的完成步骤。
               
                EazyBPMS.Model.eazy_wf_step startStep = new Model.eazy_wf_step();
                startStep.WF_Instance = instanceid;
                startStep.Checktime = DateTime.Now;
                startStep.Comment = "任务表单提交";
                startStep.DelFlag = del;
                startStep.IsEndStep = false;
                startStep.IsStartStep = true;
                startStep.ProcessBy = currentUserId;
                startStep.Remark = "朕对自己没意见,没备注。";
                startStep.Result = "通过";
                startStep.SubTime = DateTime.Now;
                startStep.StepName = "任务表单提交";
                //此步骤为开始步骤状态为已经完成
                startStep.Status = (short)EazyEnums.WFStepStatusEnum.End;
               int a= stepBLL.Add(startStep);
                if (a > 0)
                {
                    i += 1;
                }
    
                //第二个步骤:下一步谁审批的步骤。
    
                EazyBPMS.Model.eazy_wf_step nextStep = new Model.eazy_wf_step();
                nextStep.WF_Instance = instanceid;
                nextStep.Checktime = DateTime.Now;
                nextStep.Comment = "";
                nextStep.DelFlag = del;
                nextStep.IsEndStep = false;
                nextStep.IsStartStep = false;
                nextStep.ProcessBy = Convert.ToInt32(this.txtrenyuan.Text);
                nextStep.Remark = "";
                nextStep.Result = "";         
                //此步骤为开始步骤状态为已经完成
                nextStep.Status = (short)EazyEnums.WFStepStatusEnum.Running;
              int b=stepBLL.Add(nextStep);
                    if (b > 0)
                    {
                        i += 1;
    
                    }
    
    
    
    
    
                    if (i == 3)
                    {
                        //2、启动工作流实例
                        var wfApp = WorkFlowApplicationHelper.CreateWorkflowApp(new Finance_Activity(), instanceid.ToString(), new Dictionary<string, object> { { "TempBookMarkName", "项目经理审批chao" } });
                      
                        JscriptMsg("添加任务成功!", "mywork.aspx");
                    }
                    else
                    {
                        JscriptMsg("添加任务失败!", "mywork.aspx");
                    }
                }
                catch (Exception ex)
                {
    
                    JscriptMsg(ex.ToString(), "mywork.aspx");
                }
                
            }

    工作流继续:

      protected void btnstart_Click(object sender, EventArgs e)
            {
                //EazyBPMS.Model.manager_role role = new Model.manager_role();
                //EazyBPMS.BLL.manager_role rolebll = new BLL.manager_role();
    
                if (isplay)
                {
    
                    if (this.txtbumen.Text != "4")
                    {
                        IsPass = true;
                    }
                    else
                    {
                        IsPass = false;
    
                    }
    
                }
                else
                {
                    IsPass = true;
    
                }
    
    
    
                    //通过
                    //首先更新当前步骤
    
    
                    EazyBPMS.BLL.eazy_wf_step stepBLL = new EazyBPMS.BLL.eazy_wf_step();
                //第一个步骤  一个当前已经处理的完成步骤。
    
                EazyBPMS.Model.eazy_wf_step currentStep = stepBLL.GetModel(this.StepId);
                //currentStep.WF_Instance = instanceid;
                currentStep.Checktime = DateTime.Now;
                currentStep.Comment = "提交审批表单";
                currentStep.DelFlag = del;
                // currentStep.IsEndStep = false;
                currentStep.IsStartStep = false;
                //currentStep.ProcessBy = currentUserId;
                currentStep.Remark = "朕对自己没意见,没备注。";
                currentStep.Result = "通过";
                currentStep.SubTime = DateTime.Now;
                //currentStep.StepName = "项目经理审批";
                //此步骤为开始步骤状态为已经完成
                currentStep.Status = (short)EazyEnums.WFStepStatusEnum.End;
                stepBLL.Update(currentStep);
    
                if (isplay)
                {
    
                    //第二个步骤:下一步谁审批的步骤。
    
                    EazyBPMS.Model.eazy_wf_step nextStep = new Model.eazy_wf_step();
                    nextStep.WF_Instance = this.id;
                    nextStep.Checktime = DateTime.Now;
                    nextStep.Comment = "";
                    nextStep.DelFlag = del;
    
                    nextStep.IsStartStep = false;
                    nextStep.ProcessBy = Convert.ToInt32(this.txtrenyuan.Text);
                    nextStep.Remark = "";
                    nextStep.Result = "";
    
                    //此步骤为开始步骤状态为已经完成
                    nextStep.Status = (short)EazyEnums.WFStepStatusEnum.Running;
                    stepBLL.Add(nextStep);
    
    
                }
    
                //让书签继续往下走
                BaseResumeBookMarkValue value = new BaseResumeBookMarkValue();
                value.BookMarkName = "";
                value.value = IsPass ? 1 : 0;//通过为1不通过为-1
                WorkFlowApplicationHelper.ResumeBookMark(
                    new Finance_Activity(), this.wfAppId, currentStep.StepName, value);
                JscriptMsg("审批成功!", "waitwork.aspx");
            }
  • 相关阅读:
    [转]为什么匿名内部类参数必须为final类型
    [转]软件开发规范—模块开发卷宗(GB8567——88)
    [转]概要设计与详细设计的区别
    [转]解析UML建模语言中的UML图分类、 UML各种图形及作用
    python mysql插入中文乱码
    pycharm mysql数据源配置、SQL方言配置
    pycharm批量查找替换,正则匹配
    python第三方库安装
    什么是Vagrant
    python读写excel文件
  • 原文地址:https://www.cnblogs.com/yabisi/p/6056878.html
Copyright © 2011-2022 走看看