十、业务流程实例

  业务流程运行框架中的业务流程引擎(ProcessEngine)解析业务流程定义,其运行的结果就是生成业务流程实例。业务流程实例是个泛指,其实它真正包含了流程实例(ProcessInstance)和每个活动环节的任务(Task)两部分的数据。其中流程实例(ProcessInstance)是每次启动流程生成一个,而活动环节的任务(Task)则是每次流转,回退和转发时都会为流向活动环节生成的。所以它们是一个流程实例(ProcessInstance)包含多个任务(Task)的关系。

1 流程实例和任务

  由于流程实例(ProcessInstance)和任务(Task)的绝大多数属性是都一样的,所以在数据库中,它们都是存入到任务表(SA_Task)。两种数据使用SCATALOGID和SKINID字段组合来区分。所以流程实例(ProcessInstance)本质上也是任务(Task),一种特殊类型的任务(Task)。
任务类型 sCataLogID sKindID
流程实例(ProcessInstance) tsProcess tkProcessInstance
流程任务(Task) tsProcess tkTask
协同任务(Task) tsTask tkTask
  由于每一条任务只能描述一个创建者和一个执行者,所以当一条任务需要多个执行者共同处理时就需要为这条任务生成与执行者数量等量的子任务。当一条任务只需要一个执行者来处理时则就不需要生成子任务。
任务类型 sCataLogID sKindID
流程任务(Task) tsProcess tkTask
流程任务的子任务(Task) tsProcess tkExecutor
流程通知(Task) tsProcess tkNotice
协同任务(Task) tsTask tkTask
同任务的子任务(Task) tsTask tkExecutor
  任务其实本质就是一个通知,用来通知执行者处理相关事务。它包含创建者,接收者,时间和相关单号等信息。一条任务被执行者处理完毕以后还可以把它再发给其他执行者处理,则在任务间就会形成前后关系。任务本身是存入任务表的,而任务的关系是存入任务关系表。

2 Task对象

  任务在概念上使用SA_Task描述,而概念本身只负责数据的存取和数据的规则,在代码中操作起来并不方便所以扩展出Task对象。Task对象描述任务的基本信息和任务见的父子和前后信息。
  业务流程运行体系的代码都是基于Task对象来写的,其中在业务流程引擎中扩展的ProcessInstance和ActivityInstance对象其实内部实现都是Task对象。
  在需要在代码中生成任务时,推荐的方案是创建Task对象然后创建一个TaskEngine对象来保存它们。当然也可以直接使用SQL语句插入任务表。

3 任务表(SA_Task)

  任务表用来存储任务,这里的任务是个泛指,其实是包含了流程实例,待办任务,多人处理,协同任务等等信息都被存入了任务表。

*任务表结构
  在任务表结构中各个字段就不一一列举了,详细结构可以查看SA_Task的概念定义。在这里要特别说明的是其中一些重要字段的定义和取值范围。
字段名 描述
sID 任务唯一标识
sVars 流程变量
sSubProcess 子流程标识
sSubPI 子流程实例
sProcessVersion 流程版本
sCode 编号
sParentID 父任务ID
sName 任务标题,在任务相关页面和任务中心显示用
sContent 审批意见
sSign 签名信息
sRemark 处理情况
sSummary 摘要
sFlowID 任务所属流程实例的ID,如果当前记录本身就是流程实例,则它的值和SID的值相等
sSourceID 只有在回退时用到,用来记录新生成的回退的待办任务是基于此执行者原始的哪条待办任务的
sFrontID 回退时记录的前序任务ID
sExecuteMode2 任务的回退模式,取值范围是flowToAgain(重新流转)、flowToFront(原路返回)、flowToFrontOrAgain(重新流转或原路返回)
sExecuteMode 任务的执行模式,取值范围是temPreempt(抢占),temSequential(顺序),temSimultaneous(同时)
sPreemtMode 任务的抢占模式,取值范围是tpmOpen(打开时),tpmExecute(处理时)
sCatalogID 任务的大类标识,tsProcess为流程任务,tsTask为协同任务
sKindID 任务的类型细分标识,tkProcessInstance为流程实例,tkTask为任务,tkExecutor为执行者
sTypeID 任务类型ID
sTypeName 任务类型
sImportanceID 重要性ID
sImportanceName 重要性
sEmergencyID 紧迫度ID
sEmergencyName 紧迫度
sProcess 任务属于哪个业务过程,存储业务过程的URL,一般只有属于流程的任务会给这个关系赋值
sActivity 任务属于哪个业务环节,存储业务环节的ID,一般只有属于流程的任务会给这个关系赋值
sCURL 一般存储的是创建此任务的activity的URL,创建者用它来浏览任务详细
sEURL 存储的是处理此任务的activity的URL,执行者用它来查看详细和处理待办任务
sCreateTime 创建时间
sDistributeTime 发布时间
sLastModifyTime 最后修改时间
sWarningTime 警告时间
sLimitTime 限制时间
sLimitSecond 限制时间(秒)
sRemindTime 提醒时间
sRemindInterval 提醒间隔时间
sLastRemindTime 最后提醒时间
sExpiredProcessMode 超时处理方式
sRemindChannel 提醒方式
sExpectStartTime 预计开始时间
sExpectFinishTime 预计结束时间
sActualStartTime 开始时间
sActualFinishTime 结束时间
sExecuteTime 处理时间
sCreatorPersonID 提交者的ID
sCreatorPersonName 提交者的姓名
sCreatorPosID 提交者的岗位ID
sCreatorPosName 提交者的岗位名称
sCreatorDeptID 提交者的部门ID
sCreatorDeptName 提交者的部门名称
sCreatorOgnID 提交者的机构ID
sCreatorOgnName 提交者的机构名称
sCreatorFID 提交者的FID
sCreatorFName 提交者的FName
sExecutorPersonID 执行者的ID
sExecutorPersonName 执行者的姓名
sExecutorPosID 执行者的岗位ID
sExecutorPosName 执行者的岗位名称
sExecutorDeptID 执行者的部门ID
sExecutorDeptName 执行者的部门名称
sExecutorOgnID 执行者的机构ID
sExecutorOgnName 执行者的机构名称
sExecutorFID 执行者的FID
sExecutorFName 执行者的FName
sExecutorNames 执行者列表,逗号分隔
sActivityNames 当前活动环节
sResponsible 负责人
sCustomerID 客户ID
sCustomerCode 客户编码
sCustomerName 客户
sProjectID 项目ID
sProjectCode 项目编码
sProjectName 项目
sPlanID 计划ID
sPlanCode 计划编码
sPlanName 计划
sData1 存储业务单据的关键字
sData2 存储业务单据的关键字
sData3 存储业务单据的关键字
sData4 存储业务单据的关键字
sStatusID 任务状态,取值范围是tesReady(尚未处理),tesExecuting(正在处理),tesSleeping(暂缓处理),tesCanceled(已取消),tesAborted(已终止),tesFinished(已完成),tesReturned(已回退),tesTrainsmited(已转发),tesPaused(已暂停)
sStatusName 任务状态
sAIID 环节实例
sAIStatusID 环节状态ID,只有在属于流程的待办任务会用到,值默认为NULL,外界不需要维护
sAIStatusName 环节状态
sAIActive 环节激活
sSequence 序号
sLock 编号
sHints 提示
sShortcut 快捷操作
sRemindMode 提醒模式
version 版本
sWithdraw 回收标记
sVariable 存储变量名和值
sProcessName 流程名称
sActivityName 环节名称
sProcessTemplateID 流程模板
sProcessTemplateItemSequence 流程模板序号
sTempPermissionID 临时权限
sActivityInTemplate 模板2
sProcessTemplateID2 环节2
sPICreatorPersonName 流程发起人
sESField01 - sESField54 用户扩展字段

4 任务关系表(SA_TaskRelation)

  任务关系表用来存储任务间的前后关系,可以认为它是任务表的从表。当一条任务真的具有前序任务或后序任务时在任务关系表中才会有相关关系的维护。
  任务关系表中sTaskID1表示前面的待办任务sTaskID2表示后面的待办任务。sKind字段用来描述关系类型,目前没有使用。
  任务关系表的字段在这就不一一列举了,详细的表结构可以查看SA_TaskRelation概念的定义。

5 Token表(SA_TokenInstance)

  Token表用来存储业务流程底层算法PetriNet中产生的Token。一般的业务流程和协同任务都不会用到Token,所以Token表也不需要被外界所关注,因为业务流程本身做到了只要具有待办任务就可以进行任意操作而不需要依赖Token。Token表是任务表的从表,它的sProcessInstanceID字段对应于在任务表中存储的业务流程实例的SID。

*Token表结构
  Token表的字段在这就不一一列举了,只列举一些重要的字段和描述。详细的表结构可以查看SA_TOKEN概念的定义。
字段名 描述
sID Token唯一标识
sProcessInstanceID Token所属的流程实例的ID,记录的值是表示流程实例的那条任务的ID
sProcess Token所属的业务过程,这里存储业务过程的URL
sPlace Token所属的Place,这里存储Place的ID
sFromActivity Token是由哪个Activity产生的,这里存储Activity的ID
sFromActivityInstanceID Token是由哪个任务产生的,记录任务的ID
sToActivity Token是被哪个Activity消耗的,这里存储Activity的ID
sToActivityInstanceID Token是被哪个任务消耗的,记录任务的ID
sValue Token的值
sActive 标识Token是否被消耗,取值范围是true和false

6 ProcessControl表(SA_ProcessControl)

  某个执行者在做流转操作时选择了目标执行者,他下次再基于相同的活动环节做流转操作时,系统会默认选择上次他选择的执行者。此特性的实现是因为业务流程引擎在每次操作的时候都把ProcessControl的内容给保存到ProcessControl表里了,以备下次操作时可以还原当初的一些选择。

*ProcessControl表结构
  ProcessControl表的字段在这就不一一列举了,只列举一些重要的字段和描述。详细的表结构可以查看SA_ProcessControl概念的定义。
字段名 描述
sID 唯一标识
sOperatorID 操作者ID,标识ProcessControl属于哪个操作者
sProcess 标识ProcessControl在哪个业务过程做操作时产生的,这里存储业务过程的URL
sActivity 标识ProcessControl在哪个业务环节做操作时产生的,这里存储业务环节的ID
sAction 标识ProcessControl在做什么操作时产生的
sContent ProcessControl的内容,这里存储的值是基于ProcessControl对象的XML格式

results matching ""

    No results matching ""

    results matching ""

      No results matching ""