# 业务关系和简单场景
# 流程是和业务组的关系
COL_SUMMARY表记录整个协同的数据,主要关注processId和caseId
CTP_AFFAIR事项表,每条协同数据,有多少人就有多少数据(正常情况下,除了撤销,回退等操作产生的数据),主要关注sub_object_id(WF_WORKITEM_RUN表的主键ID),activity_id(节点ID),processId以及caseId
# 简单的闭环流程(提交场景)
# 流程不满足的分支节点怎么屏蔽
分支条件解析满足的接口:ActionRunner.getConditionValue
分支条件计算:WorkflowFunctions.java
提交的时候日志信息:
14:45:30 [H-92] INFO: ProcessEngineImpl: - chen,W_I:=2755396907718623273; W_N:=; W_C:={"matchRequestToken":"7373653295765867504","condition":[{"nodeId":"163274129988710","isDelete":"false"},{"nodeId":"163274129988711","isDelete":"true"}]}; W_M:=; readyObject:=null;NodeConditionChangeInfoMap:{}
重要信息:"condition":[{"nodeId":"163274129988710","isDelete":"false"}, {"nodeId":"163274129988711","isDelete":"true"}]
isDelete等于true表示当前节点所在分支不满足条件
//将节点是否需要激活放入context
WorkflowUtil.putNodeConditionToContext(context, activity, "isDelete", isDelete)
//从context中取出该节点的状态
WorkflowApiUtil.getNodeConditionFromContext(context,activittty,"isDelete");
实际流转,将能流转到的节点和不能流转到的节点信息放入WF_CASE_RUN表的case_content字段的 wf_node_condition_change_key属性见下面的数据:
{
"datamap":{
"appName":"collaboration",
"wf_node_condition_change_key":{
"16327412955304":{
"isDelete":"false"
},
"163274129988710":{
"isDelete":"false"
},
"163274129988711":{
"isDelete":"true"
},
"16327412998866":{
"isDelete":"false"
},
"16327412998867":{
"isDelete":"false"
}
}
}
}
前端查看流程图的时候会从wf_case_run中取出节点信息,动态的设置节点的状态:BPMSeeyonPolicy.setIsDelete(String isDelete);
public Map<String, String> getConditionMapFromCase(BPMCase theCase, String nodeId) {
Object result = theCase == null ? null : theCase.getData(WorkFlowConstants.WF_NODE_CONDITION_CHANGE_KEY);
Map<String, String> nodeData = result == null ? null : ((Map<String, Map<String, String>>) result).get(nodeId);
return nodeData == null ? new HashMap<>() : nodeData;
}
# 流程图添加删除节点
原理:BPMProcess已经封装好了节点和线之间的关系
添加节点:串行添加 在A节点后面添加B节点 s----A-b-----c---e
process.addChild(BNode); 向流程中添加节点
BPMTransition transition = new BPMTransition(ANode,BNode);//建立A节点和B节点之间的线
process.addLink(transition);//将线加入流程
BPMTransition aDowLink = ANode.getDownTransitions().get(0);//获取A节点原来的down线
BNode.addDownTransition(aDowLink);//B节点和down线建立联系
aDowLink.setFrom(BNode);//线和B节点建立联系
添加并行节点:split和join节点总是成对出现,需要建立两者之间的关系
创建split节点:BPMAndRouter split= new BPMAndRouter(splitId, "split");
创建join节点:BPMAndRouter join = new BPMAndRouter(joinId,"join");
split.setStartAnd(true);
join.setStartAnd(false);
split.setParallelismNodeId(relevancyId);
join.setParallelismNodeId(relevancyId);
编撰人:chenxd、admin
← 超级节点基础信息 获取客户流程图的方式 →
