3, ccflow 流程运行数据表.
【WF_GenerFH : 分合流信息注册表,对于是分合流的流程才有效,发起一条分合流,就多一条数据在此。】
[FID]主键,表ID
,[Title] 标题
,[GroupKey] 分组主键
,[FK_Flow] 流程编号, 外键:对应物理表:WF_Flow,表描述:流程编号(流程表中的流程编号)
,[ToEmpsMsg] 接受人员
,[FK_Node] 停留节点
,[WFState]状态
,[RDT] 记录日期
【WF_GenerWorkFlow : 流程注册表(启动一个流程后,就产生一条数据,放在WF_GenerWorkFlow)】
[WorkID]主键,表ID
,[FID] 流程ID
,[FK_FlowSort] 流程类别
,[FK_Flow] 流程编号, 外键:对应物理表:WF_Flow,表描述:流程编号(流程表中的流程编号)
,[FlowName] 流程名称
,[Title] 标题(如:总经理室-zhoupeng,周朋在2012-04-19 00:38发起.)
,[WFState] 流程状态
,[Rec] 发起人
,[RecName] 发起人名称
,[RDT] 记录日期
,[FK_Node] 节点, 主外键:对应物理表:WF_Node,表描述:节点
,[NodeName] 节点名称
,[FK_Dept] 部门, 主外键:对应物理表:Port_Dept,表描述:部门
,[DeptName] 部门名称
【WF_GenerWorkerlist : 节点工作人员表.( 发送一个步骤后,就把接受的工作人员放入WF_GenerWorkerlist,流程运行完成后此记录就被删除了) 】
[WorkID]主键,表ID
,[FK_Emp] 人员编号, 主外键:对应物理表:Port_Emp,表描述:用户
,[FK_EmpText]名称
,[FK_Node] 节点, 主外键:对应物理表:WF_Node,表描述:节点
,[FK_NodeText]节点名称
,[FID] 流程ID
,[FK_Flow] 流程编号, 外键:对应物理表:WF_Flow,表描述:流程编号(流程表中的流程编号)
,[FK_Dept] 使用部门, 主外键:对应物理表:Port_Dept,表描述:部门
,[SDT] 应完成日期
,[DTOfWarning] 警告日期
,[WarningDays] 预警天
,[RDT] 记录日期
,[IsEnable] 是否可用
,[IsPass] 是否通过(对会签节点有效)
,[WhoExeIt] 谁执行它
,[Sender] 发送人
【WF_Bill : 单据信息存储表.】
[MyPK]主键,表ID
,[WorkID] 工作ID
,[FID]流程ID
,[FK_Flow] 流程
,[FK_BillType] 单据类型
,[Title] 标题
,[FK_Starter] 发起人
,[StartDT] 发起时间
,[Url]
,[FullPath]
,[FK_Emp] 打印人, 外键:对应物理表:Port_Emp,表描述:用户
,[RDT] 打印时间
,[FK_Dept] 隶属部门, 外键:对应物理表:Port_Dept,表描述:部门
,[FK_NY] 隶属年月, 外键:对应物理表:Pub_NY,表描述:年月
,[Emps]
,[FK_Node] 节点
,[FK_Bill]
,[MyNum] 个数
【WF_CHOfFlow : 流程考核信息表.】
[WorkID]主键,表ID
,[FID] 流程ID
,[FK_Flow] 流程
,[WFState] 流程状态,枚举类型:0 运行;1 完成;2 强制终止;3 删除;
,[Title] 标题
,[FlowStarter] 发起人, 外键:对应物理表:Port_Emp,表描述:用户
,[FK_Dept] 发起人部门, 外键:对应物理表:Port_Dept,表描述:部门
,[FlowStartRDT] 发起时间
,[FlowEmps] 参与人
,[FlowEnder] 结束人, 外键:对应物理表:Port_Emp,表描述:用户
,[FlowEnderRDT] 完成时间, 外键:对应物理表:Port_Emp,表描述:用户
,[FlowDaySpan] 流程用天
,[FK_NY] 隶书年月, 外键:对应物理表:Pub_NY,表描述:年月
,[MyNum] 个数
【WF_CHOfQL : 流程质量考核信息表.】
没有这表
【WF_Emp : 流程人员配置信息表】
[No]主键,表ID(拼音等)
,[Name]姓名
,[Tel]电话
,[FK_Dept] 所在部门, 外键:对应物理表:Port_Dept,表描述:部门
,[Email]邮件地址
,[TM] 即时通讯号
,[AlertWay] 收听方式,枚举类型:0 不接收;1 短信;2 邮件;3 内部消息;4 QQ消息;5 RTX消息;6 MSN消息;
,[Author] 授权人
,[AuthorDate] 授权日期
,[AuthorIsOK] 是否授权成功
,[Stas] 岗位
,[FtpUrl]路劲
,[Msg]信息内容
,[Style]
,[Idx]顺序号
【WF_FileManager :流程附件信息存储表】
[OID]主键,表ID
,[WorkID]工作ID
,[FID]流程ID
,[FK_Node] 节点, 主外键:对应物理表:WF_Node,表描述:节点
,[Name]文件名称
,[Ext] 扩展
,[Note]备注
,[FileSize]文件大小
,[FK_Emp] 上传人, 外键:对应物理表:Port_Emp,表描述:用户
,[FK_Dept] 上传人所属部门, 外键:对应物理表:Port_Dept,表描述:部门
,[RDT]上传时间
【WF_ForwardWork : 转发信息存储表.】
[MyPK]主键,表ID
,[WorkID] 工作ID
,[FK_Node] 节点, 主外键:对应物理表:WF_Node,表描述:节点
,[FK_Emp] 移交人, 外键:对应物理表:Port_Emp,表描述:用户
,[FK_EmpName] 移交人姓名
,[ToEmp] 移交给(接受人编号)
,[ToEmpName] 移交给(接受人名称)
,[RDT] 移交时间
,[Note] 移交原因
,[IsRead] 是否读取?
【WF_RememberMe : 投递路径记忆表, 请baidu "ccflow 智能投递"】
[FK_Node] 节点, 主外键:对应物理表:WF_Node,表描述:节点
,[FK_Emp]发送人(谁发过来的,),外键:对应物理表:Port_Emp,表描述:用户
,[Objs] 分配人员
,[ObjsExt] 分配人员
,[Emps] 工作人员
,[EmpsExt] 工作人员Ext
【WF_ReturnWork : 退回信息存储表】
[MyPK]主键,表ID
,[WorkID]工作ID
,[ReturnNode] 被退回节点
,[ReturnNodeName] 被退回节点名称
,[Returner] 退回人
,[ReturnerName] 退回人名称
,[ReturnToNode] 退回到节点
,[ReturnToEmp] 退回给(接收人)
,[Note] 退回原因
,[RDT] 退回日期
【WF_M2M : 一对多的关系存储表.】
没有这表
4, 公共字典表. 大多以Pub CN开头。
比如: 城市,省份,片区,年月,工作日. 这里不介绍了.
CN_Area:区域表 CN_PQ片区表 CN_SF省份表 CN_City城市表
如果您对以上的表结构在大概的认识,您可以阅读如下文件了.
了解ccflow数据表运行机制,为自己项目做高级的查询与二次开发(开发进阶篇).
================================================================================================
一, 流程建立时.
流程表 WF_Flow, 节点WF_Node.
1, 流程自动生成一个三数数的流程编号. 比如: 001.
2, ccflow自动生成开始与结束两个节点. 节点编号为 101 与 199. 如果在有创建节点时,节点编号就为102, 103 ….
3, ccflow 会为每个节点生成一个物理表,这个节点的信息存储这个表里,格式为 “ND” + 节点编号,比如:ND101,ND199.
每个节点表都有相同的字段.
比如: OID工作ID, RDT记录日期, Rec记录人,CDT,完成时间. NodeState 节点状态.
开始节点比较特殊, 它多一个 WFState 字段.就是流程状态,用来记录流程运行的状态(开始节点的流程状态=1 , 表示此流程已经完成;开始节点的流程状态=0,表示此流程运行中。).
4, 建立一个流程 WF_Flow,插入一条流程数据. WF_Node 插入n条节点数据.
5, ccflow会产生一个流程数据表,系统产生一个"ND" + 流程编号+"Rpt" 命名的表, 比如:ND1Rpt 它是流程数据表。
它把所有节点字段的汇总集合形成的一个表.流程在启动后,运行中,完成后,这个表的数据一直跟随流程运转而更新.所以你可以查询
任何数据在这个流程表中。
6, ccflow 会产生一个节点视图,V+流程编号. 比如:V001. 这个视图就是把本流程中的各个节点数据,相同的字段都汇总出来。
事例如下:
CREATE VIEW [dbo].[V001]
AS
SELECT '101'+'_'+CAST(OID AS varchar(10)) +'_'+CAST(FID AS VARCHAR(10)) AS MyPK, '101' AS FK_Node,OID,FID,RDT,substring(RDT,1,7) AS FK_NY,CDT,Rec,Emps,NodeState,FK_Dept, 1 AS MyNum FROM ND101
UNION
SELECT '199'+'_'+CAST(OID AS varchar(10)) +'_'+CAST(FID AS VARCHAR(10)) AS MyPK, '199' AS FK_Node,OID,FID,RDT,substring(RDT,1,7) AS FK_NY,CDT,Rec,Emps,NodeState,FK_Dept, 1 AS MyNum FROM ND199
GO
对于开发时效考核的朋友大用用处,可以统计每个节点用的天数,规定完成的天数,完成的工作量。
二, 流程运行时.
分合流流程注册表: WF_GenerFH
流程注册表: WF_GenerWorkFlow
工作人员表: WF_GenerWorkerlist
1. 启动一个流程后,ccflow自动产生一个WorkID, 一个流程一个WorkID, 并且处开始节点表(ND101)中插入一条数据, WFState=0 流程状态=0 表示运行中.
2. 启动一个流程后,就产生一条数据,放在WF_GenerWorkFlow ,
3. 发送一个步骤后,就把接受的工作人员放入WF_GenerWorkerlist .
4. 流程运行完成后,就把两个表中的这个 WorkID 的数据清除.
5, 在流程数据表里(ND1Rpt)中, 每个节点有新采集的数据就会copy到此表中.
所以结合流程数据表,与当前的这两个表,你可以查询出来想要的数据满足二次开发.
三, 流程完成后.
流程完成后,就与 WF_GenerWorkFlow ,WF_GenerWorkerlist 没有关系了.
所以查询流程数据从,流程数据表里,或者从节点数据表里查询. 比如: ND101, ND102, ND199, NDRpt. V001 .
开始节点的流程状态=1 , 表示此流程已经完成。
类设计与数据库设计命名规则
总体规则
1, 以英文命名,每一个字母大写,提倡用简写。比如Emp 人员 Dept 部门 Station 岗位。
2, 如果英文名称太长,或者不常用可考虑用中文命名,建议用中文的缩写。比如管理机关GLJG。
3, 对于类与表的命名必须有前缀,比如BP.Port.Dept 类名, 表名为Port_Dept.。
4, 前缀命名尽量简单。比如考核命名空间英文名称为Check 空间可以命名为CH。共用的类英文名称为Public可简写为 Pub.
类库设计规则:
1, 格式为 BP+前缀+类名。比如:BP.Port.Emp 人员类。
2, 属性命名与字段命名相同。特殊属性可以遵守总体命名规则。
3, 类库的倒数第一个命名空间要与要与物理表的前缀一致。比如:物理表考核项目。
BP.CH.CheckIiems。物理表为 CH_CheckItem.
4, 如果一个属性是外部实体或者枚举类型,以His 开头。 比如在类人员中的部门类HisDept.
5, 方法命名规则,遵守总体命名规则的 第1,2条。
6, 变量的命名规则,字母小写,以下划线开头。比如: age 年龄。addr 地址。要求每一行都要有注释。
数据库设计命名规则:
1, 物理表命名格式 前缀+“_”+对应的类名。部门操作员 Port_Emp, Port_Dept ,CH_CheckItem. WF_Flow,
2,视图命名格式。 “V_” + 前缀 + “_” +对应的类名。V_CH_CheckItemExt。
3, 存储过程命名规则“Pro_” + 前缀 + “_”+过程名称. 比如Pro_Sys_Init.
4, 函数命名规则 “Fun” + + 前缀 + “_”+函数名. 比如:Fun_Sys_GenerOID.
5, 外键字段命名规则 “FK_” +对应的物理表类名.
比如:在人员表(Port_Emp)中表示部门的字段 FK_Dept. 同事一看就知道,这个字段是外键,并且它的对应到Dept这个类的物理表上。