业务需求 :将 测试节点 转换为 会签节点
实现思路:
中间表:用户保存被转换的流程以及被转换的节点
实现接口
继承接口
实现 抽象类 : comoldguyexamplemodulesworkflowserviceactivitiimplsAbstractMultiWorkFLowService
实现类:
测试例子
将 “测试节点” 普通 -> 会签
并行会签
串行会签
当前版本为activiti60,与之前版本区别
assignee:任务执行人,设置系统中的“登录名”(loginName)。
candidateUsers:任务执行人,可以填写多个。
candidateGroups:任务执行组,可以填写多个,设置系统中的“角色英文名(enname)”。
assignee和candidateUsers的区别是:assignee不需要签收任务,直接可执行任务;candidateUsers为竞争方式分配任务,被指定人待办中都有一条任务,谁先签收谁就获得任务的执行权。
taskServicesetAssignee(String taskId, String userId);
taskServiceclaim(String taskId, String userId);
taskServicesetOwner(String taskId, String userId);
关于上面三个方法的区别:
setAssignee和claim两个的区别是在认领任务时,claim会检查该任务是否已经被认领,如果被认领则会抛出ActivitiTaskAlreadyClaimedException 而setAssignee不会进行这样的检查。其他方面两个方法效果一致。
setOwner和setAssignee的区别在于
setOwner实在代理任务时使用,代表着任务的归属者,而这时,setAssignee代表的时代理办理者,
举个例子来说,公司总经理现在有个任务taskA,去核实一下本年度的财务报表,他现在又很忙没时间,于是将该任务委托给其助理进行办理,此时,就应该这么做:
taskServicesetOwner(taskAgetId(), 总经理getId());
taskServicesetAssignee/claim(taskAgetId(), 助理getId());
act_hi_taskinst表两个字段:
DELEGATION_和OWENER_
DELEGATION_值变化为PENDING,表示此任务为正在执行的委托任务;
DELEGATION_值变化为 RESOLVED,表示此任务为被解决的委托任务;
所以任务在被委托人执行时必须
taskServiceresolveTask(taskgetId(),taskVariables);//解决委托
taskServicecomplete(taskgetId(), taskVariables);//完成任务
否则容易报错A delegated task cannot be completed, but should be resolved instead
OWENR_字段设置用于查询委任人的委托任务
在执行taskServiceaddComment前,需要设置批注的所属人AuthenticationsetAuthenticatedUserId(userId);
在流程启动实例之前,设置启动者identityServicesetAuthenticatedUserId(userId);
然后流程设计模型可在流程开始节点设置变量,以供之后的环节使用
级联删除会把流程实例流程历史全部物理清空。
非级联删除,必须保证没有流程实例
二者虽然都能查询到任务实例。但是前者只能查询历史环节,就算act_hi_taskinst有数据未完成当前环节也不能查出
在流程资源文件中,每一个节点元素在activiti中都有对应的元素属性承载类,比如,UserTask任务节点,它的元素属性承载类为UserTask,相同,startEvent开始节点的元素承载类为StartEvent,在bpmn流程文件进行解析时,也是将xml文档中每个元素解析为对应的承载类,从而进行组装成一个BmpnModel模型,我们可以直接由activiti将bpmn xml文件解析为一个实例模型(下图所示),也可以完成通过自定义手动创建模型。
关于模型校验器更多细节可查看 activiti源码剖析之BpmnModel模型校验器
一个流程中,流程实例只有一个,执行对象可以有多个(如果存在分支和聚合)
SELECT FROM activitiact_ru_execution a; #正在执行的执行对象表
SELECT FROM activitiact_hi_procinst a; #流程实例的历史表
SELECT FROM activitiact_ru_task a; #正在执行的任务表(只有节点是UserTask的时候,该表中才存在数据)
SELECT FROM activitiact_hi_taskinst a; #任务历史表(只有节点是UserTask的时候,该表中才存在数据)
SELECT FROM activitiact_hi_actinst a; #所有节点的历史表
一般而言 java service节点 是 service task节点上的派生,不是BPMN20中的规范,是activiti专门为Java准备的。其中class是指向实现了指定接口的Java类 expression 是表达式
打开官方地址,点击下载demo案例
下载好后,解压。找到解压文件activit-5170下的一级目录wars
继续解压wars 下面的activiti-explorer压缩包
解压后,扔进部署好的tomcat下的webapps目录里
在eclipse里新建一个动态web项目
在eclipse里创建一个tomcat服务器,选择版本7
把刚创建的动态web项目activiti甩到右变,点确定,就建好该项目的服务器了
双击activit项目所在的服务器,d出如下窗口,记住选择如图所示的第二个项目,然后最重要的一点是从d出的下一个窗体中选择tomcat的部署路径下的webapps,选好点确定。
然后,启动项目服务器。打开一个浏览器,服务器端口是8080的则输入:>
以上就是关于Activiti6.0 动态改变流程节点类型(普通-> 会签)全部的内容,包括:Activiti6.0 动态改变流程节点类型(普通-> 会签)、activiti笔记、activiti6.0流程引擎部署方式之BpmnModel以及使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)