工作流模型
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Activity
LeaveActivity(ActivityInstance):离开节点实 例。
UserActivity
UserSelector:人员选择器。 CreateInstance:创建用户节点实例。用户节点实例下有工作项, 每一个工作项对应一个用户。 工作项可以并行全部处理,并行X/100处理,可以顺序处理,可 以单一处理。 并行全部处理:完成数量必须等于输入数量。 并行X/100处理:完成数量/输入数量 >=X/100。 顺序处理:完成数量必须等于输入数量。 单一处理:完成数量为1。 因此,UserActivity必须有CreatedWorkItemCount(创建工作数 量),CompletedWorkItemCount(完成工作数量), OverflowWorkItemCount(溢出工作数量)。
流程实例
流程状态:未处理、处理中、已结束 入口节点:支持在多个入口节点中选择一个作 为流程实例的入口节点。选择权归程序,但程 序只能通过传参选择流程,因为流程只根据参 数确定入口节点。
节点要处理的任务
表单填写
节点查询
根据状态、业务类型、名称查询。
节点实例查询
节点动作
创建后动作 开始处理动作 提交后动作
目标节点实例进入
目标节点实例指向指定的目标节点,同时也既 定了用户选择方式。 不同类型的目标节点,Enter方法的处理是不 一样的。 目标节点实例关联一组选择的用户。这些用户 可能采取:分工处理、竞争处理等不同方式处 理业务。工作流不管人员分工,
目标节点实例进入
业务节点实例:Enter方法仅设置节点状态为“等待处 理”。 分流节点实例:Enter方法将立即调用分流节点的提交 动作(分流节点内置两个动作:提交动作、回退动 作)。 合流节点实例:每一个合流前的分支在调用合流节点 的Enter方法时,都只是增加计数。当计数达到分支数 量时,将自动执行合流节点的提交动作(合流节点内 置两个动作:提交动作、回退动作)。
Event
过程、节点有一些内置的事件,如:节点进入、 节点离开、工作项进入、工作项离开。 过程、节点可以注册新的事件,这些事件必须 由程序设计人员通过编码来触发。 Actions:ActionCollection,注册的动作列表。
业务节点提交-节点人员选择器
人员选择器是对编程人员暴漏的一个接口。因 为人员选择往往和部门等业务因素有关系,工 作流引擎无法预知,所以需要暴漏接口给编程 人员做具体处理。 编程人员要开发人员选择器,根据当前传递过 来的参数做人员选择。 所需参数为动作传递过来的。 人员选择器需要注册到节点上。
业务节点提交
顺序提交动作:需要设置目标路径。提交时,根据目 标路径,找到目的节点,提取目标节点的用户,然后 为每个用户新建目标节点实例,再调用目的节点实例 的Enter方法执行进入该节点的操作。 分支提交动作:需要设置多个目标路径,在每个路径 上设置条件表达式。提交时,按顺序调用路径的条件 表达式,分析验证是否符合条件,如果符合条件,则 返回选择路径,找到目的节点,提取目标节点的用户, 然后为每个用户新建目标节点实例,再调用目的节点 实例的Enter方法执行进入该节点的操作。
ProcessDefinition
Id:编号 Name:名称 Version:版本号,int。 CreateTime:创建时间。 CreateUserId:创建人ID。 ProviderClassName:接口类名称。
Activity
Id:编号 Name:名称 Transaction:True\False,是否启动事务。 TransitionSelector:路径选择器 GetOutputTransitions(activityId):TransitionCollection,取得预 定义的输出的流转路径。 GetInputTransitions(activityId): TransitionCollection,取得预 定义的输入的流转路径。 CreateInstance:创建节点实例,是个虚方法。
节点动作列表
流程实例
流程实例:工作流实例下是节点实例。 节点实例:节点实例下是工作项,当节点有多个符合 条件的用户时,就会出现多个工作项。 工作项:多个工作项的处理方式:某一个工作项被处 理就全部结束,所有工作项完成才结束,完成一定比 率才结束。工作项不能够控制流程流转,流程流转的 控制权在节点实例上。因此工作项Submit将调用节点 实例来进一步处理。这样做是防止多个工作项创建多 个下级节点实例,从而导致流程混乱。
流程实例
两个工作项只能触发一次下级节点实例的建立。
流程实例
节点实例记录工作项数量(WorkItemCount),匹配计数(CheckWorkItemCount), 单选的为1,全选的为所有人员,任选N个的为N。 已经完成数量(CompletedWorkItemCount) 节点动作:处理,回退 主办人:
自动跟踪节点处理
创建流程
创建
英文词
ProcessDefinition:过程定义 ProcessInstance:过程实例 Activity:活动节点 StartActivity:开始活动节点 EndActivity:结束活动节点 ActivityDefinition:活动节点定义 ActivityInstance:活动节点实例 Transition: WorkItem WorkItemCollection Signal:处理
UserActivity
பைடு நூலகம்
CompleteWorkItem:完成工作项。设置工作 项状态为“Completed”, CompletedWorkItemCount 加1,当 CompletedWorkItemCount >= OverflowWorkItemCount时,调用 LeaveActivity方法。 CancelWorkItem:取消工作项。设置工作项 状态为“Canceled”, CompletedWorkItemCount 减1,
Transition
Condition:条件。 FromActivityId:开始节点Id。 FromActivity:开始节点。 ToActivityId:到达节点Id。 ToActivity:到达节点。 Execute():执行。取得开始节点的所有 OutputTransition,然后调用TransitionSelector选择 Transition ,再调用Transition的创建到达的 ActivityInstance
工作流模型
姚洪波
工作流定义
工作流名称 工作流状态:启用、暂停、废弃。 创建时间 创建人 节点列表:
工作流定义
授权人员列表:人、可查看、可编辑、可运行。
节点
ID、名称、过程ID、类型
节点类型
业务节点:支持顺序、分支、任选、全选路由 分流节点:只支持全选路由 合流节点:只支持顺序路由 自动化节点:支持顺序、分支、任选、全选路 由
业务节点提交
“不同意”、“同意”是动作名称。因此提交 是执行指定的动作。 GetActionInstance(int nodeInstanceId,string actionName); GetActionInstances(int nodeInstanceId); ActionInstance actionInstance = GetActionInstance(“不同意”); actionInstance.Execute();
业务开始处理
开始处理时,前台需要加载节点的相关配置。
–
–
资源:加载业务处理需要的相关资源。 动作:业务处理动作决定流向,指定的动作提交时 需要传递相关参数,在校验条件满足时,才能提交。 一个动作可以对应个多个流向,比如“同意”这个 动作,在和项目有关时,提交项目经理,否则提交 部门经理。
业务节点提交
连接实例
连接两个节点实例,指示节点实例的先后顺序, 同时用于回退。 连接类型:正常、回退、无参照。
连接实例查询
查询节点实例的后继链接实例:select * from SW_LINKS where FromNodeId=123 order by CreateNo
节点动作
发送E-MAIL通知。 发送短信通知。
节点上可以建立一个或多个动作。 每一个动作对应一种路由方式。路由方式可以 是:顺序、分支、任选、并发。 目标节点可以是:业务节点、分流节点、合流 节点。
业务节点提交
同样是同意,与项目有关就走A路径,与项目无关就走B路径 A
B
如果是不同意,走回退连接。只要节点支持回退,就 有一个回退连接。
动作的参数在动作执行时用于选择目标节点, 同时也用于选择目标用户。 动作的参数有:流程实例全局参数、动作实例 内部参数
业务节点提交-节点人员选择器
包中可以注册人员选择器。人员选择器是一个类。可 以为节点指定人员选择器。动作执行时,选择路径, 既选择目标节点,也就知道了目标节点的人员选择器。 这是将调用人员选择器,返回要提交的人员。 包中的人员选择器如果被使用,则不能被删除。 返回的人员列表,仍然可以再次编辑,可以设置哪些 人不提交。但是不可以提交的人不能设置为可以提交。 如果没有特别指定人员选择器,系统使用角色人员选 择器。
业务节点提交-动作预演
动作预演前,需要传递正常参数,但该参数不 会被保存,而是放在参数池里。因此动作需要 绑定一个参数池,参数池有两种:持久化参数 池,内存参数池。 动作预演需要调用Preview方法。系统自动返 回流转类型、目标节点列表以及每一个节点的 目标用户列表。
业务节点提交-动作的参数
业务节点提交
SequenceActionInstance actionInstance; actionInstance.Execute(); OrBranchActionInstance actionInstance; actionInstance.Parameters[“项目ID”] = projectId; actionInstance.Parameters[“DepartmentId”] = departmentId; actionInstance.Execute();
业务节点提交
任选提交动作:需要设置多个目标路径,在每个路径 上设置条件表达式。提交时,按顺序调用路径的条件 表达式,分析验证是否符合条件,如果符合条件,则 返回选择路径,找到目的节点,提取目标节点的用户, 然后为每个用户新建目标节点实例,再调用目的节点 实例的Enter方法执行进入该节点的操作。 全选提交动作:需要设置多个目标路径。提交时,按 顺序调用执行各个路径。对于每个路径,找到目的节 点,提取目标节点的用户,然后为每个用户新建目标 节点实例,再调用目的节点实例的Enter方法执行进入 该节点的操作。
业务节点提交
流程流转过程中的数据需要存储在独立的地方。 流程流转的条件判断不会到业务数据库中提取 数据。 这样做有如下几个好处: 外界数据变化不会导致无法看清流程当时数据。 降低条件判断数据提取难度。
业务节点提交
NodeInstance nodeInstance = processInstance.GetNodeInstance(string nodeInstanceId);// nodeInstanceId在Page中注册为缓 存变量 nodeInstance. GetActionInstance(string actionName);// actionName为用户选择的动作名称。 actionInstance.Parameters[“项目ID”] = projectId;// projectId来自于办理业务的单据或选择参数。