|
本帖最后由 yonyouhmm 于 2024-3-4 14:04 编辑
一、案例说明
如何在最后一级审批人审批或驳回后做扩展?
如何在中间环节审批人审批或驳回后做扩展?
如何使用流程中的脚本活动?
PC和移动端的监听事件?
二、最后一级审批人审批或驳回后做扩展
如果项目中只需要最后一级审批人审批或驳回后做扩展,那么就扩展audit和unaudit动作,虽然工作流设计器中的脚本也能使用,但是流程中的脚本执行是异步的,不作为最佳选择。使用此方式扩展在消息中心不打开单据审批,也会触发。下面以扩展audit动作演示,unaudit动作的扩展操作相同。
1、创建一个单实体,构建单卡页面,并创建一个工作流
大家实践的时候在实体中增加一个大文本字段
页面:页面编码要和业务对象编码一致
工作流:两级审批,都是发起人审批
2、扩展audit动作
位置
添加自定义规则
新建函数
编辑函数
3、新增数据提交测试
最后一级审批人同意时,执行了我们的脚本
三、中间环节审批人审批或驳回后做扩展
如果项目中需要监听中间环节的审批人的操作,那么目前只能使用工作流中的“脚本”功能,活动节点开启“是否使用函数”,脚本里代码执行是异步的,我们不能以throw new Error()的形式查看,我这里将脚本中接受到的参数更新到一个字段中来查看。
1、工作流设计器中的脚本
2、编写脚本,把方法接受到的参数更新到单据的大文本字段中
3、活动节点开启“是否使用函数”
4、审批同意走的环节结束的方法
重要参数:
processEnd:流程是否结束
businessKey:分割下划线,下划线后面就是单据的id
- 环节结束: {
- "processEnd": false,
- "userPhone": "xxx",
- "language": "zh_CN",
- "tenantCode": "developplatform_a2dvwyc8",
- "userName": "xxx",
- "userId": "xxxxxxx",
- "processDefinitionKey": "processcenter_06c8464b",
- "activityId": "approveUserTask_10f39346a3b04fda8df7e438bec4a38d",
- "mainTenantId": "a2dvwyc8",
- "businessKey": "flowBranch_1884269421585760258",
- "userMail": "hu@yonyou.com",
- "tenantId": "a2dvwyc8_developplatform",
- "processInstId": "71f592dc-9a7e-11ee-8281-6295f09f4149",
- "yht_access_token": "bttMGZBTUQwaHh0Vsss02526089183TGTGdccore3iuap-apcom-workbench1e6defefYT",
- "category": "developplatform.flowBranch",
- "appSource": "developplatform"
- }
复制代码 5、审批人退回走流程完成的方法
重要参数:
processEnd:流程是否结束
businessKey:分割下划线,下划线后面就是单据的id
- 流程完成: {
- "processActionType": "suspension",
- "bpmCallbackRequestId": "20231214719c096548cf478d8c5020411f92e1af",
- "processEnd": false,
- "userPhone": "xxx",
- "canBeArchived": false,
- "language": "zh_CN",
- "source": "developplatform",
- "tenantCode": "developplatform_a2dvwyc8",
- "uuid": "xxx",
- "userCode": "YHT-568838-xxx",
- "processDefinitionKey": "processcenter_06c8464b",
- "msgComment": "不同意",
- "bpmCallbackRequestTs": 1702558166266,
- "userName": "xxxx",
- "userId": "7f8d88ab-1bfxx28abbf803c0f",
- "deleteReason": "REJECTTOSTART",
- "mainTenantId": "a2dvwyc8_developplatform",
- "businessKey": "flowBranch_1884269421585760258",
- "userMail": "hu@yonyou.com",
- "tenantId": "a2dvwyc8_developplatform",
- "processInstId": "3166ab2f-9a7f-11ee-aca9-4a3d4ba2e418",
- "yht_access_token": "bttMGZBTUQwaHh0Vk5HZjx2526089183TGTGdccore3iuap-apcom-workbench1e6defefYT",
- "appSource": "developplatform",
- "category": "developplatform.flowBranch",
- "ts": 1702558166266
- }
复制代码
四、工作流中的脚本活动
工作流中的脚本活动的作用,主要是为了满足使用脚本动态设置审批人的场景。
1、创建流程变量
我这里创建两个一个是单值一个是数组
2、添加脚本活动
以数组为例,变量绑定新增的后端函数
3、编辑脚本
这是数组类型的脚本,注意return。如果是单值,就return {userId:"xxxx"},其实对象的key随意
- let AbstractTrigger = require('AbstractTrigger');
- class MyTrigger extends AbstractTrigger {
- execute(context, param) {
- const userIdArr = [];
- userIdArr.push("7f8d88ab-1bfa-4183-be47-28abbf803c0f");
- return {userId:userIdArr};
- }
- }
- exports({ entryPoint: MyTrigger });
复制代码 4、活动节点设置流程变量
到这里,就可以正常去审批了!
一个流程脚本实例:迭代查询所有上级部门是否有负责人
let AbstractTrigger = require('AbstractTrigger');
function getDeptPrincipal(deptId) {
let sql = "select principal,principal.name as name,parent,orgtype from bd.adminOrg.AdminOrgVO where id='" + deptId + "'";
var res = ObjectStore.queryByYonQL(sql, 'ucf-org-center');
if (res[0].orgtype != 2) {
return '1';
}
if (res[0].principal) {
return '0';
}
if (res[0].parent) {
return getDeptPrincipal(res[0].parent);
}
}
class MyTrigger extends AbstractTrigger {
execute(context, param) {
let deptId = param.variablesMap.initiatorDept;
let flag = getDeptPrincipal(deptId);
return {flag:flag};
}
}
exports({ entryPoint: MyTrigger });
五、PC和移动端的监听事件
1、pc端
//打开审批组件前
- viewModel.on('beforeWorkflow', ({ params, data }) => {
- // 可以在这里修改传给审批组件的值 data.bussinessKey等
- data.rejectToActivity = true
- })
复制代码 //关闭审批组件
- viewModel.on('workFlowClose', (callbackData) => {
- debugger;
- })
复制代码 //审批组件中点击确定按钮
- viewModel.on('afterWorkflowBeforeQueryAsync', (data) => { // 处理逻辑 })
复制代码 //点击确定按钮前
- viewModel.on('beforeWorkflowAction', ({ data, resolve }) => {
- // data: 审批流传入的数据
- // resolve: 自己的异步逻辑执行完成之后成功调用 resolve(true) 失败调用 resolve(false)
- if ('成功') {
- resolve(true)
- } else {
- resolve(false)
- }
- return false; // 这个也必须这么写
- });
复制代码
2、移动端
//审批加载实例前事件
- viewModel.on('beforeWorkflowShow', function(params) {
- // 可以在这里修改审批流传人参数,比如businessKey等
- })
复制代码 //审批面板关闭前
- viewModel.on('beforeWorkflowClose', function(params) {
- if (params.processStatus) {
- // 点了确定按钮
- } else {
- // 单纯的关闭审批面板
- }
- })
复制代码 //点确定按钮前事件
- viewModel.on('beforeWorkflowAction', ({ data, resolve }) => {
- // data: 审批流传入的数据
- // resolve: 自己的异步逻辑执行完成之后成功调用 resolve(true) 失败调用 resolve(false)
- if ('成功') {
- resolve(true)
- } else {
- resolve(false)
- }
- return false; // 这个也必须这么写
- });
复制代码
|
本帖子中包含更多资源,您需要 登录 才可以下载或查看,没有帐号?立即注册
X
|