在上一篇中给大家介绍了小白(我)在项目中如何选择签核表单的生成方式,那么接下来小白想和大家聊聊在项目中是如何设计与部署流程的,这里先说明一下由于环境因素不同,过程略有差异,小白与用户之间的流程商谈环节较为简单,直接由用户通过PTT的形式将用户设计好的流程传达给小白(没有要求用户使用在线的activiti-moduler设计),然后小白就开始在activti-designer模型设计器中有模有样地设计出与ppt大致类似的流程图,当然PPT上有些不明白的地方也会找用户重新洽谈,直到流程设计满意为止,最后再将模型部署到项目服务器中;
流程模型设计
具体的模型设计环节就不多说咯,都是基于在eclipse中嵌入的插件activiti-designer UI界面拖曳操作,只是有些细节性的东西需要注意,总结了以下几点:
- 流程的ID属性会用来与配置表中的某行对应,需要注意一一对应,在更新业务篇幅中有说明这样操作的目的;
2. 需要给用户任务节点绑定外置表单名称;
3. 用户表单的办理人、候选人、候选组可以采用UEL表达式,由流程变量来控制,或者采用任务监听器TaskListener或事件监听器ActivitiEventListener的实现类来动态设定;
4. 通过设置开始节点的Initiator属性可以将流程的发起人赋值给applyUserId变量,注意代码中需要设置identityService.setAuthenticatedUserId(applyUserId)才能实现绑定;
identityService.setAuthenticatedUserId(applyUserId);
- 由于我在项目中采用sequenceflow连线上的名称作为视图渲染的提交按钮名称,所以需要注意有分支连线地方要注明连线名称,且其名称值就等于该分支的满足条件;
流程部署
流程的部署方式多种多样,但是由于我们采用的是外置表单的形式设计模型,所有在部署时需要同时上传好几个文件,包括xxx.bpmn,xxx.png,xxx.form等,所以使用压缩方式部署更加适合;
public void deploy(MultipartFile flowFile) throws Exception {
// TODO Auto-generated method stub
//获取文件名
String fileName=flowFile.getOriginalFilename();
//得到输入流
InputStream fileInputStream=flowFile.getInputStream();
//文件的扩展名
String extension=FolderUtils.getExtension(fileName);
DeploymentBuilder deployment=repositoryService.createDeployment();
if(extension.equals("zip")||extension.equals("bar")||extension.equals("rar")) {
ZipInputStream zip=new ZipInputStream(fileInputStream);
//压缩方式部署
deployment.addZipInputStream(zip);
}else {
//bpmn文件部署
deployment.addInputStream(fileName, fileInputStream);
}
deployment.deploy();
}
部署好后,查看流程数据库表bact_ge_bytearray和act_re_procdef就会多出几行数据,这说明部署成功啦;
总结
- 小白的流程设计中有6大细节需要注意;
- 流程部署采用压缩方式比较适宜;
(更多有关activiti的项目开发内容请等下次更新,欢迎点评,共同进步哦!)