工作流插件
==========

在流程设计时，如果标准的设置不满足需求，可以给工作流增加扩展插件来实现更加复杂的业务逻辑，工作流的插件场景主要集中在参与人，条件规则，节点进入和离开时，自动节点等。

插件支持多种扩展方式，支持Java扩展、Javascript脚本扩展、实体操作扩展等，在不同的场景下支持不同的扩展方式：

1.  参与人插件：只支持Java扩展&javaScript脚本扩展，只能定义一个。

2.  条件规则扩展：只支持Java扩展&javaScript脚本扩展，只能定义一个。

3.  自动节点：可执行Java扩展，javaScript脚本扩展和实体操作，可执行多个业务扩展插件。

4.  节点进入&离开插件扩展：可执行Java，javaScript脚本和实体操作扩展，可执行多个业务扩展插件.

5.  节点有多种进入方式，正常进入，驳回进入或者强制跳转进入，可在不同的细分进入方式时执行不同的插件，比如在驳回时，修改单据状态为审核不通过。

6.  节点离开时：离开节点时执行某个业务逻辑，如果选择【离开节点时】执行，任意决策项都会执行该插件

7.  任务处理时执行：可以根据决策项来定义离开时要执行的业务插件，比如在审核通过后执行什么业务插件，在审核不通过后执行什么业务插件。

8.  节点记录格式化插件：插件可修改当前节点流转记录描述的文字内容，如添加处理人职位等，在审批记录组件、查看流转图等显示修改的流转记录；工作流将原始信息传递给插件，插件返回修改结果

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

1.  **工作流插件-Java插件**

>   流程中所有的Java插件都需要实现IWorkflowPlugin接口，可以根据不同的场景调用不同的接口。插件接口中传递的参数AgentExcution为流程执行时的执行实例对象，从其中可以获取到以下信息.

1.  getBusinessKey： 获取当前处理的单据ID

2.  getEntityNumber：获取当前处理的单据实体编码

3.  getCurrentTaskId：获取当前工作流任务ID，自动节点、跳过节点等不会产生任务

4.  getProcessDefinitionId：当前单据启动的流程ID

5.  getProcessInstanceId: 当前单据所启动的流程实例ID

6.  getCurrentFlowElement:
    当前节点信息，可以获取节点id，编码，名称，某个属性的值。

7.  getVariable：获取某个流程变量的值

8.  setVariable：设置某个流程变量的值

9.  getCurrentTaskResult：获取当前任务的执行结果，可以获取到决策项编码、名称、类型和审批意见。

10. getStartUserId：流程发起人ID

![](media/5747580cf777c17b96cbe922af265f0f.png)

1.  **工作流插件-脚本插件**

>   流程中所有的脚本插件和Java插件类似，实现的方法和传递的参数也类似。

1.  getBusinessKey： 获取当前处理的单据ID

2.  getEntityNumber：获取当前处理的单据实体编码

3.  getCurrentTaskId：获取当前工作流任务ID，自动节点、跳过节点等不会产生任务。

4.  getProcessDefinitionId：当前单据启动的流程ID

5.  getProcessInstanceId: 当前单据所启动的流程实例ID

6.  getCurrentFlowElement:
    当前节点信息，可以获取节点id，编码，名称，某个属性的值。

7.  getVariable：获取某个流程变量的值

8.  setVariable：设置某个流程变量的值

9.  getCurrentTaskResult：获取当前任务的执行结果，可以获取到决策项编码、名称、类型和审批意见

10. getStartUserId：流程发起人ID

![](media/11667f212ff266bf8ea8bb66db6d43a2.png)

![](media/2fcef71bd6e32cff1a6f5866dd443488.png)

1.  **工作流插件-操作**

>   流程中的插件也可以执行单据上的某个操作，对于自动执行节点和进入、离开节点的插件除了需要设置正向执行的插件之外，也需要设置当撤回时执行的撤回插件。

![](media/5e41453e345920eca3d987a303ce6283.png)

应用场景
--------

-   流程运行中，需要改变单据状态。

>   eg:下图会审驳回至人工节点，此过程调用撤销操作，把单据状态从“已提交”变为“暂存”；用户在消息中心-已办任务列表（或单据中撤回按钮）中撤回刚刚的撤销操作，任务从人工节点又回到会审节点，此过程调用“已提交”操作，状态从“暂存”变为“已提交”

![](media/0c0a9c6aeccc0f5540c62e70aecf3044.png)

-   工作流服务只负责调用单据中的“操作”，“操作”内容由单据决定；单据的状态有一定的逻辑控制，如果插件的调用逻辑与单据状态逻辑有冲突（eg:一级审批和会审节点都在同意时调用审核通过操作，但单据状态是审核通过时不允许再一次转变为审核通过），会导致插件执行失败，流转日志报“业务逻辑错误”
