关于审批流在数据库中的体现原创
金蝶云社区-浅笑黯然
浅笑黯然
6人赞赏了该文章 505次浏览 未经作者许可,禁止转载编辑于2021年03月16日 16:27:19

同事跟我分享了有关关于审批流在数据库中的体现,以下是整理后的内容,分享给大家

[u]t_WF_PiBiMap:[/u]

工作流实例与业务单据关联关系。业务单据 :工作流实例 = (0 到1条) : (0 到 n条),单据可能存在多个实例,不是一一对应。

[list]

[*]FObjectTypeId : 单据的FormId

[*]FKeyValue : 单据内码

[*]FProcInstId:业务流程实例内码

[/list]

[u]t_WF_ProcInst:[/u]

工作流实例表格。字段比较多,仅描述与任务相关的字段:

[list]

[*]FProcInstId:表格主键:业务流程实例内码;

[*]FNumber:业务流程实例编码,单据编码 + 时间流水;

[*]FProcDefId:采用的流程图内码;

[*]FVersionId:采用的流程图版本内码;

[*]FOriginatorId:发起人;

[*]FOriginatorPostId:发起人岗位;

[*]FFailureMessage:如果流程实例运行失败挂起,挂起原因;

[*]FFailureOutInfo:运行失败,错误详细堆栈;

[/list]... 其他略

[u]t_WF_ActInst:[/u]

工作流节点实例表格:工作流有消息、审核、服务等节点,各节点实例都会存储在这个表格。

[list]

[*]FActInstId:表格主键,节点实例内码;

[*]FProcInstId:外键,流程实例内码;

[*]FActivityId:节点在流程图中的编号。编号对应的节点,须打开xml查看 ( t_WF_ProcDef.FDefinitionXML );

[*]FBackActInstIds:本节点实例的来源路线,记录从开始节点到本节点,经过的节点实例;

[*]FStatus:本节点的状态:0 = 准备;1 = 完成;2 = 等待;3 = 舍弃;4 = 失败;

[/list]... 其他略

[u]t_WF_Assign[/u]:

工作流任务表格,记录工作流实例产生的全部任务。

[list]

[*]FAssignId:表格主键,任务内码;

[*]FProcInstId:外键,流程实例内码;

[*]FActInstId:外键,任务对应的节点实例;

[*]FSenderId:任务发送人;

[*]FStatus:任务状态:0 = 任务刚分配;1 = 任务已处理;

[/list]... 其他略

[u]t_WF_Receiver[/u]:

工作流任务接受人。本表不区分哪些人处理了任务,仅记录哪些人收到过任务。

不是所有的任务接受人都需处理任务。非会签节点,多人收到任务后,其中一人处理了,任务即结束,其他人不可再处理任务。

[list]

[*]FId:表格主键,无意义;

[*]FAssignId:外键,任务内码;

[*]FReceiverId:接受人;

[*]FTitle:任务标题;

[*]FContent:任务内容;

[/list]

[u]t_WF_ApprovalAssign:[/u]

工作流任务详情。记录工作流任务的附带信息,比如有哪些审批项、是否允许转发等。

[list]

[*]FApprovalAssignId:表格主键,任务详情内码,与任务一一对应;

[*]FAssignId:外键,任务内码;

[*]FObjectTypeId:单据FormId;

[*]FKeyValue:单据内码;

[*]FPolicyXML:审批策略(是否允许会签);

[*]FApprovalAction:处理人可选的审批项;

[*]FResult:最终审批结果,处理人选择的审批项;

[*]FDisposition:处理人录入的审批意见;

[*]FOperationNumber:审批同时,执行的单据操作;

[/list]... 其他略

[u]t_WF_ApprovalItem:[/u]

工作流任务处理记录:记录各个任务处理人的详细处理记录;

[list]

[*]FApprovalItemId:表格主键,处理记录内码;

[*]FApprovalAssignId:表格外键,对应的任务详情内码;

[*]FCompletedTime:任务处理时间;

[*]FStatus:处理状态:0 = 未完成;1 = 已完成;3 = 已转发;4 = 等待排队 (按顺序会签);

[*]FReceiverId:处理人;

[*]FReceiverPostId:处理人岗位;

[*]FActionResult:处理人选择的审批项;

[*]FDisposition:处理人填写的审批意见;

[/list]

如上是各个表格介绍,下面是读取某单据全部任务极其处理人处理状态的示意SQL,演示如何关联各表格:

SELECT 

t_WF_ActInst.FActivityId,

t_WF_ApprovalAssign.FResult,

t_WF_ApprovalAssign.FDisposition,

t_WF_Receiver.FReceiverId,

t_SEC_User.FName,

t_WF_ApprovalItem.FStatus, 

t_WF_ApprovalItem.FActionResult,

t_WF_ApprovalItem.FDisposition, 

t_WF_ApprovalItem.FCompletedTime

FROM 

t_WF_PiBiMap

INNER JOIN t_WF_ProcInst ON (t_WF_ProcInst.FProcInstId = t_WF_PiBiMap.FProcInstId)

INNER JOIN t_WF_ActInst on (t_WF_ActInst.FProcInstId = t_WF_ProcInst.FProcInstId)

INNER JOIN t_WF_Assign on (t_WF_Assign.FActInstId = t_WF_ActInst.FActInstId)

INNER JOIN t_WF_Receiver on (t_WF_Receiver.FAssignId = t_WF_Assign.FAssignId)

INNER JOIN t_SEC_User ON (t_SEC_User.FUserId = t_WF_Receiver.FReceiverId)

INNER JOIN t_WF_ApprovalAssign on (t_WF_Assign.FAssignId = t_WF_ApprovalAssign.FAssignId)

LEFT JOIN t_WF_ApprovalItem on (t_WF_ApprovalItem.FApprovalAssignId = t_WF_ApprovalAssign.FApprovalAssignId

AND t_WF_ApprovalItem.FReceiverId = t_WF_Receiver.FReceiverId)

WHERE 

t_WF_PiBiMap.FObjectTypeId = '单据标识' 

AND FKeyValue = '单据内码'


若有抄袭,请及时私信

赞 6