苍穹工作流那些事 之 自由流程

企业内部在处理流程审批业务时,可能会遇到以下应用场景:无法预置工作流,在进行审批时才根据业务需要确定流程审批节点、审批人。
为此,苍穹工作流提供了对自由流程的支持。构建好的自由流程,处理过程被完整记录,流程实例纳入监控管理体系,既保障了灵活性,又确保了处理过程的严谨性、可追溯性。
本期,小编就带大家详细了解苍穹工作流的自由流程功能。
1 业务场景
1、在发起流程时,由流程发起人确定当前业务单据要流转的审批流信息,包括有哪些审批节点和审批人。比如协同办公流程中,会出现发起人确定后续公文审批环节的情况。
2、在流程审批时,由审批人确认当前流程后续要流转的审批流信息,包括有哪些审批节点和审批人。
比如不同角色员工离职办理流程中,除一些通用处理节点,如直接上级审批、薪酬计算、离职证明等外,其他关键审批办理环节是不同的。一般由HR专员审批流程时,依据其职位、职级、部门、岗位类型等手动进行选择。
2 解决方案
苍穹工作流提供了自由流程接口和样例代码,支持通过调用接口构建流程,通过项目化交付,最大程度满足用户对流程的自由审批需要,丰富了苍穹工作流的应用场景。
3 功能实现
那自由流程功能是如何实现的呢?小编这就带大家开启探索之旅~
步骤一:在流程发起时,构建并启动自由流。相关代码示例如下:
private WFProcess createAndStartProcess() {
String entityNumber = this.getModel().getDataEntityType().getName();
QFilter filter = new QFilter(NUMBER, QCP.equals, entityNumber);
DynamicObject billInfo = BusinessDataServiceHelper.loadSingle(BOS_FORMMETA, QUERY_FIELD, new QFilter[]{filter});
//创建流程
WFProcess wfProcess = initProcess(billInfo);
//人工节点,如果不传人工节点,默认会创建一个
WFUserTask wfUserTask = initWFUserTask(wfProcess);
wfProcess.addNextNode(wfUserTask);
//审批节点
WFAuditTask wfAuditTask = initWFAuditTask(wfProcess,wfUserTask.getId());
wfUserTask.addNextNode(wfAuditTask);
//自动节点
WFAutoTask wfAutoTask = initWFAutoTask(wfProcess);
wfAuditTask.addNextNode(wfAutoTask);
//会审节点
WFJointAuditTask wfJointTask = initWFJointAuditTask(wfProcess,wfUserTask.getId(),wfAuditTask.getId());
wfAutoTask.addNextNode(wfJointTask);
Mapvariables = new HashMap<>();
String businessKey = this.getModel().getDataEntity().getString("id");
String operation = "submit";
WorkflowServiceHelper.createProcessAndStart(businessKey , operation , entityNumber, variables, wfProcess);
return wfProcess;
}其中,流程的创建如下:
private WFProcess initProcess(DynamicObject billInfo) {
WFProcess wfProcess = new WFProcess();
wfProcess.setEntraBill(billInfo.getString(NUMBER));
wfProcess.setEntraBillId(billInfo.getString("id"));
wfProcess.setEntraBillName(new LocaleString(billInfo.getLocaleString("name").getLocaleValue()));
//流程插件
ListexecutionListeners = initExecutionListeners();
wfProcess.setExecutionListeners(executionListeners);
//单据例外
ListbillExceptionOp = initBillexception();
wfProcess.setBillExceptionOp(billExceptionOp);
//扩展实现其他属性:比如业务申请人和审批人相同时自动审批
MapextProps = new HashMap<>();
extProps.put("autoAuditWhenSamePerson", true);
wfProcess.setExtProps(extProps);
return wfProcess;
}人工节点的创建如下:
private WFUserTask initWFUserTask(WFProcess wfProcess) {
WFUserTask wfUserTask = new WFUserTask(wfProcess);
wfUserTask.setAllowCoordinate(true);
wfUserTask.setAllowTransfer(true);
WFParticipantModel participantModel = new WFParticipantModel();
participantModel.getParticipant().add(getParticipant1());
wfUserTask.setParticipant(participantModel);
LocaleString name = new LocaleString();
name.put(Lang.zh_CN.name(), ResManager.loadKDString("自由流人工节点", "FreeFlowPlugin_19", WF_UNITTEST));
name.put(Lang.zh_TW.name(), ResManager.loadKDString("自由流人工节点", "FreeFlowPlugin_19", WF_UNITTEST));
name.put(Lang.en_US.name(), "freeflowUserTask");
wfUserTask.setName(name);
ListdecisionOptions = initWFUserTaskDecisionOptions();
wfUserTask.setDecisionOptions(decisionOptions);
return wfUserTask;
}审批节点的创建如下:
private WFAuditTask initWFAuditTask(WFProcess wfProcess, String id) {
WFAuditTask wfAuditTask = new WFAuditTask(wfProcess);
LocaleString name = new LocaleString();
name.put(Lang.zh_CN.name(), ResManager.loadKDString("自由流审批节点", "FreeFlowPlugin_13", WF_UNITTEST));
name.put(Lang.zh_TW.name(), ResManager.loadKDString("自由流审批节点", "FreeFlowPlugin_13", WF_UNITTEST));
name.put(Lang.en_US.name(), "freeflowAuditTask");
wfAuditTask.setName(name);
//协办
wfAuditTask.setAllowCoordinate(true);
//转交
wfAuditTask.setAllowTransfer(true);
//加签
wfAuditTask.setCountersigned(true);
//参与人
WFParticipantModel participantModel = new WFParticipantModel();
participantModel.getParticipant().add(getParticipant1());
participantModel.getParticipant().add(getParticipant2());
//participantModel.getParticipant().add(getParticipant3());
//participantModel.getParticipant().add(getParticipant4());
wfAuditTask.setParticipant(participantModel);
//决策项
ListrejectNodeIds = new ArrayList<>();
if(WfUtils.isNotEmpty(id)){
rejectNodeIds.add(id);
}
ListdecisionOptions = initWFDecisionOptions(rejectNodeIds);
wfAuditTask.setDecisionOptions(decisionOptions);
//单据设置
WFBillSetting billSetting = new WFBillSetting();
billSetting.setFormKey(getView().getFormShowParameter().getFormId());
billSetting.setMobilFormKey("anquan$");
wfAuditTask.setBillSetting(billSetting);
//自动审批
WFAutoAudit wfAutoAudit = getAutoAudit(wfAuditTask.getId());
wfAuditTask.setAutoAudit(wfAutoAudit);
//自动跳过
WFConditionalRule skipCondition = initSkipCondition(wfAuditTask.getId());
wfAuditTask.setSkipCondition(skipCondition);
//扩展实现其他属性:比如扩展业务按钮
MapextProps = initBtnModel();
wfAuditTask.setExtProps(extProps);
return wfAuditTask;
}会审节点的创建如下:
private WFJointAuditTask initWFJointAuditTask(WFProcess wfProcess,String id1,String id2) {
WFJointAuditTask wfJointTask = new WFJointAuditTask(wfProcess);
LocaleString name = new LocaleString();
name.put(Lang.zh_CN.name(), ResManager.loadKDString("自由流会审节点", "FreeFlowPlugin_10", WF_UNITTEST));
name.put(Lang.zh_TW.name(), ResManager.loadKDString("自由流会审节点", "FreeFlowPlugin_10", WF_UNITTEST));
name.put(Lang.en_US.name(), "freeflowWFJointAuditTask");
wfJointTask.setName(name);
//协办
wfJointTask.setAllowCoordinate(true);
//转交
wfJointTask.setAllowTransfer(true);
//加签
wfJointTask.setCountersigned(true);
//参与人
WFParticipantModel participantModel = new WFParticipantModel();
participantModel.getParticipant().add(getParticipant1());
participantModel.getParticipant().add(getParticipant苍穹工作流那些事 之 自由流程
企业内部在处理流程审批业务时,可能会遇到以下应用场景:无法预置工作流,在进行审批时才根据业务需要确定流程审批节点、审批人。为此,苍...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



