Camunda如何调用Java自定义类

在Camunda中,有四种方法来声明如何调用Java逻辑:


  1. 指定实现JavaDelegate或ActivityBehavior的类
  2. 计算解析为委托对象的表达式
  3. 调用方法表达式
  4. 求值表达式的值


本文重点描述基于JavaDelegate配置Camunda 的自动化服务节点,在JavaDelegate实现类里完成逻辑计算,并把计算结果返回给流程变量。


一、设计流程图



要指定在进程执行期间调用的类,camunda:class属性需要提供完全限定的类名。要实现可以在流程执行期间调用的类,这个类需要实现org.camunda.bpm.engine.delegate.JavaDelegate接口,并在execute方法中提供所需的逻辑。当流程执行到达这个特定的步骤时,它将执行该方法中定义的逻辑,并以默认的BPMN 2.0方式保留活动。


作为示例,让我们创建一个Java类,实现里模拟业务逻辑。这个类需要实现org.camunda.bpm.engine.delegate.JavaDelegate接口,它需要我们实现execute(DelegateExecution)方法。引擎将调用这个操作,并且需要包含业务逻辑。流程实例信息(如流程变量和其他信息)可以通过DelegateExecution接口访问和操作。


JavaDelegate示例实现类:


package com.example.demo1;import org.camunda.bpm.engine.delegate.DelegateExecution;import org.camunda.bpm.engine.delegate.JavaDelegate;/** * 贷款计算类 */public class LoanDelegate  implements JavaDelegate {    @Override    public void execute(DelegateExecution delegateExecution) throws Exception {        Double yearWages = (Double) delegateExecution.getVariable("yearWages");        Double houseAssets = (Double) delegateExecution.getVariable("houseAssets");        double sum = yearWages + houseAssets;        if(sum<=0){            delegateExecution.setVariable("creditRating","C");            delegateExecution.setVariable("loanLimit",0);        }else  if(sum>0 && sum <=100){            delegateExecution.setVariable("creditRating","B");            delegateExecution.setVariable("loanLimit",sum*0.8);        }else  if(sum>100){            delegateExecution.setVariable("creditRating","A");            delegateExecution.setVariable("loanLimit",sum*1.2);        }    }}


以下是完整的BPMN模型文件:


<?xml version="1.0" encoding="UTF-8"?>            Flow_0kzdck2                      Flow_0h8bikl      Flow_03h3srs                  Flow_03h3srs              Flow_0kzdck2      Flow_0h8bikl                                                                                                                                                                                      


二、发起流程测试


登录:http://localhost:8080/camunda/app/admin/default/#/login


1、发起流程,输入流程变量,后面的Java代理节点计算需要这两个流程变量



2、提交流程后,查看流程图,Java代理节点已经成功执行了



3、查看表单中的流程变量,Java代理节点计算后的返回值已经成功写入了。



更多参考:


Service Task | docs.camunda.org


发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章