zoukankan      html  css  js  c++  java
  • .NET 开源工作流: Slickflow流程引擎基础介绍(五) -- 会签加签高级特性介绍

    前言:会签和加签是常见审批流程模式,在引擎中,对这两种流程模式做了分别定义和实现,其中也用到了Workflow Pattern的Multiple Instance(多实例) 。

    1. 会签和加签的定义

         会签即当前运行节点有多人进行办理,或者可以说当前节点存在多个办理任务。这些任务可以分为两种情况来运行:一种是按顺序进行办理,即串行会签;一种是同时进行办理,即并行会签。

        串行会签和并行会签都可以进行通过率的设置,串行会签和并行会签中通过率是按照通过人数或者百分比进行设置,达到通过人数(或者百分比)则该节点办理完成,进入下一个节点。

        加签即当前办理节点中需要另外办理人加入时的操作。加签的方式分为三种:前加签、后加签和并行加签。

        前加签:即新加入的办理人在发起加签的办理人之前办理。

        后加签:即新加入的办理人在发起加签的办理人之后办理。

        并行加签:即新加入的办理人和发起加签的办理人同时办理。

        前加签和后加签均属于串行加签,按顺序进行办理。在加签中仍然可以设置通过率,由于加签是动态生成任务和节点,所以加签的通过率也需要动态传入。串行加签和并行加签的通过率和会签通过率的设置方式相同。

    2. Multiple Instance多实例模式

         多实例模式是针对主节点有多个实例节点运行的场景,在会签和加签审批流中,引擎组件采用多实例模式。

    3. 会签加签使用说明

     3.1 会签

     3.1.1 流程定义中

    <Activity name="任务" id="bb035582-9b73-460a-eaa5-bb3a786f9d3e" code="">

              <Description>任务</Description>

              <ActivityType  type="TaskNode"  complexType="SignTogether"   mergeType="Parallel"  completeOrder="2"  compareType=”count”/>

             ……..

    </Activity>

    说明:

    complexType:会签SignTogether或者加签SignForward模式

    mergeType:并行Parallel或者串行Sequence模式

    compareType:通过人数count或者百分比percentage

    completeOrder:通过率,可以是通过率或百分比,由compareType决定

    3.1.2 流程转交时对下一步人员进行赋值

    (1)    为runner的NextActivityPerformers赋值。

    接收人Performers的JSON格式为:{“ActivityGUID”,[{“UserID”:”UserName”}]}。

    假设下一步人员有两个,那么以上格式可替换为:{“072af8c3-482a-4b1c-890b-685ce2fcc75d”,[{“01”:”张三”},{“02”:”李四”}]}

    将以上结果转换为字典Dictionary<string, PerformerList>并赋值给WfAppRunner对象的NextActivityPerformers属性。例如:

    PerformerList p1 = new PerformerList{UserID=”01”,UserName=”张三”};

    PerformerList p2 = new PerformerList{UserID=”02”,UserName=”李四”};

    Dictionary<string, PerformerList> dict = new Dictionary<string, PerformerList>();

    dict.Add(“072af8c3-482a-4b1c-890b-685ce2fcc75d”,p1);

    dict.Add(“072af8c3-482a-4b1c-890b-685ce2fcc75d”,p2);

    WfAppRunner runner = new WfAppRunner();

    runner.NextActivityPerformers= dict;

    (2)调用引擎RunProcessApp(WfAppRunner runner)方法送往下一步

     串行会签时引擎会按顺序生成办理任务,未办理的人员为挂起状态,待上一步人员办理完成后修改为办理状态,依次类推。

     并行会签时引擎生成多人的办理任务,并且状态都为未接收状态,所有办理人员可以同时办理。

     3.2 加签

     3.2.1 流程定义

    <Activity name="任务" id="bb035582-9b73-460a-eaa5-bb3a786f9d3e" code="">

              <Description>任务</Description>

              <ActivityType  type="TaskNode"  complextype="SignForward" />

             ……..

    </Activity>

    3.2.3 发起加签

    (1)选择加签人员

    当该节点处于运行状态时,可以选择加签人员并设置加签通过率进行发起加签。

    选择加签人员后,对WfAppRunner对象的NextActivityPerformers属性进行赋值,格式同会签格式。

    Runner中DynamicVariables为动态变量,可将通过率赋值给它,比如:

    DynamicVariables: {

    "SignForwardType":SignForwardBefore,

                “SignForwardCompleteOrder”:2

                   }

    参数说明:

    SignForwardType:加签通过类型,可分为SignForwardBefore前加签、SignForwardBehind后加签、SignForwardParallel并行加签

    SignForwardCompleteOrder:加签通过率,串行加签为通过人数,并行加签为通过百分比

    (2)调用引擎SignForwardProcess(WfAppRunner  runner)发起加签

    WfExecutedResult runAppResult = _workflowService.SignForwardProcess(runner);

    4. 总结

        会签和加签的实现是作为引擎组件的高级特性,在解决多人审批场景时,主要涉及到会(加)签的不同子类别,通过率设置等选项。作为企业版的核心功能,为企业客户集成引擎组件,带来了实质的便利。

    5. 致谢

        本文内容由小组成员青文完成,谢谢她认真细致的工作,给大家奉献了详细的文字内容和代码片段。

  • 相关阅读:
    服务管理器
    自动启动管理器
    进程管理器
    进程模块查看器
    无DLL远程注入
    远程DLL注入
    U盘免疫
    WSAAsyncSelect Demo
    select Demo
    校正系统时间
  • 原文地址:https://www.cnblogs.com/slickflow/p/5275087.html
Copyright © 2011-2022 走看看