2023年8月1日发(作者:)
activiti学习(⼗五)——表达式的使⽤本⽂开始重新回归⼀些activiti的基本使⽤。感觉前⾯太想展开源码和架构⽅⾯的探讨,但在这过程中,⼜涉及到activiti很多基本的⽤法我没有熟练使⽤,例如表达式、⽹关、多实例任务、作业、边界事件等等。导致在探讨源码的时候常常⼀笔带过,虽然对整体理解没有太⼤的问题,但是总感觉缺了点什么。所以后续决定也要熟练这些基本功能的使⽤。毕竟很多业务场景还是需要使⽤这些功能的。表达式简述activiti使⽤UEL处理表达式。UEL(Unified Expression Language)是EE6规范的⼀部分。activiti使⽤JUEL以⽀撑所有的运⾏环境及最新的UEL规范。表达式可以⽤在很多场景中,例如ServiceTask、执⾏监听器、任务监听器以及连线的条件上。表达式${param}${}${()}${("hello")}表达式含义获取变量param的值获取对象param的age属性的值调⽤对象param的test⽅法调⽤对象param的test⽅法,参数为字符串"hello"除了上⾯所说的这些表达式,还有以下三种流程引擎的内置变量变量名称taskexecutionauthenticatedUserId变量含义通过此变量可以获取⽤户任务相关的属性。实现了DelegateTask接⼝通过此变量可以获取流程实例的信息。实现了DelegateExecution接⼝在启动流程时调⽤IdentityService的setAuthenticatedUserId⽅法设置表达式举例现在有个场景,新建⼀个请假流程,员⼯提交给经理审批,流程到员⼯待办和到经理待办时都有提⽰,流程结束时也会提⽰流程完成。这个例⼦我们使⽤系列⽂章最简单的作为流程引擎配置⽂件,在《》中查找。流程⽂档如下: public void callComplete(DelegateExecution execution) { n(cessBusinessKey() + " 流程完成"); }}Notice类的实例因为要作为流程变量传⼊,所以必须实现Serializable接⼝。我们定义callEmployee和callComplete⽅法,分别表⽰通知员⼯有新待办和通知流程结束。注意这两个⽅法的参数,它们是通过内置变量task和execution传⼊,可往回查看流程⽂档对应的地⽅。接下来创建⼀个ManagerListener,作为usertask2的任务监听器。这个类作为delegateExpression⽅法创建任务监听器的处理类,和class⽅式创建的任务监听器差不多,区别是class⽅式需指定具体类,⽽delegateExpression⽅式则是通过流程变量指定:public class ManagerListener implements TaskListener{ public void notify(DelegateTask delegateTask) { String assignee = ignee(); n(assignee + "经理有待办需要审批"); }}这⾥notify实现很简单,就是简单输出某某精⼒有待办的提⽰。下⾯是我们的客户调⽤,blic class App { private ProcessEngine pe; public void getFromProcessEngineConfiguration() { ProcessEngineConfiguration pec = ProcessEngineConfiguration .createProcessEngineConfigurationFromResource(""); pe = rocessEngine(); } public void deploy() { RepositoryService repositoryService = ositoryService(); DeploymentBuilder deploymentBuilder = Deployment(); InputStream inputStream = null; try { inputStream = ssLoader().getResource("bpmn/").openStream(); utStream("", inputStream); ("expressDeployment"); Deployment deployment = (); n("部署完成"); } catch (IOException e) { tackTrace(); } } public static void main(String[] args) { App app = new App(); mProcessEngineConfiguration(); (); }}5-9⾏为初始化流程引擎。11-25⾏为部署流程⽂档。这个和以前没什么区别,部署流程⽂档之后,查看数据库的情况,查看act_re_procdef:接下来我们添加启动函数并调⽤之:public void startProcessByIdWithVars() { RuntimeService runtimeService = timeService(); Notice notice = new Notice(); String businessKey = "请假单01"; Map 接下来定义经理审批⽅法manageCompleteTask并调⽤之:public void manageCompleteTask() { TaskService taskService = kService(); TaskListener taskListener = new ManagerListener(); Map
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1690874741a452343.html
评论列表(0条)