senline

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2019年1月16日 基于公司开发平台的开发规范之工作流。

 

所谓业务流程,是指多人多岗,协同处理一个业务事项。每个流程划分多个阶段,也称为多个环节,每个人或者每个岗位,在其中所处的环节不同,处理的数据、所做的工作不同,权限也不同。但最终的目的都是把事情完成。流程是企业规章制度的固化,一般流程环节是固定的,但是会根据事项内容的不同,外部条件的变化,跳过,或者走的路径有差别。

一、流程环节
一个流程由多个环节构成,每个环节的工作由不同的角色来负责。环节与环节之间是路径,通过路径将环节连接起来。环节在流程上术语为节点。

二、流程任务
不同的环节所做的工作各不相同,我们称之为节点任务。
在具体实现上,体现为,在同一个表单上录入或修改的数据不同,甚至使用不同的表单。流程环节上的工作可能手工来做,也可能是调用一个自动化程序。手工做的工作比如人事薪酬专员输入员工薪酬数据,社保专员输入社保基数。自动化任务,比如创建员工邮箱账号,生成ftp账号等等。手工任务需要用户在客户端上打开一个表单,自动化任务,在服务器上调用一个程序代码。同一个环节可能同时有手工任务和自动化任务。对有自动话任务的,还要考虑退回时,取消自动任务所做的修改,也就是undo功能。

三、节点任务配置
前面提到不同环节可能输入的数据不同,因此还要在环节上能配置修改哪些数据项,隐藏哪些数据项,要有配置功能。工作流系统无法实现较复杂的配置功能,因为它根本就不知道如何来做,因此业务系统应该提供配置界面,工作流只要提供调用的入口,在流程配置的时候调用就可以了(问题 ,如果工作流系统和业务系统独立部署的话,工作流配置程序如何调用业务系统提供的配置界面呢?不考虑独立部署的情况)。
简单说,每个环节完成一个或多个任务。完成什么任务,需要在节点上配置:一种情况是配置 功能编号,功能参数(手工任务);一种是配置程序,和参数(自动任务)。
在配置参数的时候,要定义参数的映射关系。

四、任务参数
任何任务都有参数(手动任务的表单,和自动任务的程序方法)。就像一个java方法要有参数一样,参数需要在打开表单或调用方法的时候,传进去。
到底传入什么参数,需要在流程上进行配置。
为了方便实施人员配置流程参数,对每个任务需要的参数,要进行定义。
同样,每个任务的输出参数也需要定义。因为上一个任务的输出,可能就是下一个任务的输入,参数定义实质上是完成参数的映射,实现数据在节点之间传递。
其实我们现在做的流程,每个任务都有一个参数,就是单据ID。因为我们的流程所有节点的任务,都是处理一个单据,也只能处理一个单据。这是比较常见的一种应用场景。

五、路由
简单的流程是所有环节串行执行,没有分支,复杂的流程是个网状的,节点之间通过路径相连。分支通过路径条件判断,只有路径条件为真的才会通过。比如借款单,会根据借款额走不同的流程,超过10000的,需要总经理审批,否则只要分管经理审批即可。这就需要根据借款额度进行路由判断。

六、参与人
节点上的任务,需要流程参与人来做。不同的节点参与人可能不同,比如入职流程中,录入薪酬需要薪酬主管,录入社保数据,由社保主管来做,创建账号,有it管理员来做,领用设备到资产管理员处领用。
也有同一个节点,会根据具体数据的不同有不同的角色来做,比如领用资产这个节点,如果是开发人员,需要领用笔记本电脑,由管理笔记本电脑的岗位来做,如果是维修工人,需要领用维修工具,则需要不同的资产管理员来发放。所有配置节点的参与人,也需要写条件。

七、条件
路由需要条件,参与人需要条件,条件表达式的计算因子,来自 流程处理的数据本身,比如借款单上的借款额,入职单上的岗位类型;还来自任务的处理结果返回值,比如创建邮箱失败后,需要通知it管理员,根据创建邮箱自动任务的执行返回值,路由到通知节点上去;还来自于系统的变量,等等。

八、如何适应所有的应用场合
适应所有的客户是不可能的。你不可能枚举出未来客户的个性化需求。
1、我们能做的就是,尽量抽象过程,针对每种流程抽象出通用的节点固化在系统中,并在实施中不断积累发展。比如入职流程:录入信息,派遣确定入职部门,确认薪酬,社保,领用办公设施,分配内部账号,签订合同等。
2、对客户的个性化需求,我们可以通过定制任务列表的方式来实现。对每个流程由客户定义流程待办列表,并分配不同待办的办理岗位,权限,需要输入的数据项。
3、以上两种方式都不能解决,只能个性化开发。

九、大流程的概念
大流程的概念基于协同的理念,不同环节的工作内容不同的理念,甚至的大相径庭。
大流程有个统一的事项ID
每个节点可以定制不同的表单,打开不同的功能,但是表单和这个事项ID有关系
所有的挂在这个事项ID下的表单,组成了整个事项的数据模型。
能通过这个事项ID,访问所有的单据的数据。

十、子流程
子流程可以简化流程配置,满足流程的个性化。
子流程有两类:基于业务类型的子流程 和 基于组织架构的子流程。
1,基于工作内容的子流程
基于工作内容的子流程可以理解为单纯是为了简化流程设计。
比如一个节点是入职流程中的设备领用,领用时,设备管理员可能需要发起一个设备发放单,设备发放单有独立的流程,那么我们可以直接吧设备发放单的流程嵌入到入职流程中。
2,基于组织架构的子流程
这种子流程的主要目的是解决流程的个性化。
在一个集团企业中,如果出现跨机构的流程,在某些环节,不同的单位的流程可能不同,每个单位都需要定义适合本单位的流程节点。比如借款流程中,有个节点是 部门内部审批,A部门有2个节点, B部门有3个节点。那么部门内部审批的子流程就不止一个版本,有几个部门就有几个版本,流程引擎要根据部门不同,加载不同的子流程。显然,这个子流程和上面的子流程要复杂的多。引擎要能定义,调用子流程的逻辑条件,比如,当部门=A时,调用子流程A,当部门是B时,调用子流程B。除了根据单位不同,调用不同的流程外,也可能会根据其他条件来判断,比如业务类型,总之是根据某个数据来决定。

十一、总结
1、流程就是工作环节的集合
2、理论上每个环节的任务各不相同,可能需要配置不同的表单,不同的程序,但一般是一个单据到底,所有环节都是同一个单子,只不过能操作的数据项不同;
3、通过参数映射,在节点之间传递数据。如果所有环节都是一个单据的话,只要传递单据号就OK了。这也是我们当前的流程对传递参数的认识不是很深的原因。

posted on 2021-09-10 15:40  森蓝2010  阅读(106)  评论(0编辑  收藏  举报