工作流组件
工作流组件是界面层中流程的核心组件,它是流程的界面层与企业工作流应用的桥梁。
工作流组件是一个非可视组件,以下列出组件的属性、方法和事件。
组件属性
- 数据集:工作流组件关联的业务数据组件
- 自动关闭页面:执行完流程相关操作(流转,回退,转发,中止,暂停,终止)后,是否自动关闭当前页面。
- 自动启动流程:是否自动启动流程,启动流程时,默认 sData1 的值是数据集的当前行的主键。
- 自动保存数据:执行流程相关操作(流转查询,回退查询,转发查询,中止查询,暂停查询,终止查询)之前,是否自动保存业务数据。
- 自动过滤数据:是否自动为数据集添加相关的过虑条件(数据集的主键等于 sData1)。
- 启动时机:保存:表示新增时保存启动流程;流转:表示第一次流转时先启动流程,再流转,适用于需要保存草稿的场景
- 审批意见:将页面数据组件中的数据作为审批意见
- 组织对话框标题:定义流转对话框中弹出的组织对话框的标题
- 自动显示流程设置:显示“流程设置”用于设置后续环节的执行者
- 流程设置中执行人允许为空:不允许为空时,“流程设置”中后续环节,每个环节的执行人都必填
组件方法
组件提供方法:启动流程、流转查询、流转、回退查询、回退、终止查询、终止、暂停查询、暂停、转发查询、转发、批量流转和回收任务等
调用流转查询,示例如下
let p = this.comp("process1"); //process1 是工作流组件的 id
p.advanceQuery(); //流转查询
获取任务
获取当前任务 ID
方法:
getTask()
返回:
String
启动、流转
启动流程
方法:
start(process,name,data,formUrl,options)
参数:
process 流程编码,可通过代码实现一个页面对应多个流程
name 流程实例名称
data 流程关联的业务数据
formUrl 表单地址
options 可选参数,JSON 格式, 有以下两个参数
firstActivityExecutor: 表示首环节的执行者,可以不指定, 这时默认就是当前人员成员;
vars: 变量
格式如下:
{
"firstActivityExecutor": {String},
"vars": {var1: ""}
}
返回
Promise
流转查询
方法:
advanceQuery(task,vars)
参数:
task 任务标识, 为空时使用默认任务
vars 变量
返回
Promise
流转
方法:
advance(task, processControl, vars)
参数:
task 任务标识, 为空时使用默认任务
processControl 流程信息,json 格式的数据
vars 变量
返回
Promise
批量流转
方法:
batchAdvanceQuery(task,vars)
参数:
task 任务标识, 为空时使用默认任务
vars 变量
返回
Promise
启动并流转查询
方法:
startAdvanceQuery(process,name,data,formUrl,options)
参数:
process 流程编码
name 流程实例名称
data 流程关联的业务数据
formUrl 表单地址
options 可选参数,JSON 格式, 有以下两个参数
firstActivityExecutor: 表示首环节的执行者,可以不指定, 这时默认就是当前人员成员;
vars: 变量
格式如下:
{
"firstActivityExecutor": {String},
"vars": {var1: ""}
}
返回
Promise
显示流程图、流程记录
显示流程图
方法:
showChart(task, process, data)
参数:
task 任务标识(可选参数)
process 业务流程编码(可选参数)
data 业务数据标识(可选参数)
允许下面3种情况
process, data, task 都没有指定, 默认使用当前上下文中的 task 和 process
只指定 process, data
只指定 task
返回
void
显示流程记录对话框
方法:
showRecord(task, process, data)
参数:
task 任务标识(可选参数)
process 业务流程编码(可选参数)
data 业务数据标识(可选参数)
允许下面3种情况
process, data, task 都没有指定, 默认使用当前上下文中的 task 和 process
只指定 process, data
只指定 task
返回
void
批量流转
工作流组件提供批量流转操作
用平台提供的流程页面模版生成的流程表单页面,在更多中默认就有批量流转。不是通过流程页面模版创建的页面,可以自行添加批流转按钮,选择流程组件提供的“批量流转”操作
当以有多个相同任务处理人员身份登录系统,
在待办任务中打开需要处理的流程表单
在设置了批量处理表单回写的字段中填入值,
表单填写后,点击批量流转按钮,即可打开批量处理任务页面,在此页面中将显示同一属性的审批单,勾选审批单,点击确认流转后,即可实现批量任务处理及业务数据回写操作。
在已办任务中,打开可查看批量勾选处理的审批单及数据回写内容
其它流程动作方法
回退查询
方法:
backQuery(task,vars)
参数:
task 任务标识, 为空时使用默认任务
vars 变量
返回
Promise
回退
方法:
back(task, processControl, vars)
参数:
task 任务标识, 为空时使用默认任务
processControl 回退信息,json格式的数据
vars 变量
返回
Promise
暂停查询
方法:
suspendQuery(task, vars)
参数:
task 任务标识, 为空时使用默认任务
vars 变量
返回
Promise
暂停
方法:
suspend(task, processControl, vars)
参考:
task 任务标识, 为空时使用默认任务
processControl 暂停信息,json格式的数据
vars 变量
返回
Promise
唤醒流程
方法:
resume(task, vars)
参数:
task 任务标识, 为空时使用默认任务
vars 变量
返回
Promise
终止查询
方法:
abortQuery(task, vars)
参数:
task 任务标识, 为空时使用默认任务
vars 变量
返回
Promise
终止
方法:
abort(task, processControl, vars)
参数:
task 任务标识, 为空时使用默认任务
processControl 终止信息,json格式的数据
vars 变量
返回
Promise
特送查询
方法:
specialQuery(task, vars)
参数:
task 任务标识, 为空时使用默认任务
vars 变量
返回
Promise
特送
方法:
special(task, processControl, vars)
参数:
task 任务标识, 为空时使用默认任务
processControl 特送信息,json格式的数据
vars 变量
返回
Promise
转发查询
方法:
transferQuery(task, vars)
转发查询
参数:
task 任务标识, 为空时使用默认任务
vars 变量
返回
Promise
转发
方法:
transfer(task, processControl, vars)
参数:
task 任务标识, 为空时使用默认任务
processControl 转发信息,json格式的数据
vars 变量
返回
Promise
重启查询
方法:
restartQuery(task, restartMode)
参数:
task 任务标识
restartMode: start 表示流程发起人可以重启流程, lastActivityExecutor 表示流程最后一个环节的执行者可以重启流程
返回
Promise
示例
import taskUtil from "$UI/comp/wfmui/components/wfmui/js/taskUtil";
taskUtil.queryFinishPIByData(id).then((result)=>{
if (result.length > 0){
wfmui.restartQuery(result[0].SA_Task);
}else{
alert("没有找到结束的流程实例");
}
});
重启
方法:
restart(task, processControl, vars)
参数:
task 任务标识, 为空时使用默认任务
processControl 转发信息,json 格式的数据
vars 变量
返回
Promise
回收任务
方法:
withdrawTask(task, vars)
参数:
task 任务标识, 为空时使用默认任务
vars 变量
返回
Promise
催办任务
方法:
remindTask(task)
参数:
task: 任务标识
返回
Promise
流程变量
获取流程变量
方法:
queryFlowVars(task)
参数:
task: 任务标识
返回
Promise,执行后返回 JSON 格式,key 是变量名,value 是变量值
获取任务变量
方法:
queryTaskVars(task)
参数:
task: 任务标识
返回
Promise 执行后返回JSON 格式,key 是变量名,value 是变量值
更新流程变量
方法:
updateFlowVars(task, vars)
参数:
task:任务标识
vars:JSON 格式,key 是变量名,value 是变量值
返回
Promise
更新任务变量
方法:
updateTaskVars(task, vars)
参数:
task:任务标识
vars:JSON 格式,key 是变量名,value 是变量值
返回
Promise
业务主键
获取流程上下文中的业务主键
方法:
getBusinessKey()
返回:
String
获取流程上下文中的业务主键名称
方法:
getBusinessLabel()
返回
String
流程设置
显示流程设置对话框
方法:
updateProcessSetting(config)
参数:
config:JSON 格式如下
{
task: 任务标识
}
返回
Promise
根据流程设置启动流程
方法:
startBySetting(config)
参数:
config:JSON 格式如下
{
process:流程标识,
name:流程实例名称,
data:业务数据主键,
formUrl:表单地址,
options:可选参数,JSON 格式, 有以下两个参数
firstActivityExecutor: 表示首环节的执行者,可以不指定, 这时默认就是当前人员成员;
vars: 变量
格式如下:
{
"firstActivityExecutor": {String},
"vars": {var1: ""}
},
force:是否允许流程重复启动
}
返回
Promise
组件事件
工作流组件的每一个动作(包括:启动、流转查询、流转、启动流转查询、回退查询、回退、加签查询、加签、转发查询、转发、特送查询、特送、终止查询、终止、重启查询、重启、更新流程配置),提供相应的三个事件:执行前事件、执行成功事件和执行失败事件
- 查询类的流程动作不启动事务;
- 执行类的流程动作启动事务,其中,执行前事件与流程动作处于同一个事务中,执行成功事件和执行失败事件在事务之后。
另外还提供两个关于流程确认框的事件:打开对话框前、对话框关闭
特别说明
- 启动时机设置为“流转时”,第一次流转后不触发流转成功事件,触发启动成功事件
- 在流程启动前事件中,设置页面参数 this.parmas.process,就会启动这个流程
- 流转查询前、流转查询成功、流转前、流转成功等事件支持调用异步请求
启动流程事件
启动流程之前
event结构:
{
"source":组件的js对象,
"process":流程标识,
"relations":任务信息,json格式:
{
"列名":"值"
}
"vars": 变量,
"executor":首环节的执行者,
"cancel":是否取消后续操作,默认值为false
}
启动流程成功
event结构:
{
"source":组件的js对象,
"process":流程标识,
"relations":任务信息,json格式:
{
"列名":"值"
}
"executor":首环节的执行者,
"vars": 变量,
"cancel":是否取消后续操作,默认值为false,
"pi":流程实例标识,
"task":活动环节对应的任务标识
}
启动流程失败
event结构:
{
"source":组件的js对象,
"process":流程标识,
"relations":任务信息,json格式:
{
"列名":"值"
}
"executor":首环节的执行者,
"vars": 变量,
"cancel":是否取消后续操作,默认值为false,
"msg": 错误消息,
"error": 异常对象
}
在事件中,使用控制台输出 event 参数,如下图所示
流转查询事件
查询前事件
event结构:
{
"source":组件的js对象,
"task":任务标识,
"vars": 变量,
"promises": 同时执行的异步请求
"cancel":是否取消后续操作,默认值为false
}
查询成功事件
event结构:
{
"source":组件的js对象,
"task":任务标识,
"processControl":流程信息,
"vars": 变量,
"promises": 同时执行的异步请求
"cancel":是否取消后续操作,默认值为false
}
查询失败
event结构:
{
"source":组件的js对象,
"task":任务标识,
"vars": 变量,
"msg": 错误消息,
"error": 异常对象
}
在事件中,使用控制台输出 event 参数,如下图所示
案例:在界面中,流转之前检查业务数据是否符合业务要求(比如金额必须大于100),否则弹出提示
onWfmui1AdvanceQueryBefore(event){
let data = this.comp("mainData"); //mainData是业务数据关联的bizData的id
let fAmount = data.getValue("fAmount"); //fAmount是金额字段
if (fAmout < 100){
event.cancel = true; //取消后续的流程动作
alert("订单的金额必须大小100");
}
}
流转事件
执行前事件
event结构:
{
"source":组件的js对象,
"task":任务标识,
"processControl":流程信息,
"vars": 变量,
"promises": 同时执行的异步请求
"cancel":是否取消后续操作,默认值为false
}
执行成功事件
event结构:
{
"source":组件的js对象,
"task":任务标识,
"processControl":流程信息,
"vars": 变量,
"promises": 同时执行的异步请求
}
执行失败事件
event结构:
{
"source":组件的js对象,
"task":任务标识,
"processControl":流程信息,
"vars": 变量,
"msg": 错误消息,
"error": 异常对象
}
在事件中,使用控制台输出 event 参数,如下图所示
案例:在流转成功事件中获取流程是否结束,代码如下
event.processControl.toItems[0].data['@is-end']==="true"
对话框事件
在查询类动作成功后,在显示流程确认框之前,触发“打开对话框前”事件,通常用于修改 ProcessControl,以达到改变流程确认框内容的目的。具体案例参考《流程常用开发技巧》中的“修改或签默认选中的环节”和“修改会签显示的环节顺序”
在事件中,使用控制台输出 event 参数,如下图所示
在流程确认框关闭之后,在执行类动作执行之前,触发“对话框关闭”事件,通常用于修改 ProcessControl,在执行类动作执行时使用
在事件中,使用控制台输出 event 参数,如下图所示
更新流程设置事件
调用流程设置方法后,弹出流程设置对话框,关闭流程设置对话框后,触发更新流程设置事件
在事件中,使用控制台输出 event 参数,如下图所示
支持调用异步请求
流程组件的相关事件支持异步调用,即可以在执行数据集保存、服务请求等异步请求后,再执行流程相关的操作(例如关闭页面)
支持的事件有流转查询前、流转查询成功、流转前、流转成功等事件,在事件中件支持了 event.promises,把需要异步执行返回的 promise 放到 event.promises 中,就可以控制异步请求完成后,再执行流程相关的操作。
具体可以参考如下,在流转成功事件中同时调用数据集的保存和服务请求,都执行后再执行默认的流转成功后关闭页面的操作,如果执行的时间较长可以自行添加遮罩层等。
onWfmuiAdvanceSuccess = async (event) => {
let restData0 = this.comp("restData0");
let mainData = this.comp("mainData");
let serviceRequest0 = this.comp("serviceRequest0");
await restData0.newData({defaultValues : [{
name : mainData.getValue("name")+"流程成功",
frq : wx.Date.toString(new Date(), wx.Date.STANDART_FORMAT_SHOT),
frqsj : wx.Date.toString(new Date(), wx.Date.STANDART_FORMAT)
}]});
let dataSave = new Promise((resolve,reject) =>{
restData0.saveData({"onSuccess":function(){
resolve();
},"onError":function(){
reject();
}});
})
let serviceSend = new Promise((resolve,reject) =>{
serviceRequest0.send().then(function(){
resolve();
},function(){
reject();
});
})
event.promises.push(dataSave);
event.promises.push(serviceSend);
}
在流转查询前、流转前等相关事件中,调用异步请求时,在成功或者失败中要中止流程默认的操作,可以在 resolve(); 或者 reject(); 前调用 event.cancel = true;