Activiti调用式子流程

1.事物子流程

2.调用式子流程

需要写两个流程定义文件:

其中一个的调用事件和边界事件:

<callActivity id="callActivity" calledElement="my-process-check-order">
    <extensionElements>
        <activiti:in  source="errorflag" target="errorflag" />
        <activiti:out source="key1" target="key1" />
    </extensionElements>
</callActivity>

<boundaryEvent id="boundary" attachedToRef="callActivity">
    <errorEventDefinition errorRef="bpmnError"></errorEventDefinition>
</boundaryEvent>

第二个流程定义文件:

<process id="my-process-check-order">

    <startEvent id="start"/>
    <endEvent id="end"/>
    <parallelGateway id="parallelGateway1" name="并行网关1"/>
    <serviceTask id="pay" name="确认支付" activiti:class="com.syc.activiti.example.MyPayJavaDelegate"/>
    <serviceTask id="take" name="确认收货" activiti:class="com.syc.activiti.example.MyTakeJavaDelegate"/>
    <parallelGateway id="parallelGateway2" name="并行网关2"/>
    <...>
</process>

MyPayJavaDelegate类:

@Override
public void execute(DelegateExecution execution) {
    LOGGER.info("variables = {}", execution.getVariables());
    LOGGER.info("run my pay java delegate {}", this);
    execution.getParent().setVariableLocal("key2", "value2");
    execution.setVariable("key1", "value1");
    execution.setVariable("key3", "value3");
    Object errorflag = execution.getVariable("errorflag");
    if(Objects.equals(errorflag, true)){
        throw new BpmnError("bpmnError");
    }
    LOGGER.info("pay error");
}

测试:

@Test
@Deployment(resources = {"my-process-subprocess3.bpmn20.xml","my-process-subprocess4.bpmn20.xml"})
public void testSubProcess4(){
    Map<String, Object> variables = new HashMap<>();
    variables.put("errorflag", false);
    variables.put("key0", "value0");
    ProcessInstance processInstance = activitiRule.getRuntimeService().startProcessInstanceByKey("my-process", variables);
    Task task = activitiRule.getTaskService().createTaskQuery().singleResult();
    LOGGER.info("task.name = {}",task.getName());
    Map<String, Object> variables1 = activitiRule.getRuntimeService().getVariables(processInstance.getId());
    LOGGER.info("variables1 = {}", variables1);
}

errorflag为false,正常执行:

errorflag改为true后的异常输出:

好处:将流程的复杂度降低,把流程定义文件拆分成多个小的文件

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值