JS SDK
工作流组件提供两个 JS 库,提供前端流程相关接口,ProcessUtil 调用了新版 API,TaskUtil 调用了旧版 API,两个库中的方法不完全相同
- ProcessUtil:/UI2/comp/wfmui/components/wfmui/js/processUtil.js,调用了新版 API
- TaskUtil:/UI2/comp/wfmui/components/wfmui/js/taskUtil.js,调用了旧版 API
调用时添加如下引用,然后通过 ProcessUtil 和 TaskUtil 调用
import ProcessUtil from "$UI/comp/wfmui/components/wfmui/js/processUtil"
import TaskUtil from "$UI/comp/wfmui/components/wfmui/js/taskUtil"
相关的SDK中status参数的说明可以参考任务 API中"相关API中任务状态参数值说明"
判断是否添加企业工作流应用
函数名: hasWF
参数
page {Page} 页面对象
返回
{Promise}
示例:
const hasWf = await ProcessUtil.hasWF(this);
从流程或任务返回数据中获取总数
函数名: getTotal
参数
res 流程或是任务返回数据,从返回数据中获取 content-range
示例:
onTaskDataCustomRefresh = async (event) => {
event.async = true;
event.promise = ProcessUtil.queryOwnerWaitTask(this, {}).then(async(res) => {
await this.loadToTaskData(res.data,event.options.append,"taskData");
event.source.setTotal(ProcessUtil.getTotal(res));
});
}
生成任务的表单地址
函数名 buildFormUrlByTask
参数
row {JSONObject} 任务数据, 必须有以下属性: id, sKindID, sStatusID, sEURL, sProcess, sActivity, sExecutorFID, sData1
isReadonly 是否只读,默认false
返回
{String}
示例:
let mainData = this.comp("mainData");
let row=mainData.getCurrentRow().toJson({format: "simple"});
let url = ProcessUtil.buildFormUrlByTask(row, true);
统计相关
根据流程统计流程实例数
函数名:countPIByProcess
参数
option {JSON} 选项,支持的选项有: limit, offset, orderBy
page {Page} 页面对象
返回
{Promise}
示例:
TaskUtil.countPIByProcess({limit: 20, offset: 0, orderBy: "sProcessName DESC"});
根据流程统计流程任务数
函数名 countTaskByProcess
参数
option {JSON} 选项,支持的选项有: personFIDs,filter,kind,status,limit, offset, orderBy
page {Page} 页面对象
返回
{Promise}
示例:
TaskUtil.countTaskByProcess({kind:"task", status:"wait", limit: 20, offset: 0, orderBy: "sProcessName DESC"});
根据业务数据查询结束的流程实例
函数名:queryFinishPIByData
参数
sData1 {String} 业务数据
process {String} 流程标识(可以为空)
columns {String} 返回的列(可以为空)
返回:
流程实例数组
示例:
taskUtil.queryFinishPIByData(id).then((result)=>{
if (result.length > 0){
//wfmui是流程组件
wfmui.restartQuery(result[0].SA_Task);
}else{
message.info("没有找到结束的流程实例");
}
});
根据业务数据查询流程实例
函数名 queryPIByData
参数
sData1 {String} 业务数据
process {String} 流程标识(可以为空)
status {String} 流程实例状态, 支持的值有空值, waiting, finished, 默认值是空值
filter {String} 过滤条件, 使用KSQL语法的过滤条件, 例如 SA_Task.sName like '张%'
columns {String} 返回的列(可以为空)
返回
{Promise}
根据流程实例 id 查询流程的活动任务
函数名 queryActiveTaskByPI
参数
pi {String} 流程实例id
columns {String} 返回的列(可以为空)
返回
{Promise}
根据任务 id 查询流程的活动任务
函数名 queryActiveTaskByPIForTask
参数
task {String} 任务id
返回
{Promise}
根据业务数据查询活动任务
函数 queryActiveTaskByData
参数
sData1 {String} 业务数据
process {String} 流程标识(可以为空)
columns {String} 返回的列(可以为空)
返回
{Promise}
任务相关
新建单个任务
函数名 insertTask
说明
新建一个任务,显示在我的待办中,结束任务调用 TaskUtil.finishExternalTask
参数
name {String} 名称
executorFIDs {List} 执行者, FID的形成的列表
data {String} 业务数据
process {String} 流程标识
activity {String} 环节标识
curl {String} 创建页面
eurl {String} 执行页面
options {JSON} 任务的其它扩展属性(json格式)
返回
{Promise}
示例
TaskUtil.insertTask("新建任务", ["人的FID"], "页面数据", "流程标识", "环节标识","创建页面", "执行页面", {sData2: "业务数据2"});
let fid = this.comp("wxContext0").getCurrentPersonMemberFID();
TaskUtil.insertTask("新建任务", [fid], "123456789",
"/SA/wf/manager/managerProcess", "taskCenter",
"/new/mobileapp/mobile/nengjian/xinjian_tz.w",
"/new/mobileapp/mobile/nengjian/xinjian_tz.w", {});
新建多个任务
函数名 insertTasks
参数
name {String} 名称
executorFIDs {List} 执行者, FID的形成的列表
data {String} 业务数据
process {String} 流程标识
activity {String} 环节标识
curl {String} 创建页面
eurl {String} 执行页面
options {JSON} 任务的其它扩展属性(json格式)
返回
{Promise}
示例
TaskUtil.insertTasks("新建多个任务", ["人的FID"], "页面数据", "流程标识", "环节标识", "创建页面", "执行页面", {sData2: "业务数据2"});
新建通知
函数名 insertNotice
说明
新建一个通知,显示在我的待阅中
参数
name {String} 名称
executorFIDs {List} 执行者, FID的形成的列表
data {String} 业务数据
process {String} 流程标识
activity {String} 环节标识
curl {String} 创建页面
eurl {String} 执行页面
options {JSON} 任务的其它扩展属性
返回
{Promise}
示例
TaskUtil.insertNotice("新建通知", ["人的FID"], "页面数据", "流程标识", "环节标识", "创建页面", "执行页面", {sData2: "业务数据2"});
let fid = this.comp("wxContext0").getCurrentPersonMemberFID();
TaskUtil.insertNotice("新建通知", [fid], "123456",
"/SA/wf/manager/managerProcess", "taskCenter",
"/new/mobileapp/mobile/nengjian/xinjian_tz.w",
"/new/mobileapp/mobile/nengjian/xinjian_tz.w", {});
结束外部任务
函数名 finishExternalTask
参数
task {String} 任务ID
返回
{Promise}
示例
TaskUtil.finishExternalTask(this.params.task);
执行任务
函数名:executeTask
参数
page {Page} 页面对象
row {JSONObject} 任务数据, 必须有以下属性: id, sExecutorFID
返回
{Promise}
示例:
const hasWf=await ProcessUtil.executeTask(this,row);
打开任务
函数名:openTask
参数
page {Page} 页面对象
row {JSONObject} 任务数据
示例:
ProcessUtil.openTask(this,row);
打开已办(只读)任务
函数名:openFinishTask
参数
page {Page} 页面对象
row {JSONObject} 任务数据
示例:
ProcessUtil.openFinishTask(this,row);
执行并打开任务
函数名:executeAndOpenTask
参数
page {Page} 页面对象
row {JSONObject} 任务数据
示例:
ProcessUtil.executeAndOpenTask(this,row);
查看当前人任务
函数名:viewTask
参数
page {Page} 页面对象
row {JSONObject} 任务数据
contextComp 上下文组件
示例:
ProcessUtil.viewTask(this, row, this.comp("wxContext0"))
更新任务数据
函数名:updateTask
参数
row 任务数据
page 页面对象
返回
{Promise}
示例:
onEditTitleModalOk = async (event) => {
var taskData = this.comp("taskData");
let row = {
"id": taskData.getCurrentRowID(),
"sName": taskData.getValue("sName")
}
try{
await ProcessUtil.updateTask(row,this);
message.info(this.i18n("修改标题成功",import.meta.url));
taskData.refreshData();
}catch(e){
message.error(this.i18n("修改标题失败",import.meta.url) + " : " + e);
}
}
回收任务
函数名:recycle
参数
row 任务数据,SA_Task及sCreatorFID必填
page 页面对象
返回
{Promise}
示例:
await ProcessUtil.recycle(row, this);
唤醒流程任务
函数名:resumeProcess
参数
taskId 任务标识
page 页面对象
返回
{Promise}
示例:
await ProcessUtil.resumeProcess("taskId", this);
查询当前人的待办、已办、待阅、已阅
函数名:queryOwnerWaitTask(待办)、queryOwnerFinishTask(已办)、queryOwnerWaitNotice(待阅)、queryOwnerFinishNotice(已阅)
参数
page {Page} 页面对象
option {JSON} 查询选项
参数格式:
{
limit: 20, 分页大小
offset: 0, 当前位置
process: "", 流程标识
filter: "" 过滤条件,例如: SA_Task.sName like '%张三%'
}
返回
{Promise}
示例:
onTaskDataCustomRefresh = async (event) => {
event.async = true;
event.promise = ProcessUtil.queryOwnerWaitTask(this, {}).then(async(res) => {
await this.loadToTaskData(res.data,event.options.append,"taskData");
event.source.setTotal(ProcessUtil.getTotal(res));
});
}
更新任务变量、任务备份、任务从备份还原、任务归档
函数名:taskArchive
参数
page 页面对象
action 动作,variable(更新任务变量)、backup(任务备份)、reset(任务从备份还原)、archive(任务归档)
params 动作参数,variable:{
task, 流程实例标识
vars 任务变量
},
archive:{
begin, 开始日期
end 结束日期
}
示例:
let pageData=this.comp("pageData");
let begin=pageData.getValue("stDateTime");
let end=pageData.getValue("etDateTime");
let rsp=await ProcessUtil.taskArchive(this,"archive",{begin,end});
let rsp=await ProcessUtil.taskArchive(this,"backup");
let rsp=await ProcessUtil.taskArchive(this,"reset");
获取任务数据
函数名:queryTask
参数
page {Page} 页面对象
option {JSON} 查询选项
参数格式:
{
limit: 20, 分页大小
offset: 0, 当前位置
process: "", 流程标识
kind:"", 任务类型,task、notice、pi
status:"", 任务状态,executing、finished、paused、aborted
filter: "", 过滤条件,例如: SA_Task.sName like '%张三%'
columns:"", 自定义查询返回字段,例如:sName,sCreateTime,sExecutorFName
distinct:false, 是否去重,默认false
orderBy:"", 排序,例如:sCreateTime DESC
sData1:"", 业务数据id
processName:"", 流程名称,精确查询
piCreatorName:"", 实例创建人名称
searchText:"", 关键词搜索,支持sName、sTypeName、sCreatorPersonName、sExecutorPersonName、sStatusName、sCreateTime、sActualFinishTime字段模糊查询
flowId:"", 流程id
variables:{}, 过滤条件中变量
rangeTime:{beginDate,endDate}, 创建时间范围
id:"", 任务id
shard:"" 查看归档数据,histroy
}
返回
{Promise}
示例:
let res = await ProcessUtil.queryTask(this, { "id": task });
查询任务(待办、已办、已提交)数量
函数名:countTask
参数
page 页面对象
params:{
filter, //过滤条件,例如 SA_Task.sName='张三'
status, //任务状态,取值范围["waiting"、 "finished"、 "submited"],默认值"waiting";
org //允许多值,使用“,”分隔;组织范围,可以是组织的ID或FID,默认是当前人;允许多值,使用“,”分隔
}
返回:
int
示例:
let {data}=await ProcessUtil.countTask(this);
根据组织获取任务数据
函数名:queryTaskByOrg、queryOwnerTask
参数
page {Page} 页面对象
option {JSON} 查询选项
参数格式:
{
limit: 20, 分页大小
offset: 0, 当前位置
process: "", 流程标识
kind:"", 任务类型,task、notice、pi
status:"", 任务状态,waiting、finished
filter: "", 过滤条件,例如: SA_Task.sName like '%张三%'
columns:"", 自定义查询返回字段,例如:sName,sCreateTime,sExecutorFName
distinct:false, 是否去重,默认false
orderBy:"", 排序,例如:sCreateTime DESC
processName:"", 流程名称,精确查询
piCreatorName:"", 实例创建人名称
searchText:"", 关键词搜索,支持sName、sTypeName、sCreatorPersonName、sExecutorPersonName、sStatusName、sCreateTime、sActualFinishTime字段模糊查询
taskName:"", 任务名称,模糊查询
variables:{}, 过滤条件中变量
rangeTime:{beginDate,endDate}, 创建时间范围
org:"" 组织
}
返回
{Promise}
示例:
let info = ({ process: res.data[0].sProcess, activity: res.data[0].sActivity });
var filter = "SA_Task<>'" + task + "' AND SA_Task.sKindID<>'tkNotice' AND SA_Task.sProcess='" + info.process + "' AND SA_Task.sActivity='" + info.activity + "'";
let option={};
option.limit = -1;
option.offset = 0;
option.status = "waiting";
option.filter = filter;
let res = await ProcessUtil.queryTaskByOrg(this, option);
获取流程实例任务
函数名:queryTaskByPI
参数
page {Page} 页面对象
option {JSON} 查询选项,同queryTask参数说明
示例:
let flowData = this.comp("flowData");
let filterData = this.comp("filterData");
let {data}=await ProcessUtil.queryTaskByPI(this, {
"searchText": filterData.getValue("searchTextTask"),
"flowId": flowData.getCurrentRowID(),
"shard": this.isHistroy() ? "histroy" : ""
})
流程相关
获取流程定义
函数名:queryProcessDefine
参数
page {Page} 页面对象
option {JSON} 查询选项
参数格式:
{
limit: 20, 分页大小
offset: 0, 当前位置
process: "", 流程标识
filter: "", 过滤条件,例如: SA_Task.sName like '%张三%'
orderBy:"", 排序,例如:sCreateTime DESC
searchText:"", 关键词搜索,支持sName、sTypeName、sCreatorPersonName、sExecutorPersonName、sStatusName、sCreateTime、sActualFinishTime字段模糊查询
isProcessSubadmin:false, 是否流程子管理员
variables:{}, 过滤条件中变量
version:"", 版本号
shard:"" 查看归档数据,histroy
}
返回
{Promise}
示例:
onMainDataCustomRefresh = async (event) => {
let searchText = this.comp("pageData").getValue("searchText");
let self = this;
event.async = true;
event.promise = ProcessUtil.queryProcessDefine(this, {
"offset": event.offset || 0,
"limit": event.limit || 20,
"version": -1,
"isProcessSubadmin": true,
//filter,
searchText
}).then((res) => {
event.source.loadData(res.data || [], event.options.append);
event.source.setTotal(ProcessUtil.getTotal(res));
});
}
更新流程
函数名:updateProcess
参数
row:[] 流程数据,数组支持更新多个,注意每条数据必须要有主键id
page 页面对象
返回
{Promise}
示例:
let updateData = { sDisabledAutoMainVersion: 0, id: row.id, version: row.version };
let rsp = await ProcessUtil.updateProcess([updateData], this);
删除流程
函数名:deleteProcess
参数
id 流程主键id
page 页面对象
返回
{Promise}
示例:
let rsp = await ProcessUtil.deleteProcess(id, this);
发布流程
函数名:publishProcess
参数
ids 流程主键id,多个使用","隔开
page 页面对象
返回
{Promise}
示例:
await ProcessUtil.publishProcess("id1,id2", this);
更新流程拥有者
函数名:updateProcessOwner
参数
process 流程标识
fid 拥有者fid
fname 拥有者全路径名称
page 页面对象
返回
{Promise}
示例:
onOrgDialogMessage = async ({ message: msg }) => {
if (!msg.isOk) {
return;
}
let person = msg.data;
let mainData = this.comp("mainData").getCurrentRow();
try{
await ProcessUtil.updateProcessOwner(mainData.sProcess, person.fid, person.fname, this);
this.comp("mainData").refreshData();
message.info(this.i18n("设置流程拥有者成功",import.meta.url));
} catch(e) {
message.error(this.i18n("设置流程拥有者失败",import.meta.url) + " : " + e);
}
}
更新指定版本流程
函数名:updateProcessMainVersion
参数
process 流程标识
mainVersion 流程版本号
page 页面对象
返回
{Promise}
示例:
onSetMainVersionBtnClick = ({process,pversion}) => (event) => {
let self=this;
let rsp=await ProcessUtil.updateProcessMainVersion(process,pversion,self);
if(rsp.statusCode==200){
self.comp("processData").refreshData();
message.info(self.i18n("设置成功",import.meta.url));
}else{
message.error(self.i18n("设置失败",import.meta.url));
}
}
获取流程实例
函数名:queryPI
参数
page {Page} 页面对象
option {JSON} 查询选项,同 queryTaskByOrg 参数说明
示例:
let res = await ProcessUtil.queryPI(this, option);
删除流程实例
函数名:deletePI
参数
row 流程实例数据
page 页面对象
返回
{Promise}
示例:
await ProcessUtil.deletePI(row, this);
修改流程实例的流程版本号
函数名:updateProcessVersion
参数
params:{
pi, 流程实例标识,多值,使用","分隔
version 流程版本号
}
page 页面对象
示例:
let pi=["pid1","pid2"];
await ProcessUtil.updateProcessVersion({
"pi": pi.join(","),
"version": processVersion
},this)
获取流程子管理员所管理的组织
函数名:queryManagedOrgByProcessSubAdmin
参数
page 页面对象
返回:
{
"组织1的FID": "组织1的FName",
"组织2的FID": "组织2的FName",
}
示例:
let { data: managedOrgs } = await this.queryManagedOrgByProcessSubAdmin(this);
查询流程记录
函数名:queryRecord
参数
page 页面对象
option {JSON} 查询选项
参数格式:
{
limit: 20, 分页大小,默认值20,-1表示所有数据
offset: 0, 当前位置
filter: "", 过滤条件,例如: SA_ServiceDefine.sName like '%张三%'
variables:{}, 变量,例如 {"justep.shard": "histroy"}
task:"", 任务标识
pi:"", 实例标识
sData1:"", 业务数据id
process:"" 流程标识
}
返回:
数组
示例:
onTaskDataCustomRefresh = (event) => {
var option = {
task: this.params.task,
pi: this.params.pi,
process: this.params.process||"",
sData1: this.params.data,
limit: event.limit,
offset: event.offset
};
event.promise = ProcessUtil.queryRecord(this, option).then((res)=>{
event.source.loadData(res.data);
event.source.setTotal(ProcessUtil.getTotal(res));
})
}
查询批量流转
函数名:getBatchTasks
参数
page 页面对象
task 任务标识
option {JSON} 查询选项,参数内容同queryTaskByOrg函数
返回:
数组
示例:
onTaskDataCustomRefresh = (event) => {
event.promise = ProcessUtil.getBatchTasks(this, this.params.task, {
"searchText": this.comp("pageData").getValue("searchText")
}).then((data) => {
event.source.loadData(data);
event.source.setTotal(data.length);
});
}
自定义流程函数
查询自定义流程函数
函数名:queryProcessFn
参数
page 页面对象
option {JSON} 查询选项
参数格式:
{
limit: 20, 分页大小
offset: 0, 当前位置
filter: "", 过滤条件,例如: SA_Task.sName like '%张三%'
orderBy:"", 排序,例如:sCreateTime DESC
searchText:"", 关键词搜索,支持sName字段模糊查询
variables:{}, 过滤条件中变量
shard:"" 查看归档数据,histroy
}
返回
{Promise}
示例:
let id="fnid";
let rsp = await ProcessUtil.queryProcessFn(this, { "filter": `SA_ProcessFn='${id}'` });
新建自定义流程函数
函数名:saveProcessFn
参数
page 页面对象
params:[{
"id": "主键",
"sName": "名称",
...
}] 流程函数信息,列信息请参考流程函数
返回:
int
示例:
const mainData = this.comp("mainData");
let optData = mainData.find()[0];
let rsp = await ProcessUtil.saveProcessFn(this, [optData]);
更新自定义流程函数
函数名:updateProcessFn
参数
page 页面对象
params:[{
"id": "主键",
"sName": "名称",
...
}] 流程函数信息,列信息请参考流程函数
返回:
int
示例:
const mainData = this.comp("mainData");
let optData = mainData.find()[0];
let rsp = await ProcessUtil.updateProcessFn(this, [optData]);
删除自定义流程函数
函数名:deleteProcessFn
参数
page 页面对象
id 函数标识
返回:
int
示例:
let rsp=await ProcessUtil.deleteProcessFn(this,"fnid");
服务定义
查询服务定义
函数名:queryServiceDefine
参数
page 页面对象
option {JSON} 查询选项
参数格式:
{
limit: 20, 分页大小,默认值20,-1表示所有数据
offset: 0, 当前位置
filter: "", 过滤条件,例如: SA_ServiceDefine.sName like '%张三%'
orderBy:"", 排序方式,例如 sName DESC,sCreateTime ASC
searchText:"", 关键词搜索,支持sName字段模糊查询
variables:{}, 变量,例如 {"justep.shard": "histroy"}
distinct:false 是否去重,
columns:"" 查询返回字段,例如:“sName”,默认所有列
}
返回:
数组
示例:
onMainDataCustomRefresh = (event) => {
let searchText = this.comp("pageData").getValue("searchTxt");
let self = this;
event.async = true;
let params={
"offset": event.offset || 0,
"limit": event.limit || 20,
"version": -1,
searchText
}
if(this.params.sScope){
params.filter=`SA_ServiceDefine.sScope='${this.params.sScope}'`;
}
event.promise = ProcessUtil.queryServiceDefine(this, params).then((res) => {
event.source.loadData(res.data || [], event.options.append);
event.source.setTotal(ProcessUtil.getTotal(res));
});
}
新增服务定义
函数名:newServiceDefine
参数
page 页面对象
row 服务定义数据,数组类型
返回:
int
示例:
let mainData = this.comp("mainData");
let row=mainData.getCurrentRow().toJson({format: "simple"});
let {data}=await ProcessUtil.newServiceDefine(this,[row]);
更新服务定义
函数名:updateServiceDefine
参数
page 页面对象
row 服务定义数据,数组类型
返回:
int
示例:
let mainData = this.comp("mainData");
let row=mainData.getCurrentRow().toJson({format: "simple"});
let {data}=await ProcessUtil.updateServiceDefine(this,[row]);
删除服务定义
函数名:deleteServiceDefine
参数
page 页面对象
id 服务定义主键id
返回:
int
示例:
let mainData = this.comp("mainData");
let row=mainData.getCurrentRow().toJson({format: "simple"});
let { data } = await ProcessUtil.deleteServiceDefine(this, row.id);
消息相关
判断是否添加消息中心应用
函数名:hasMessage
参数
page 页面对象
返回:
boolean
示例:
let flag = await ProcessUtil.hasMessage(this);
获取消息通道
函数名:getMessageChannel
参数
page 页面对象
返回:
boolean
示例:
let flag = await ProcessUtil.getMessageChannel(this);//如果有消息中心应用则从消息中心远程获取,否则返回静态定义通道数据