流程变量
========

功能介绍
--------

流程变量是在各个节点之间可以共享的数据，主要用于条件判断等（如下图）。流程变量只能在插件中进行赋值，只有当经过复杂计算获取的值才推荐使用流程变量，一般可以直接使用单据的属性作为条件判断项。

![](media/fe9e67739199660308cba47e17df006f.png)

场景案例
--------

**1.使用变量来实现循环某个节点的案例**

业务场景：用户提交单据之后，需要他的直接上级审批，每个审批人都存在一个级别，当审批人的级别大于2之后，流程往下走，否则一直循环获取上级。

![https://club.kdcloud.com/download?fileName=0100c70266a3001048428111a254cc2bf948.png](media/65cccb5bcb4fd1152e05c9d9db1cd3ff.png)

定义变量，级别初始值为0. 处理人为一级审批的处理人。

![https://club.kdcloud.com/download?fileName=01006c6a3de35257447d8288d797cc671a1c.png](media/13c1da2bdc290696a7cbcebd3c7bee03.png)

测试用例的情况是：当级别小于2一直循环，当级别大于2，走向二级审批。

![https://club.kdcloud.com/download?fileName=0100b3fc5a26a0fc49c8bff7b2346cec0a8a.png](media/91ebcdf7b9115d1ebc0a202a7835375b.png)

定义的条件如上。另外一条线定义为否则线。

![https://club.kdcloud.com/download?fileName=010049a4df6c93804388ab72d0894c288353.png](media/c0dcd85a8c60ff203988ad7dc497e637.png)

当一级审批审批同意后，增加插件，更改级别和处理人的变量值。

![https://club.kdcloud.com/download?fileName=0100f26f334bc5c843ad9db9c0dcbfb4db22.png](media/73bba4baeeb82673eefb4c069ed1bf30.png)

插件代码如下：

![https://club.kdcloud.com/download?fileName=01008874af9dd362473982624d3becaf36fd.png](media/6bafe2c8a2231fdbec5fd267421f0d03.png)

当循环一次，level加一，当level大于2时退出循环。

最终效果图：

![https://club.kdcloud.com/download?fileName=01000db0d02b1e5b4bda8de4878592ab5f02.png](media/9ec8a94e11550dc3cf05225846b6d147.png)

**2.使用流程变量跳过下一个节点的案例**

![https://club.kdcloud.com/download?fileName=0100f89a6e5f61434cb3b35afda1368d55a6.png](media/69d5d56e2bc27040a59396070fd792a9.png)

用户场景：采购部领导审批时，如果设置了下一步参与人，技术服务部/地区部就按照设置的人会审，如果未设置人，技术服务部/地区部跳过。

第一步：

设置一个变量setdynamic 动态参与人设置标志，默认为0，数字类型。

![https://club.kdcloud.com/download?fileName=01008816050644d1454ab6e61dc837f9c3f6.png](media/e3d7d28847e6c92eea7f984e310c6506.png)

第二步：在采购部领导节点增加 节点离开 时脚本插件。

![https://club.kdcloud.com/download?fileName=0100fe6a1522c3d440db95d88ae06e880929.png](media/bd76dd4f0fedf2ebe4916af27dc7675b.png)

插件中判断，如果任务上的动态参与人变量存在，将setdynamic设置为1，否则设置为2. 
当setdynamic=2时，表示没有设置下一步参与人。

![https://club.kdcloud.com/download?fileName=0100ac928b1fc85c42298b638be85b379644.png](media/cca56dcca2d2d3fbe53dd0418ba30c50.png)

/\*\* \* \@author jlg \* \@date 2019-08-23 \*/ 

var plugin = new WorkflowPlugin({   

     notify : function(e){        

       if (e!=null && e.getCurrentTask()!=null &&
e.getCurrentTask().getVariable("dynParticipant")!=null){            

        e.setVariable("setdynamic",1);                    

       }else{            

        e.setVariable("setdynamic",2);        

} } });

第三步：设置技术服务部/地区的跳过条件，当setdynamic=2时跳过。

![https://club.kdcloud.com/download?fileName=010097c35b96a8764d2388191b7fa80ca3f0.png](media/764d15c097a0fe96e5be9897f8d07d6e.png)

第四步：当节点驳回到人工节点的时候，重置变量的初始值为0，不然再次提交时，会携带上次的变量值，在人工节点上增加正常进入，驳回进入，跳转进入时脚本插件。

![https://club.kdcloud.com/download?fileName=01000b38ccb3030b413caab7a2ebc7d6a6db.png](media/75ac3241952930267af1ee7e9e529305.png)

代码样例：

![https://club.kdcloud.com/download?fileName=0100aa44a7ffa9e64f9eabb48959749c8639.png](media/d7a6781dc0783d7ec3d54f1409b2a074.png)

文本示例：

/\*\* \* \@author jlg \* \@date 2019-08-23 \*/ 

var plugin = new WorkflowPlugin({ 

    notify : function(e){ 

       e.setVariable("setdynamic",0); 

} });
