Business Rule Task
即业务规则任务
,就是可以针对一个任务流程定义多个规则,打个比方就是一个流程能通过的情况可能有多种,这里的很多种就可以抽象成业务规则。所以配置好业务规则可以使一个流程变得更加灵活。
为了说明Business Rule Task
以及总结之前说明的各种任务组件,这里将绘制一个稍微复杂点的流程。
一、绘制流程图
流程图最终效果。
当审批金额小于1万元时,不问原因直接由财务审批,财务审批后回调Java代码执行回调逻辑。
当审批金额大于等于1万元时,经由审批决策判断该审批申请是否通过。
- 通过,由财务审批。
- 不通过,回调Java代码,执行回调逻辑。
- 在
财务审批
节点添加变量passed
供gateway
节点使用。 - 配置
审批决策
节点
二、决策配置
- 新建一个决策配置页(DMN)。
- 配置决策名和id。
-
配置决策内容。
这里配置了两个输入项,一个返回项。
- Role,角色 - 申请人角色
- UseFor,资金用处,这里定义了两种可以被通过的用处:文具,电脑。一种不能被通过的用处:食物。
- Passed,决策是否通过。
最终决策配置。
三、配置回调类
/**
* 审批同意委托类
*/
public class AgreeDelegate implements JavaDelegate {
@Override
public void execute(DelegateExecution execution) throws Exception {
System.out.println("审批【金额:"
+ execution.getVariablesLocal().get("amount") + "】已被同意。");
}
}
/**
* 审批拒绝委托类
*/
public class RejectDelegate implements JavaDelegate {
@Override
public void execute(DelegateExecution execution) throws Exception {
System.out.println("审批【金额:" + execution.getVariables().get("amount")
+ ", 角色:" + execution.getVariables().get("role")
+ ", 资金方向:" + execution.getVariables().get("userFor") + "】已被拒绝。");
}
}
四、测试
场景一:金额小于1万元,审核通过
访问http://localhost:8080/app/tasklist/default/#/
查看任务列表。
可以看到流程已经到了财务审批
节点。
点击页面上的Form
table,将passed
勾选上。
点击Complete
,查看系统日志。
场景二:金额小于1万元,审核拒绝
访问http://localhost:8080/app/tasklist/default/#/
,点击页面上的Form
table,将passed
勾选取消。
场景三:金额大于1万元,决策拒绝
访问http://localhost:8080/app/cockpit/default/#/decisions
查看决策列表。
点击Approve Decision
,查看决策详情。
点击下方的ID
,查看决策结果。
可以看到流程走到了编号为4的业务规则,下方的Inputs
table中是我们启动流程实例时传入的决策变量值。
查看系统日志。
可以看到资金方向为null
,所以系统获取到的UseFor
是业务规则里配置的值。
场景四:金额大于1万元,决策通过
访问http://localhost:8080/app/tasklist/default/#/
查看任务列表,可以看到任务已经到了财务审批
节点。
再次访问http://localhost:8080/app/cockpit/default/#/decisions
查看决策详情。
可以看到这次走到了业务规则2,返回结果为true
。
回到任务列表勾选passed
。
查看系统日志。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。