在OA等一些系统中往往要签核,其实签核工作流分好几种,下面的只是一种。
下面是关于模拟签核WF的表的设计以及实现签核过程思路。
一、指明状态 1:新增 2:修改 3:核准 6:驳回 7:提交
二、签核表结构设计(CheckProgram )
1、签核程序表(一个程序一般只有一个签核路线)
签核程序编号 签核路线编号 签核程序名称
PragramID CheckRoadID ProgramName
2、签核路线表 (CheckRoad)
签核路线编号 签核页面路径 签核路线名称 涉及的表
CheckRoadID CheckPath RoadName CheckTable
3、签核明细(CheckInfo)
签核路线编号 签核明细编号 签核明细名称 当前状态 下一Yes状态 下一No状态 串并签核
CheckRoadID CheckInfoID CheckInfoName NowStatus NextYes NextNo IsAll
注: 当前状态 能审核的状态 下一Yes状态 审核通过状态 下一No状态 审核驳回状态
串并签核 串签核:同一签核明细需要能签核该明细的所有人都签核通过才能流到下一Yes状态并且可以不分顺序显示给这些用户,如果分顺序加签核明细就行了
当前状态 下一Yes状态 下一No状态
7 8 6
8 9 6
9 3 6
注:用户提交即进入签核状态(7:签核开始 3:签核完成核准 6:签核结束驳回)
4、签核人明细表(CheckInfoUser)
签核路线编号 签核明细编号 签核人
CheckRoadID CheckInfoID CheckUser
5、审核记录(CheckLog)
签核程序编号 联合主键 签核明细编号 签核人 签核意见 签核状态
PragramID CoMKey CheckInfoID CheckUser CheckView CheckStatus
三、如何显示本人要签核的记录?
1、根据该用户 CheckUser查出涉及的表CheckTable 当前状态NowStatus
2、根据用户 CheckUser和上步查出涉及的表CheckTable 中的ComKey 和 CheckPath 和串并 IsAll
3、将查出数据显示页面上以便签核
4、根据 ComKey和CheckTable 查出要签核记录
5、审核通过时判断是串还是并签核,如果是串则从审核记录(CheckLog)中找出已经审核通过的该签核明细编号CheckInfoID下的所有用户与签核人明细表(CheckInfoUser)中的该签核明细编号下的 签核人比较,如果就剩下自己没审核通过,则将涉及的表CheckTable 的状态该为下一Yes状态并添加审核记录,如果还有其他人,则只添加审核记录.
一般这些操作过程比较繁琐,通过存储过程比较方便,编写代码时只需调用存储过程传入审核人CheckUser签核程序编号PragramID联合主键 等关键参数。