zoukankan      html  css  js  c++  java
  • 一种业务系统与工作流系统数据交换的方式

    一种业务系统与工作流系统数据交换的方式

    工作流系统作为业务系统的业务流程驱动支撑,提供必要的工作流基本功能,如任务提交,撤回,挂起,终止,获取待办事项,路由计算等等。除此之外,还提供流程图设计,参与人指定等流程定义功能。以上工作不可避免地用到业务系统的数据,比如根据业务数据(借款单)的数据进行路由判断,计算审核人等。工作流引擎如何获取业务系统的数据呢?

    独立的工作流系统
    一个设计良好的工作流系统应该是和业务系统的低耦合的,是独立于业务系统的。因此要定义双方的数据交换协议和规则。

    独立的含义是,一方面要提供标准或默认的流程设计界面,比如路由条件定义界面,参与人(审核人)指定条件。另一方面在需要时,可以根据约定的协议和规则访问业务系统的数据。
    协议的类型有很多种,web服务,RPC,文件系统,比较实用并简单的是数据库访问协议。直白讲就是让工作流系统直接访问业务系统的数据库,约定数据库表的格式。并通过自定义函数和流程变量来增加系统的易用性,使得直接用户可以定义工作流。

    流程变量和函数
    流程变量和函数同编程语言中的变量类似,稍有不同的是这里的变量会对应一段计算逻辑。这个计算逻辑可能是一段SQL语句,Java代码。
    函数有参数,同变量类似,也有一段代码,不同的是,函数有参数,变量没有。变量的值和函数由流程引擎负责解释。在实战中,实施人员定义流程变量和函数,屏蔽数据复杂性,用户使用函数和变量定义路由逻辑和参与者逻辑。在实际中,流程变量一般用来存放单据上的数据项,函数可以用来计算流程参与者。
    记录类型的流程变量
    考虑到流程变量的值大多来自某个表的同一条记录,我们可以设计一种叫“记录”的结构(数据类型),记录的每个成员可以对应表的某个列。具体实现时,一个sql语句,就可以把所有的成员(列)的值取过来,这样可以提高系统的性能。

    流程变量和函数的作用域
    变量和函数分两个作用范围:系统级和流程级。前者在所有流程中都可使用,后者只能在定义它的流程中使用。

    内置变量
    流程系统有几个内置变量,交易号,业务系统ID。前者用来获得业务系统的交易实例数据,计算流程变量时使用。交易号的例子:单据号。业务系统ID用来区分不同的外部业务系统,因为流程系统是独立的,可以同时为多个外部系统提供工作流服务,有必要通过业务系统id进行区分。
    业务系统在调用工作流服务时,必须传入这两个变量的值。

    变量和函数的属性
    变量的属性有:类型,计算逻辑,变量说明。类型可以是简单类型,如字符串,数字,也可以是业务类型,如借款单号,员工号。
    函数的属性:函数名,返回值类型,参数,逻辑。
    函数参数的属性:数据类型。
    定义数据类型的目的有两个,一是在定义路由表达式或参与者表达式时根据类型匹配变量,提高易用性,二是可以做表达式校验。

    下面是流程变量的例子:

    作用范围  变量名称 变量类型 变量说明 计算逻辑
    流程 申请人工号 工号 借款单申请人编号。 select app_emp from hr_loan_request where req_id = :tran_id
    流程 申请金额   数字 借款申请金额。 select app_amount from hr_loan_request where req_id = :tran_id
    系统 交易ID  字符串 内置变量,流程实例关联的业务系统交易号。 业务系统在启用流程时传入 
    系统 系统ID 字符串 内置变量,业务系统的代号。当工作流系统独立部署时,用于区分服务的业务系统。  业务系统在启用流程时传入,不可修改
    系统 用户ID 字符串 内置变量 业务系统在启用流程时传入,不可修改
             
             

    流程函数的例子

    流程函数的例子
    作用范围 函数名称 返回值类型 函数说明 计算逻辑
    流程 biz_role user 根据传入的业务角色名称和组织机构,返回用户编号,以逗号分隔 select user_no from hr_pr_biz_role where role_name =:p_rolename and org= :p_org
             
             
             

    变量和函数定义
    流程系统提供变量和函数定义功能,该功能的使用对象是实施人员。这是工作流系统的标准功能。在这个功能里,提供可视化的界面,供实施人员定义变量和函数,以及其属性。
    变量和函数的逻辑支持多种,比如SQL,webService,RPC,程序集内部调用等等。我们可以先实现最简单的:SQL。

    定义路由条件和参与者条件
    工作流引擎另外一个比较重要的功能就是定义路由条件,和参与者表达式。
    路由条件定义在“边”上,决定流程的走向。路由条件是个逻辑表达式(logical-exp),它的返回时是 true 或者 false;
    参与者表达式用来运算某个节点上的活动(activity)由谁参与,参与者表达式的结果是用户集合或者角色集合。流程引擎根据运算结果,生成用户的待办任务,业务系统通过工作流接口取得某个用户的待办任务。
    工作流系统提供可视化的定义界面。无论是路由条件还是参与者表达式,都只能是使用流程变量和函数作为表达式项。系统可以提供表达式编辑器,函数表达式编辑器,流程变量和函数枚举界面,提高易用性。
    这个功能的目标用户是直接用户和实施人员。

    表达式解析和函数运算
    表达式的项除了流程变量就是流程函数,解析自然不成为问题,求值也是毛毛雨了。

  • 相关阅读:
    古人诗词之王安石
    关于周期函数的命题
    Strum—Lioville问题
    计算反常积分
    【面积原理】计算级数和
    【洛谷P6046】纯粹容器
    【洛谷P3631】方格染色
    【牛客挑战赛48 E】速度即转发
    【CF103D】Time to Raid Cowavans
    【洛谷P4280】逆序对
  • 原文地址:https://www.cnblogs.com/senline/p/9887413.html
Copyright © 2011-2022 走看看