snaker流程预览

需求:工作流引擎snaker,不可以返回完成全流程图,通过表达式计算出一条可执行的子流程。

分析:直接返回完整流程图比较简单,直接获取List<NodeMode>返回即可,当前需要返回一条可执行的子流程,开始头疼。流程预览并非流程提交,不可以通过任务executeaske()方法获取条件decisionMode下outputs下enabled=true条件节点。前端提供参数orderId。

开发过程

@Autowired private SnakerEngine facets;

1、获取流程实例order

Order order = facets.query().getOrder(orderId);

2、获取表单参数

Map<String, Object> argsMap = (Map<String, Object>) JSON.parse(order.getVariable());

3、获取所有节点

ProcessModel processModel =        facets.process().getProcessById(order.getProcessId()).getModel();
List<NodeModel> nodeModels = processModel.getNodes();

4、迭代获取流程节点的properties详情

Process process = facets.process().getProcessById(order.getProcessId());
FlowWebDto flowWebDto = this.getProcessById(order.getProcessId());
ProcessData processData = flowWebDto.getProcessData();
Map<String, ProcessData> processDataMap = new HashMap<>();
// 递归获取每个流程节点的properties
ProcessData.getRecursiveProperties(processData, processDataMap);

5、创建执行器

Execution execution = new Execution(facets,process,order, (Map)argsMap);

6、获取表达式对象

Expression expression =  (Expression) ServiceContext.getContext().find(Expression.class);

7、获取所有的条件判断节点

List<DecisionModel> decisionModel = SnakerHelper.getDecisionModel(nodeModels);

8、执行条件表达进行判断

for(int i=0;i<decisionModel.size();i++){
  Iterator i$ = decisionModel.get(0).getOutputs().iterator();
  while(i$.hasNext()) {
    TransitionModel tm = (TransitionModel)i$.next();
    String expr = tm.getExpr();
    if (StringHelper.isNotEmpty(expr) && (Boolean)expression.eval(Bo
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值