低价商品,欢迎微信扫码选购
1:Activiti使用流程
1:绘制流程图。
1:Eclipse安装Activiti插件(Eclipse有些版本装不了,需要注意)。
2:安装完插件之后,在项目文件夹下创建Activiti Diagram(和创建Java类类似)
3:Eclipse右侧会有一些Activiti图标,每个图标代表的含义可以参阅Activiti文档(共享盘有)
4:Window->Showview->Package Explorer打开包试图,右键刚才创建Activiti流程图的项目,点击Create deployement artifacts。会根据流程图生成相应的*.bpmn20.xml文件
注:Window->Preferences->Activiti->Save,勾选右侧的Create process definition image…,在保存流程图时,自动生成流程图
2:流程部署(参阅文档第6章)
1:直接部署生成的*.bpmn20.xml文件,Activiti自动生成流程图。如果流程图中包含汉字,生成的流程图会乱码。
2:将生成的*.bpmn20.xml和*.png流程图通过Ant打包,然后部署压缩文件
3:同时部署*.bpmn20.xml 和生成的流程图,项目中就是采用该方法。
3:启动流程(表单提交)
通过RuntimeService方法提交,Activiti提供了2种提交表单的方式
1:startProcessInstanceById:每次流程部署时,都会根据流程key,version生成一个流程ID,通过流程ID查找特定的流程,来提交表单。
2:startProcessInstanceByKey:通过key来提交表单,每次提交单据时,都会使用最新部署的流程。
3:第1个参数,是对应的流程id或流程key,也可以在提交表单时,传递一些参数,供Activiti使用。Eg:表单提交后,根据部门不同,指定不同人审核,可以在启动流程时,就通过Map传递参数。
4:单据审批
单据审批时,实际是处理的审批任务(Task),需要先拿到任务的ID(Task_id),通过TaskService.complete来完成任务。在执行complete时,也可以传递一些参数。Eg:员工在审批时,可能选择通过(C),不通过(D),对应流程图中通过${status==’C’},${status==’D’}走不同的流程,可以通过Map来传递status的值。
2:通过简单DEMO详细讲解Activiti使用
通过截图及部分代码,详细讲解1中的每一步操作
1:绘制流程图
1:Eclipse安装Activiti插件。Activiti插件地址:http://activiti.org/designer/update/
不清楚插件安装方式的,可以直接google搜索。注:某些Eclipse版本安装不了,需注意。
2:右键项目文件夹,创建Activiti Diagram文件。
3:创建一个简单的流程图。
a:右键创建一个简单的空白的Activiti Diagram文件,假设文件名叫SimpleDemo。
b:Window->Show View调出Properties视图。点击SimpleDemo文件空白处,
在Properties视图中,设置流程图的Id(对应提交表单时的Key)。
注:不要和项目中存在的流程重名
c:通过Palette试图中的组件,画出如下的流程图(用到的组件,右侧已标注)
d:用户任务讲解。选中用户任务,Properties视图中设置参数。
Main config选项:
Assignee:可以直接在Assignee中指定员工或通过Spring指定Bean的方法进行人员查找。无论通过哪种方式,都只能指定一个人。
Candidateusers:可以设定为“123,456”,将员工123或456设定为候选人,由其中的一个员工进行审批(审批前需要taskService.claim进行任务认领)
Form选项:
如果使用Activiti内置表单,才会用到Form。内置表单可以参考Activiti文档,
上面有详细讲解,由于项目中使用的是自定义表单,所以不讲解Form。
Listeners选项:
通过指定一个实现TaskListener接口的类,来指定将该用户任务分配给某个员工。
如果不需要向SimpleUserTask传递参数,也可以不添加nodeId属性。
TaskListener接口,在org.activiti.engine.delegate包下,不要继承错误。
Multi instance选项:
下面截图是出差审批流程中的部分截图
Sequential:比如一共创建了3个用户任务,他们是并行执行还是串行执行。
Loopcardinality:从单词意识上也可以看出来,一共循环几次,即:创建几个用户任务。
Collection:是一个集合,里面存放了需要通过多实例创建用户任务的员工ID。
Elementvariable:循环Collection集合时,集合中元素对应的变量名。
Completioncondition:定义多实例结束条件。如果该多实例创建了3个用户任务,在3个员工全部审批完,或有一个员工审批不通过时,跳出该节点继续向后执行。
e:条件顺序流
General:Name属性也可以不写或使用默认的,为了流程图容易理解,我们将其改为“同意”。
Mainconfig:将Condition设置为${status=='C'},在审批时,传递一个status参数。
同理设置不同意的Name和Condition。
注:Activiti审批流必须从startEvent开始,最终走向endEvent结束,如果传递的status既不是C也不是D,则会报no outgoing的错误
f:Java服务任务
Java服务任务会由Activiti自动执行,不像用户任务会阻塞,等待人为的处理。
可以在通过或不通过的回调中,执行不同申请的逻辑处理。
4:Window-Show View切换到Package Explorer。
右键项目,点击Create deployment artifacts,
将生成的bpmn20.xml文件以及保存时自动生成的png流程图文件上传到服务器,然后部署。
2:流程部署(参阅文档第6章)
流程部署只讲项目中使用的方法
3:启动流程(表单提交)
也可以通过startProcessInstanceById提交单据。通过ByKey提交时,每次部署新的流程,
都会自动使用最新部署的流程;但是使用ById提交单据时,即便流程图重新部署,也只会使用
提交时指定的流程图。
4:单据审批
通过taskService.complete(task, map);进行审批。
task:任务ID
map:包括status,opinion等。
说明:
1:在startProcessInstanceByKey启动流程时通过Map传递的参数可以再流程图(eg:${param==’xxx’),用户任务接口(DelegateTask.getVariable),Java服务任务(DelegateExecution. getVariable)中使用。
2:在用户任务(TaskListener接口实现类),Java服务任务(JavaDelegate)以及
审批时(taskService.complete)同样可以向Activiti传递参数。