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)由谁参与,参与者表达式的结果是用户集合或者角色集合。流程引擎根据运算结果,生成用户的待办任务,业务系统通过工作流接口取得某个用户的待办任务。
    工作流系统提供可视化的定义界面。无论是路由条件还是参与者表达式,都只能是使用流程变量和函数作为表达式项。系统可以提供表达式编辑器,函数表达式编辑器,流程变量和函数枚举界面,提高易用性。
    这个功能的目标用户是直接用户和实施人员。

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

  • 相关阅读:
    Python元组、列表、字典
    测试通过Word直接发布博文
    Python环境搭建(windows)
    hdu 4003 Find Metal Mineral 树形DP
    poj 1986 Distance Queries LCA
    poj 1470 Closest Common Ancestors LCA
    poj 1330 Nearest Common Ancestors LCA
    hdu 3046 Pleasant sheep and big big wolf 最小割
    poj 3281 Dining 最大流
    zoj 2760 How Many Shortest Path 最大流
  • 原文地址:https://www.cnblogs.com/senline/p/9887413.html
Copyright © 2011-2022 走看看