工作流程介绍
流程设计
菜单:
系统管理-->工作流管理-->流程设计
可对流程模型进行导出、发布、编辑、删除等操作;
- 导出
选择导出操作,可导出流程模型为压缩包。该压缩包可通过流程部署直接部署到系统(不同环境)上去;
- 发布
选择发布操作,可将设计好的流程模型直接发布到系统中,对应的业务可以直接使用;
- 删除
选择删除操作,可删除对应的流程模型;
-
创建、编辑
-
更多-->创建模型
[图片上传失败...(image-d12d87-1535508340880)]
[图片上传失败...(image-2ba084-1535508340880)]
[图片上传失败...(image-c9bde0-1535508340880)]
4.2. 属性配置
4.2.1 流程标识 相当于流程的KEY,使用流程是需要用到,一般创建流程时确定,不做修改;
4.2.2 流程名称 随意配置
[图片上传失败...(image-bf6b7e-1535508340880)]
4.2.3 监听器 配置对应的Listener地址
[图片上传失败...(image-993d8-1535508340880)]
编辑操作,可对已经创建好的模型进行修改
[图片上传失败...(image-aa499f-1535508340880)]
开始节点
-
创建一个开始节点,从左边操作栏拖到右边即可
[图片上传失败...(image-d80c4a-1535508340880)] -
配置开始节点属性
2.1 流程启动人,固定配置为"applyUser"
[图片上传失败...(image-c8c1fb-1535508340880)]
2.2 表单属性,整个流程需要用到的属性都必须在这里配置;所有配置再这里的属性必须确保发起流程时有传入对应的值,否则流程无法启动;
[图片上传失败...(image-621e8b-1535508340880)]
流程发起节点
-
第一个节点为任务发起节点,需要配置的内容基本是固定的
[图片上传失败...(image-3b7b79-1535508340880)] -
配置节点属性
2.1 名称:可随意配置,一般根据业务配置
2.2 页面地址 :发起流程的页面地址(app.avtivity.testReq)
2.3 分配用户 :固定配置为${applyUser}
[图片上传失败...(image-1b9d26-1535508340880)]
流程审批节点
- 一个普通的流程审批节点与发起节点的配置基本类似,也是只需配置“名称”,页面地址,“分配用户”即可;
- 配置节点属性:
2.0 ID: 建议根据业务配置,也可不配置(发布时会自动生成一个唯一的序列;
2.1 名称:可随意配置,一般根据业务配置;
2.2 页面地址 :必选属性; 审批页面地址【app.avtivity.testReq({ID:'#businessKey#'})】;
2.3 分配用户 :必选属性; 指定人员${approveUser} 指定角色(角色配置参考下文“流程角色管理”);
2.4 监听器其配置 : 配置一个监听器,流程流转到对应的节点是执行对应的代码; - 其他特殊属性看本文“任务节点属性详细说明”部分
[图片上传失败...(image-62d156-1535508340880)]
流程分支
-
顾名思义,流程分支用于实现流程的多样审批;
分支时需要用到“开始节点”配置的流程属性,通过判断不同的输入值,使流程走向不同的方向。如下图配置,当类型为A时,流程直接结束,否则需要进行第二次审批; -
属性配置。
2.1 需要对分支与目标节点间的连线进行配置;
2.2 配置的格式如下
必须在${}内;
所有的分支条件的并集必须包含涉及参数的所有情况,否则某些情况下流程走不去;
可使用基本的逻辑判断;
可多可条件组合判断;
例:{TYPE!='A'}
[图片上传失败...(image-1eb695-1535508340880)]
[图片上传失败...(image-2ea6d-1535508340880)]
流程结束节点
不需要做任何配置,拖出一个结束节点即可;所有的流程节点最终必须指向结束节点;
[图片上传失败...(image-a9eb78-1535508340880)]
任务节点常用属性详细说明
多条属性可同时配置; 例如转批和加签可同时设置;
[图片上传失败...(image-4b5505-1535508340880)]
消息节点
配置为消息节点,则该节点不需要审批,流转到该节点后,所有审批人员都会收到一条消息;
需要配置消息内容和消息详情页面地址,格式如下:
消息内容 “#PRJ_NAME#”中的PRJ_NAME为流程内参数,发起流程的时候传值,参数可以多个;其他为描述内容;
您负责的#PRJ_NAME#项目已审批通过,请查看详情。
消息地址 参数“#ID#”中的ID为流程内参数,发起流程的时候传值,参数可以多个;
app.pmo.prjAppply.prjBoard({ID:'#ID#'})
[图片上传失败...(image-620443-1535508340880)]
选人节点
配置为选人节点,当流程流转到对应节点的上一个节点时,该节点审批人需要从流程审批人中选择出部分人员作为选择人节点的审批人;
申请人选人节点
配置为申请人选人节点,功能和“选人节点”相同,只是选人的时机不同,该配置下,申请人提交时就必须选人;为了避免该节点在分支上,选完人后不一定能流转到问题,可为该节点再配置一个选人条件,只有在满足了配置的条件时,才会选人;
会签节点
当同一个节点需要多人审批时,可配置为该属性;配置的同时需要指定通过率;
节点类型:配置为 Parallel(并行) 或 Sequential(串行);
会签人员设置 自定义集合(需配置“会签人员集合设置”),选择审批角色(选择设置好的角色);
会签人员集合设置 固定格式:${appproveList};
会签通过率(0-1) ;
[图片上传失败...(image-eb2227-1535508340880)]
批量操作
当节点配置为该属性时。审批人做审批操作时,可批量进行。
自动同意
配置为自动同意, 当审批人是申请人时,不需要额外审批,自动默认通过
申请人不能审批
顾名思义;
转批
配置为转批;审批人可将改流程只定给另一个人批阅;
加签
配置为加签;审批人可指定另一人审批并给出意见,在根据结果审核一次;
退回指定审批
顾名思义;
退回申请人(重新提交后直接跳转当前节点审批)
顾名思义;
自定义按钮
审批页面会多一个操作按钮,点击后可为配置的参数赋值,用于分支判断;
[图片上传失败...(image-cab74e-1535508340880)]
[图片上传失败...(image-ead69c-1535508340880)]
流程部署
如果有流程导出的压缩包,可以直接通过流程部署使用,不用额外新建、发布;
操作流程如下:
工作流管理-->流程部署-->选择文件-->上传
[图片上传失败...(image-944275-1535508340880)]
流程管理
流程管理页面是对所有已经发布的流程进行管理。包括查看、删除、导出、转化为可编辑模型、切换历史版本等操作
工作流管理-->流程管理
[图片上传失败...(image-46b56a-1535508340880)]
查看
[图片上传失败...(image-b89f3e-1535508340880)]
模型转化
[图片上传失败...(image-316cf3-1535508340880)]
版本切换
[图片上传失败...(image-bf00dc-1535508340880)]
流程角色管理
介绍
系统管理--> 工作流管理-->流程角色管理
流程角色在配置流程时需要用到。配置某个节点的“分配用户”为指定角色后,当流程流转到对应节点时,流程的审批人即为对应角色的人员;
[图片上传失败...(image-5c37f9-1535508340880)]
配置
- 流程角色编码 角色唯一标识,创建时确定,不可修改;
- 流程角色名称 随意填写,一般以具体业务为准;
- 所属法人组织 视情况而定;
- 流程角色状态 两个状态,“有效”表示该角色可以被使用,“无效”表示可不被使用;
- 流程角色规则 有如下三个具体的可选值:
5.1. 关联人员 为该角色直接指定人员;
5.2. 关联业务角色 关联其他系统角色的人员为本角色人员;
5.3. 关联业务规则 通过该规则返回对应的人员,作为该角色人员;选择此项,需要配置对应的规则类型和参数,参数不必填,但是有自己对应的格式; - 业务规则类路径 对应的java类地址;
- 业务规则参数 对应的参数;格式:[{"TYPE":"A"}];
- 规则过滤 是否需要对角色人员进行过滤,“开启”表示需要过滤,反之亦然; 选择“是”需要配置对应的规则类和参数,规则同上;
- 流程角色描述 不必填;
例:
[图片上传失败...(image-16327b-1535508340880)]
[图片上传失败...(image-2e279b-1535508340880)]
[图片上传失败...(image-1510de-1535508340880)]
开发版本
流程的绘制
参照上文;
业务使用流程
前端配置
js注入:activitiService
编辑页面
- html使用流程记录。
- js调用activitiService.activitiSubmit();提交数据。
详情页面
- html使用流程记录。
审批页面
- html 使用流程记录。
- html 使用审批组件。
- js 配置特殊审批逻辑
后端配置
- 提交业务数据成功后,调用API启动工作流;
//参数
Map paramMap = new HashMap<>();
//翻译
commonService.transData(paramMap, "EXAMINE_TYPE:DICT:PROD_EXAMINE_TYPE");
paramMap.put("EXAMINE_TYPE", MapUtils.getString(paramMap, "EXAMINE_TYPE_PROD_EXAMINE_TYPE"));
paramMap.put(ActivitiVariable.SERCET_LEVEL, prodExamine.getSECRET_LEVEL());
String businessKey = prodExamine.getID();
//API
activitiService.startFlow(DICTPUB_CGS.CGS_WORKKEY_PROD_EXAMINE, businessKey, paramMap, false);
- 删除业务数据时,对有流程记录的数据进行“软删除————用状态标识数据不可用,对应的数据还存在数据库中”;
//获取申请单信息
ProdExamine ProdExamine = (ProdExamine) prodExamineDao.get(id);
String status = ProdExamine.getSTATUS();
//根据状态判断是否可以删除
if (!(DICTPUB_CGS.CGS_APPLY_STATUS_DRAFT.equals(status) || DICTPUB_CGS.CGS_APPLY_STATUS_BACK.equals(status))) {
throw new BaseRuningTimeException("cgs.prodExamine.canNotDelete");
}
// 判断是否直接删除
List list = activitiService.getComentList(DICTPUB_CGS.CGS_WORKKEY_PROD_EXAMINE, id);
if (null == list || list.size() == 0) {
//硬删
prodExamineDao.delete(id);
} else {
//软删
prodExamineDao.updateStatusByExamine(id, DICTPUB_CGS.CGS_APPLY_STATUS_CXL);
}
activitiService.deleteFlow(DICTPUB_CGS.CGS_WORKKEY_PROD_EXAMINE, id, null);
- 配置listener,用于监听流程审批情况。
cn.conow.ciomp.listener.ProdExamineEventListener
- 提供审批后对数据处理的接口给listener调用
@Override
public void refuseProdExamine(String businessKey) {
prodExamineDao.updateStatusByExamine(businessKey, DICTPUB_CGS.CGS_APPLY_STATUS_REJ);
}
@Override
public void lastApproveProdExamine(String businessKey) {
prodExamineDao.updateStatusByExamine(businessKey, DICTPUB_CGS.CGS_APPLY_STATUS_EXE);
}
''''
- XMl配置 审批的样式以及部分路由信息
dynaConfig/activitiQuickMenu/quickMenu-ciomp.xml
<task workKey="Prod_Examine" name="产品检验审批">
<apply name="产品检验退回">app.cgs.prodExamine.prodExamineList</apply>
<detail name="产品检验详情">app.cgs.prodExamine.prodExamineDetail({ID:'#businessKey#'})</detail>
<eventListener type="TASK_COMPLETED,PROCESS_COMPLETED">cn.conow.ciomp.listener.ProdExamineEventListener</eventListener>
<title>
<![CDATA[
<div class="fbox m-b-xs">
<div class="col text-ellipsis">
<span class="">单据编号</span>
<span class="text-primary-list">#EXAMINE_CODE#</span>
</div>
</div>
<div class="fbox">
<div class="col">
<span class="">检验类别</span>
<span class="text-muted">#EXAMINE_TYPE#</span>
</div>
</div>
<div class="fbox">
<div class="col">
<span class="">核算账号</span>
<span class="text-muted">#EXE_BUDGET_CODE#</span>
</div>
</div>
]]>
</title>
</task>
网友评论