可以在js和java中写代码控制流程的启动、流转、回退、终止、结束

启动流程Java

需要引入

import com.justep.system.process.ProcessControl;
import com.justep.system.process.ProcessUtils;

方法一介绍

Document startProcess (String processFullName, String name, String sData1, String executor)

返回的Document内容如下

<items>
<item>
<process>/x5demo/rich/process/applyGoods/applyGoodsProcess</process>
<activity>applyActivity</activity>
<task>EC9BF028AAC64BDCA0809AC2689AA5B4</task>
</item>
</items>

示例——传入任务标题、业务主键、执行者,启动流程后可以得到task

String sData1 = "0C23A90D705748AE9D7DD2DE13906275";
Document doc = ProcessUtils.startProcess("/x5demo/rich/process/applyGoods/applyGoodsProcess", "手动启动1",sData1, "/ORG01.ogn/PSN01@ORG01.psm");
String task = doc.getRootElement().element("item").elementTextTrim("task");

方法二介绍

Document startProcess (String processFullName, Map relations, ProcessControl control, List tokens, String executor)

示例——传入sData1,sData2、执行者,启动流程后可以得到task

String sData1 = "11";<
Map<String, Object> varMap = new HashMap<String, Object>();
varMap.put("sData1", sData1);
varMap.put("sData2", "aa");
List<String> ls = new ArrayList<String>();
Document doc = ProcessUtils.startProcess("/x5demo/rich/process/applyGoods/applyGoodsProcess", varMap, null, ls, <a>/ORG01.ogn/PSN01@ORG01.psm</a>);

说明:startProcess 方法中的executor参数

如果是当前人,可以使用

ContextHelper.getPersonMember().getFID();

如果不是当前人,且知道人的id的话,可以使用

OrgUtils.findOrgUnitsByID(sPersonID).get(0).getFID();

流程流转Java

方法介绍

ProcessControl advanceProcessQuery(String task)
void advanceProcess(String task, ProcessControl control)

示例——传入task,执行流程查询获得ProcessControl,再执行流转

ProcessControl pc = ProcessUtils.advanceProcessQuery(task);
ProcessUtils.advanceProcess(task, pc);

中止流程Java

方法介绍

public static ProcessControl abortProcessQuery(String task) {
public static void abortProcess(String task, ProcessControl control) {

先调用abortProcessQuery返回processControl,再调用abortProcess

发送通知Java

//需要引入
import com.justep.system.process.TaskHelper;
import com.justep.system.opm.OrgUnit;
import com.justep.system.opm.OrgUtils;
import com.justep.system.process.Task;
//获得通知接收者
String sData1 = "AA9ACD6BDB8147ED9EE6A666FA26012F";
List<OrgUnit> ls = new ArrayList<OrgUnit>();
ls = OrgUtils.findPersonMembersByID("ORG01", "PSN01");
//设置通知为打开时抢占、打开后自动结束
Map<String, Object> varMap = new HashMap<String, Object>();
varMap.put("sExecuteMode2", com.justep.system.process.TaskExecuteMode2.FINISH_WHEN_OPEN );
varMap.put("sPreemptMode", com.justep.system.process.TaskPreemptMode.OPEN );
//创建通知,执行保存方法,即发送通知
Task t = TaskHelper.createNotice("自定义通知", "/x5demo/rich/process/applyGoods/applyGoodsProcess", "applyActivity", "/x5demo/rich/process/applyGoods/applyActivity.w", "/x5demo/rich/process/applyGoods/applyActivity.w", sData1, ls.get(0), varMap);
t.save();

实现类似子流程的效果

需求:在主流程中启动另外一个子流程,当子流程流转完之后,再回到主流程

实现:

1、在主流程的某个环节的流转事件中,把主流程暂停,并且启动子流程

暂停流程的方法如下,启动流程的方法见上面

暂停查询
public static ProcessControl suspendProcessQuery(String task)
暂停
public static void suspendProcess(String task, ProcessControl control)

2、在子流程结束事件中,唤醒主流程

唤醒流程的方法如下

流程唤醒
public static void resumeProcess(String task)

启动流程Js

var data = justep.xbl('dataDEMO_SendDoc');
var rowid = data.getCurrentID();
var flowEngine = justep.xbl("process");
flowEngine.start(null, null, rowid);

中止流程Js

justep.xbl(‘process’).abort();

本文由WeX5君整理,WeX5一款开源免费的html5开发工具H5 App开发就用WeX5!

阅读其他app 开发相关文章:http://doc.wex5.com/?p=3443