BPM 是业务流程管理的简称,以下记录最近在设计一个 BPM 流程的一些梳理。

PAAS平台工作流&审批流定义

工作流:可自定义的一种自动执行的工作流程,由表单数据发生改变时触发,同时关联多种不同的事物。 审批流 :可自定义的一种流程审批,需要用户手动批示是否进入下一步,触发审批流程规则需要满足审批申请人和数据筛选条件。

审批流:审批流定义节点用来为某个具体的业务单据或某个具体单据的一个业务类型进行审批流程的定义。被定义了审批流程的单据将按照定义的审批流程被传递和审批。这一完整的过程就称为审批流。

完整的审批(工作)流程

一套完整的审批流程、工作流程大体上包括:

  1. 流程定义;
  2. 步骤定义:触发规则;操作人;执行动作(发起申请、撤回);执行操作(任务通知、邮件提醒、字段更新、转移数据、转换表单、传送接口);
  3. 步骤重复:触发规则;操作人(串行/并行);执行动作:(审批处理:通过、拒绝(退回、否决)、撤回);执行操作:同意、拒绝同时包括(任务通知、邮件提醒、字段更新、转移数据、转换表单、传送接口);
  4. 流程结束;

数据库表结构设计(参考一)

  1. 流程定义表AFlowTable(ID,流程编码,创建时间,创建人,流程名称,启用状态,锁定状态,撤销状态);

    • 锁定状态:审批结束锁定表单;

    • 撤销状态:是否允许撤销;

  2. 流程节点图形位置图AFlowPointXY(ID,流程ID–flowid,节点ID–pointid,X坐标值–xvalue,Y坐标值–yvalue)

    • pointid的值:-1为开始,0为结束。
  3. 步骤信息表AFlowPoint(ID,主流程ID–flowid(表1id),节点ID–pointid(表2节点id),节点类型–pointtype,上一级节点–SuperiorPoint,节点名称–PointName,关联表单–RelationTable,进入条件–EnterCondition,是否人工操作–ManualOperation,执行动作–ExecuteMovement,操作内容–OperateContent)

    • 主流程ID–flowid:流程定义表–ID;

    • 节点ID–pointid流程节点图形位置图–节点ID;

    • 节点类型:过程为1,多路节点为0;

    • 多人审批的时候,ManualOperation=1,0 全部通过、一个通过。

  4. 节点执行条件AFlowPointEnterCondition(节点ID–PointID,顺序号–OrderID,表单表名–TableName,表单字段–ConditionSign,条件符–ConditionSign,条件值–ConditionValue,连接条件–TiaoJian)

  5. 执行人AFlowPointOperatePersonnel(节点ID–PointID,人员类型–PersonnelType,数据ID–DataID)

  6. 执行动作(审批处理)AFlowStateUpdate(节点ID–PointID,状态更新ID–UpdateID,操作类型–[OperateType],更新标题–[UpdateTitle],更新表单–[UpdateTable],更新字段–[UpdateField],更新值–[UpdateValue])

  7. 执行操作(表单转换1)AFlowTableSwitch(节点ID–[PointID],表单转换ID–[TableSwitchID],操作类型–[OperateType],关联表单–[RelationTable],表单转换名称–[TableSwitchName],生成表单–[CreateTable])

  8. 执行操作(表单转换2)AFlowTableSwitchCharsMap(ID–,表单转换ID–[TableSwitchID],源表单名–[SourceTable],源字段–[sourceField],目标表名–[TargetTable],目标字段–[TargetField])

  9. 执行操作AFlowInventoryfunction([ID],[flowPointId],[title],[functionsName],[OperateType])

  10. 表单提交审批AFlowExecuteTable([ExecuteID]–执行ID,[FlowCode]–流程编码,[FlowID]–流程ID,[FlowName]–流程名称,[ExecuteType]–执行状态,[PostTime]–提交时间,[Proposer]–提交时间,[Proposer]–申请人,[proposerID]–申请人ID)

  11. 执行审批表:AExecutePoint([ExecuteID]–执行ID,[ExecutePointID]–执行节点ID,[PointID]–节点ID,[PointType]–节点类型,[SuperiorExecutePointID]–上级执行节点ID,[PointName]–节点名称,[RelationTable]–关联表单,[EnterCondition]–进入条件,[ManualOperation]–是否人工操作,[OperateTime]–操作时间,[ExecuteAction]–执行动作,[ExecuteContent]–执行内容,[RealityExecutePerson]–实际执行人,[RealityExecutePersonID]–实际执行人ID,[ExamineResult]–审批结果,[ExamineRemark]–审批备注,[OverTime]–完成时间)

    • [ExecuteID]–对应AFlowTable表的id,[ExecutePointID]–对应AFlowPoint表的id
  12. 审批关联信息表AExecutePointRelationTable([ExecutePointID]–执行节点ID,[RelationType]–关联类型,[TableName]–表单名称,[TableID]–表单ID)