# 超级节点基础信息
数据表:
WF_SUPERNODE 超级节点信息表
WF_SUPERNODE_CONTROL 已发起流程中激活的超级节点信息(designated_member_id干预人Id)
WF_SUPERNODE_CONTROL_DETAIL 已发起流程中激活的超级节点的详细信息(包含超级节点的返回信息和return_code)
超级节点的实现:继承BaseSuperNodeAction父类,执行executeAction方法,返回对象SuperNodeResponse 里面的return_code码的几种状态:
FORWARD(1), // 向前
BACK(2), // 向后
HUMAN(3), // 转人工处理
WAIT(4), // 等待外部调用
STOP(5), // 终止流程
CANCEL(6); // 撤销流程
启动OA的时候,会去扫描实现了SuperNodeManager接口的实现类
具体的执行过程:A(普通节点)---B(超级节点)---C(普通节点)
A提交的时候,判断到B节点是超级节点,会走到SuperNodeDispatcher类中的onActivityReady方法,给超级设置干预人的 workitem和affair数据,并且将超级节点任务放到任务队列里面,这时候的workitem的perfomer字段和affair的memberId字段是一个随机的UUID,不是具体某个人的人员Id。只有超级节点在转干预人的时候才会将这两个字段替换成干预人的Id,替换后干预人的待办事项就有相应的待办数据。
超级节点的任务是新起了一个线程去执行,所以可能存在A节点还没完成,事务没有提交就开始执行超级节点任务的情况。这时候超级节点的相关信息都还没有入库,没有写到(WF_SUPERNODE_CONTROL)表,当检测到该情况时,超级节点任务会延时执行,到达一定时间还是获取不到任务,该超级节点的任务就会自动废弃。
获取到任务后,会去执行超级节点具体的逻辑,然后根据SuperNodeResponse对象里面的returnCode来决定流程的走向。
编撰人:chenxd、lichaoj、admin
快速跳转
