扩展Activiti工作流任务和属性

扩展Activiti工作流任务和属性

2023年8月1日发(作者:)

扩展Activiti⼯作流任务和属性⽤过activiti的朋友都知道,activiti做⼯作流⽤起来⾮常⽅便,可以很容易的基于activiti开发出⼀个基础的OA流程,可以有多种任务,事件,⽹关提供给⼤家选择,想了解详细的,可以点击下⽅链接多了解,⽹上资料也特别多,这⾥不再赘述。下⾯给出⼏个快速⼊门的链接:咖啡兔的demo,英⽂版activti使⽤⼿册, 中⽂版⽤户⼿册但是最近做了⼀个项⽬要求是:通过web访问的可视化可扩展的流程设计器可以定制任务节点可以扩展任务属性这⼀下懵逼了,三个问题都不简单⾸先,activiti虽然⾃带⼀个web设计器activiti modeler,但是如果要⽀持⾃定义任务节点和扩展节点属性,很难修改,⽽且修改之后activiti引擎并不识别。然后就是我们扩展的任务节点和任务属性activiti引擎不识别的问题。ServiceTask Description 描述Java 服务任务⽤来调⽤外部 Java 类XML representation 内容有4钟⽅法来声明 java 调⽤逻辑:实现 JavaDelegate 或 ActivityBehavior执⾏解析代理对象的表达式调⽤⼀个⽅法表达式调⽤⼀直值表达式执⾏⼀个在流程执⾏中调⽤的类, 需要在'activiti:class'属性中设置全类名,这个类设置后,流程执⾏到serviceTask这⼀步时就会⾃动调⽤这个java类。

activiti:class="eTaskService" />注意,如果使⽤了spring mvc框架,默认配置的 activiti:class 是不能通过注解注⼊类的,如果想要通过注解注⼊java类,需要使⽤如下语法serviceTaskService是⼀个实现了 JavaDelegate 接⼝的bean, 它定义在实例的 spring 容器中serviceTask还可以注⼊多个参数

name="ServiceTaskService"

activiti:class="eTaskService">

Hello World Hello World

java后台eTaskServicepublic class ServiceTaskService implements JavaDelegate { private Expression param1; private Expression param2; public void execute(DelegateExecution execution) { String value1 = (String) ue(execution); iable("var1", new StringBuffer(value1).reverse().toString()); String value2 = (String) ue(execution); iable("var2", new StringBuffer(value2).reverse().toString()); }}⾄此我发现了ServiceTask的两个重要特性:1. 可以绑定⾃定义的java class(这不就是我想要的扩展⾃定义任务么)2. 可以传递⽆限多个参数(这不就是我想要的扩展属性么)基于ServiceTask可以有⽆限多的可能。这样基本解决了以下两个⼤问题可以定制任务节点可以扩展任务属性下⾯就剩下⼀个问题通过web访问的可视化可扩展的流程设计器然后就继续调研,发现activiti modeler我是肯定⽤不了了,原因如下:因为要使⽤serviceTask扩展任务节点,就要涉及复制出多个serviceTask节点,结果发现复制出的serviceTask节点会将原⽣的serviceTask节点功能覆盖,也就是说只能同时存在⼀个serviceTask节点复制出来的serviceTask节点扩展属性,例如:param1,param2,activiti引擎根本不认识,会报错所以不能⽤⾃带的activiti modeler,那么就得去寻找⼀个流程设计器替代品,替代品有如下要求:代码结构尽量简单可以将设计好的流程保存为格式化数据,例如json,xml等扩展性好好集成设计器的主页.PNG通过作者的⼯具类可以很容易的去扩展属性,扩展任务,然后将结果保存为json。下⾯问题⼜来了:保存的json activiti不认识这个就需要我们⾃⼰去写activiti的task解释器了,将我们读取到的json解释成acitivi可以认识的xml,保存在数据库中,然后读取我们的xml去调⽤activiti的接⼝发布。Deployment() .name(wId()) .addString(processName, flowBpmnXml).deploy();下⾯贴⼀段我的代码:@RequestMapping("deployFlow/{flowId}") @ResponseBody public Map deployFlow(@PathVariable("flowId") String flowId){ Map result = new HashMap(); workflowDesigner workflowDesigner = ByPrimaryKey(flowId); String flowBpmnXml = wBpmnXml(); String processName = wId() + "."; ("processName is : "+processName); try { Deployment deployment = Deployment() .name(wId()) .addString(processName, flowBpmnXml).deploy(); ProcessDefinitionQuery query = ProcessDefinitionQuery().deploymentId(()); ProcessDefinition processDefinition = Result(); ("code",1); ("message",()); } catch (Exception e) { ("code",0); ("message",sage()); (sage()); } (ng()); return result; }这样就完成了⼀个⾃定义任务的定义,创建,发布的过程,以上仅仅是个⼈的思路,欢迎⼤家讨论或提出意见。

发布者:admin,转转请注明出处:http://www.yc00.com/news/1690874765a452348.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信