CN102831122B - 工作流表的数据保存方法、查询方法及装置 - Google Patents

工作流表的数据保存方法、查询方法及装置 Download PDF

Info

Publication number
CN102831122B
CN102831122B CN201110161141.8A CN201110161141A CN102831122B CN 102831122 B CN102831122 B CN 102831122B CN 201110161141 A CN201110161141 A CN 201110161141A CN 102831122 B CN102831122 B CN 102831122B
Authority
CN
China
Prior art keywords
flow
data
instance
node
workflow
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201110161141.8A
Other languages
English (en)
Other versions
CN102831122A (zh
Inventor
章向明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201110161141.8A priority Critical patent/CN102831122B/zh
Publication of CN102831122A publication Critical patent/CN102831122A/zh
Priority to HK13101116.2A priority patent/HK1174118A1/zh
Application granted granted Critical
Publication of CN102831122B publication Critical patent/CN102831122B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本申请公开了一种工作流表的数据保存方法、查询方法及装置,数据保存方法包括:预先设置工作流表;根据流程名称查找流程定义表,获取与流程名称对应的流程定义数据;解析流程定义数据,根据解析得到的流程描述数据启动流程实例;从流程实例的起始节点开始,按照流程描述数据运行流程实例;其中,在运行流程实例的过程中,将在流程节点上生成的活动数据作为数据记录保存到活动实例表中;以及,将运行流程实例过程的描述信息作为一条数据记录保存到流程实例表中,流程实例表与活动实例表具有相同的流程ID。本申请工作流执行的结果数据只需要保存到流程实例表和活动实例表中,因此数据记录保存方便,提高了工作流的运行性能。

Description

工作流表的数据保存方法、查询方法及装置
技术领域
本申请涉及数据库技术领域,特别是涉及一种工作流表的数据保存方法、查询方法及装置。
背景技术
工作流是业务过程的部分或整体在计算机应用环境下的自动化实现,其可以使多个参与者之间按照预定义的规则自动传递文档、信息或任务,从而实现某个预期的业务目标。
参见图1,为一种工作流的流程结构示意图,假设按照公司规定,员工出差申请借款的金额小于等于5000元,则需要主管审批,主管审批后由财务审批,最后将款项通过银行打款到员工的工资卡中;如果员工借款的金额大于5000元,则需要主管审批,主管审批后需要经理再次审批,经理审批后由财务审批,最后将款项通过银行打款到员工的工资卡中。其中,如果主管、经理或财务中任一方不同意,则需要发邮件告知员工。
在采用现有技术实现上述工作流设计时,需要采用JBPM3数据库中的三种类型的通用数据库表,包括流程配置类数据库表(共13张),流程运行类数据库表(共11张),角色权限数据库表(共8张)。另外,针对上述审批流程,需要存储申请人的loginId(注册ID)、申请人角色、申请人组织名称、申请人组织路径等业务信息,针对每个审批任务,需要记录处理人的loginID、计划处理人角色、计划处理人组织、计划处理人组织路径、预约时间、截止日期、接手时间、实际处理人相关信息等。为了记录上述信息,需要为审批流程再单独建立三张业务相关数据库表。
基于上述的数据库表设计,在运行相应的工作流时,至少需要关联4张数据库表,并且在工作流运行结束后,流程运行类数据库表的11张表中都会新增表项数据。现有技术在实现工作流过程中,由于数据库中的数据表数量较多,因此在进行流程节点查询时,需要关联多张数据表,导致关联查询速度较慢;并且由于数据表数量较多,因此在工作流完成时,需要在数据表中增加的表项数量较多,从而降低了工作流性能。
发明内容
本申请实施例提供了一种工作流表的数据保存方法、查询方法及装置,以解决现有工作流流程中涉及数据表数量较多,导致查询性能不高的问题。
为解决上述技术问题,本申请实施例提供一种工作流表的数据保存方法,是这样实现的:
一种工作流表的数据保存方法,预先设置工作流表,所述工作流表包括流程定义表、流程实例表和活动实例表,所述方法包括:
根据流程名称查找所述流程定义表,获取与所述流程名称对应的流程定义数据;
解析所述流程定义数据,根据解析得到的流程描述数据启动流程实例;
从所述流程实例的起始节点开始,按照所述流程描述数据运行所述流程实例;
其中,在运行所述流程实例的过程中,将在流程节点上生成的活动数据作为数据记录保存到所述活动实例表中;以及,
将运行所述流程实例过程的描述信息作为一条数据记录保存到所述流程实例表中,所述流程实例表与所述活动实例表具有相同的流程ID。
为解决上述技术问题,本申请实施例还提供一种工作流表的数据查询方法,是这样实现的:
一种工作流表的数据查询方法,用于对前述数据保存方法所保存的数据进行查询,包括:
获取查询条件,所述查询条件中包括流程ID和字段满足条件;
根据所述流程ID关联流程实例表和活动实例表,获得所述活动实例表中具有所述流程ID的数据记录;
根据所述字段满足条件筛选所述数据记录,将筛选出的数据记录作为查询结果记录。
为解决上述技术问题,本申请实施例提供一种工作流表的数据保存装置,是这样实现的:
一种工作流表的数据保存装置,包括:
预设单元,用于预先设置工作流表,所述工作流表包括流程定义表、流程实例表和活动实例表;
查找单元,用于根据流程名称查找所述流程定义表,获取与所述流程名称对应的流程定义数据;
解析单元,用于解析所述流程定义数据,根据解析得到的流程描述数据启动流程实例;
执行单元,用于从所述流程实例的起始节点开始,按照所述流程描述数据运行所述流程实例;
保存单元,用于在所述执行单元运行所述流程实例的过程中,将在流程节点上生成的活动数据作为数据记录保存到所述活动实例表中;以及,将运行所述流程实例过程的描述信息作为一条数据记录保存到所述流程实例表中,所述流程实例表与所述活动实例表具有相同的流程ID。
为解决上述技术问题,本申请实施例还提供一种工作流表的数据查询方法,是这样实现的:
一种工作流表的数据查询装置,用于对前述数据保存装置所保存的数据进行查询,包括:
获取单元,用于获取查询条件,所述查询条件中包括流程ID和字段满足条件;
关联单元,用于根据所述流程ID关联流程实例表和活动实例表,获得所述活动实例表中具有所述流程ID的数据记录;
筛选单元,用于根据所述字段满足条件筛选所述数据记录,将筛选出的数据记录作为查询结果记录。
由上述实施例可以看出,本申请实施例中预先设置流程定义表、流程实例表和活动实例表,根据流程名称查找流程定义表,获取与流程名称对应的流程定义数据,解析流程定义数据,根据解析得到的流程描述数据启动流程实例,从流程实例的起始节点开始,按照流程描述数据运行所述流程实例,在运行流程实例的过程中,将在流程节点上生成的活动数据作为数据记录保存到所述活动实例表中,以及将运行流程实例过程的描述信息作为一条数据记录保存到流程实例表中,流程实例表与活动实例表具有相同的流程ID。本申请实施例在执行工作流过程中,仅需涉及四张数据表,相应的工作流执行的结果数据只需要保存到流程实例表和活动实例表中,因此数据记录保存方便,提高了工作流的运行性能;在后续基于流程实例表和活动实例表进行数据查询时,也仅需要关联两张数据表,因此关联查询速度较快,相应提高了系统性能。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为一种工作流的流程结构示意图;
图2为本申请工作流表的数据保存方法的第一实施例流程图;
图3为本申请工作流表的数据保存方法的第二实施例流程图;
图4为本申请工作流表的数据保存方法的实施例流程图;
图5为本申请工作流表的数据保存装置的第一实施例框图;
图6为本申请工作流表的数据保存装置的第二实施例框图;
图7为本申请工作流表的数据查询装置的实施例框图。
具体实施方式
本申请如下实施例提供了一种工作流表的数据保存方法、查询方法及装置。
下面首先结合图1描述一下本申请工作流表的数据保存实施例中涉及的术语:
假设按照公司规定,员工出差申请借款的金额小于等于5000元,则需要主管审批,主管审批后由财务审批,最后将款项通过银行打款到员工的工资卡中;如果员工借款的金额大于5000元,则需要主管审批,主管审批后需要经理再次审批,经理审批后由财务审批,最后将款项通过银行打款到员工的工资卡中。其中,如果主管、经理或财务中任一方不同意,则需要发邮件告知员工。根据上述公司内部出差借款的流程对应示出图1中员工出差借款的工作流描述。
图1中,每一个业务活动定义为一个“节点”。例如,“财务审批”就是一个节点,该节点的完成需要人的参与,定义为任务节点;“银行打款”也是一个节点,该节点的完成不需要人的参与,定义为自动节点;“判断借款金额”也是一个节点,经过该节点后流程需要进行判断并根据判断结果进行分支,定义为判断节点。
图1中,用于连接节点的有向箭头线定义为“有向连接”,表示工作流从一个状态通过某种方式进入另一个状态。例如,在“财务审批”节点和“经理审批”节点之间存在一个名为“同意”的有向连接。
图1中,用于描述某一个业务流程的符号表示定义为“流程定义”,其是由节点和有向连接组成的静态文件。
图1中,某一次具体业务请求经过的节点实例定义为“活动实例”。例如,小王计划2010年10月15日去北京出差,申请借款7000元。小王于2010年10月14上午9点,在系统中提交“出差借款”的申请流程。主管于2010年10月14日上午10点审批,以此类推直至走完所有流程。其中,用于描述“主管审批”这一活动的为“活动实例”,活动实例包含该活动的开始时间、结束时间、计划处理人、实际处理人、预约时间等不同维度的描述信息。
图1中,某一次具体的业务请求过程中的各个活动实例组成一个“流程实例”。例如,仍然以小王计划2010年10月15日去北京出差为例,则在该流程实例中,如果最终审批通过,则整个流程实例包括开始节点“出差申请”活动实例,主管审批活动实例,判断借款金额活动实例,经理审批活动实例,财务审批活动实例,银行打款活动实例,结束节点活动实例。
图1中,某一次具体的业务请求过程中,在节点之间传递信息的数据定义为“上下文变量实例”,上下文变量实例可以通过(key,value)的对应关系进行保存,其中key为关键字,value为关键字的属性值。例如,图1中判断借款金额节点上的金额数即为该工作流的上下文变量实例,其中(key,value)为(loanAmounts,5000)。
现有技术对工作流表进行保存时,以任务节点为例,任务节点有单独的任务实例表和泳道实例表,而任务节点上执行的结果数据会保存在流程日志表和流程模块实例表中;而判断节点没有设置单独的表,其上执行的结果数据会保存到流程日志表和流程模块实例表中。由于现有工作流中不同类型的节点保存数据的方式有差异,没有建立统一的数据保存机制。因此,现有技术在执行完一个工作流后,需要采用大量的数据库表对结果数据进行保存,增加了数据库中工作流表的数量,且大量工作流表中还可能存储重复数据,例如,属于同一个工作流的各个工作流表中都要保存流程ID、流程版本号等;由于工作流表数量众多,因此也相应提高了后续查询过程中数据表之间的关联难度。
本申请实施例仅需要通过流程定义表、流程实例表、活动实例表和上下文变量实例表四张表即可完成工作流的执行过程,以及对工作流的结果数据进行保存,后续查询过程通常仅需关联流程实例表和活动实例表两张表即可实现对目标数据的查询。
为了使本技术领域的人员更好地理解本申请实施例中的技术方案,并使本申请实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本申请实施例中技术方案作进一步详细的说明。
参见图2,为本申请工作流表的数据保存方法的第一实施例流程图:
步骤201:预先设置工作流表,该工作流表包括流程定义表、流程实例表和活动实例表。
与现有技术相比,本申请实施例定义的工作流表数量大大减少。其中,本申请实施例仅需一张流程定义表,而现有技术中通用的JBPM3工作流解决方案中,从流程功能角度出发设置的流程定义表为13张。本申请流程定义表可以用bpm_lob表示,其中流程定义数据以XML的形式存储在一个CLOB类型的字段里。因此,本申请实施例在进行流程定义解析过程中,只需要查询一张表即可,该流程定义表的数据结构可以如下表1所示:
表1
需要说明的是,上表1中列出了所有可能的流程定义表中的字段,实际应用过程中可以根据需要选择需要的字段即可,例如,优选的,包括流程版本、流程名称、流程定义数据、流程定义图片等字段。
流程实例表,用于保存一个工作流的流程在执行完全过程后的描述信息,该流程实例表的数据结构可以如下表2所示:
表2
需要说明的是,上表2中列出了所有可能的流程实例表中的字段,实际应用过程中可以根据需要选择需要的字段即可,例如,优选的,包括流程ID、流程名称、流程实例的开始时间、结束时间、流程实例申请人、流程实例运行路径等。
活动实例表,用于保存一个工作流的流程在流程节点上生成的活动数据,该活动实例表的数据结构可以如下表3所示:
表3
需要说明的是,上表3中列出了所有可能的活动实例表中的字段,实际应用过程中可以根据需要选择需要的字段即可,例如,优选的,包括流程ID、活动实例的开始时间、结束时间、流程节点执行人名称。
前述表1至表3分别对流程定义表、流程实例表和活动实例表的数据结构进行了定义,以流程定义表为例,对于每一种类型的工作流,都按照该流程定义表的数据结构生成该类型工作流的流程定义表。例如,当工作流为借款流程时,则根据表1至表3定义的数据结构,生成该借款流程的流程定义表、流程实例表和活动实例表,当工作流为请假流程时,则根据表1至表3定义的数据结构,生成该请假流程的流程定义表、流程实例表和活动实例表。
步骤202:根据流程名称查找流程定义表,获取与该流程名称对应的流程定义数据。
上表1中,用于描述流程定义数据的字段为“PROCDEF_XML”,在根据所要运行的工作流的流程名称(PROCDEF_NAME)和流程版本(VERSION)从流程定义表中找到相应的流程定义记录后,打开该流程定义记录的PROCDEF_XML字段,即可获得存储的流程定义XML字符串。
步骤203:解析流程定义数据,根据解析得到的流程描述数据启动流程实例。
由于步骤202中查找到的流程定义数据为XML字符串,而XML字符串为静态数据,难以加载到系统内存中进行运行,因此本申请实施例将XML字符串转换为JAVA对象数据。转换时可以采用dom4j的XML解析技术,将XML文本内容转换成JAVA流程定义对象Jpd13ProcessDefinition,上述转换过程现有技术已经比较成熟,在此不再赘述。
在完成流程定义数据的解析后,得到由JAVA流程定义对象Jpd13ProcessDefinition标识的流程描述数据,以图1为例,流程描述数据即为一段对工作流从起始节点到结束节点的执行过程进行描述的程序语言。根据该流程描述数据启动流程实例。
在启动流程实例后,还可以进一步设置本工作流的流程实例中的普通上下文变量,该普通上下文变量可以通过上下文变量实例表进行保存,以图1为例,图1中判断借款金额节点上的金额数即为该工作流的上下文变量实例,其中上下文变量实例的数据表项(key,value)为(loanAmounts,5000)。该上下文变量实例表的数据结构可以如下表4所示:
表4
需要说明的是,上表4中列出了所有可能的上下文变量实例表中的字段,实际应用过程中可以根据需要选择需要的字段即可,例如,优选的,包括KEY_NAME字段和各种VALUE值字段。
进一步,当流程实例表中包括持久化标志字段“SAVE_SIGN”时,可以通过设置该字段的标志,控制哪些类型的流程节点所执行的结果数据可以作为数据记录保存到活动实例表中。例如,当标志为BPM_ALL时,则表示所有类型的流程节点的执行结果数据都保存到活动实例表中,当标志为BPM_INFO时,则表示将状态节点、任务节点、子流程节点、自动节点、开始节点、结束节点、规则节点的执行结果数据保存到活动实例中,当标志为BPM_WAIT时,则表示将状态节点、任务节点、子流程节点的执行结果数据都保存到活动实例表中,当标志为BPM_NONE时,则表示将所有节点的执行结果都不保存到数据库中;为了简化操作,上述所有标志都可以用数字标识,并且可以根据需要设置保存哪些类型的节点数据,而不局限于上述示例所示的保存方式。
步骤204:从流程实例的起始节点开始,按照流程描述数据运行流程实例,其中,将在流程节点上生成的活动数据作为数据记录保存到活动实例表中,以及将运行流程实例过程的描述信息作为一条数据记录保存到流程实例表中。
本申请实施例中,为了后续查询数据的方便,对于属于同一次工作流执行过程中的流程实例表和活动实例表中的数据记录具有相同的流程ID,以便在查询时通过该流程ID进行关联。
参见图3,为本申请工作流表的数据保存方法的第二实施例,该实施例结合图1所示的工作流,描述本申请实施例的数据保存过程:
步骤301:保存预先编写的流程定义表,该流程定义表中包括流程名称、流程描述信息、流程定义XML数据等字段。
在实际应用过程中,可以通过eclipse插件画出流程定义,以图1所示的出差借款工作流为例,其流程名称可以设置为“BusinessTripBorrowing”。将图1所示的工作流通过XML类型数据进行定义,定义内容具体如下:
将上述流程定义的XML数据保存到流程定义表中,本实施例中的流程定义表如下表5所示,其中仅示意性的示出了几个字段:
表5
  VERSION   PROCDEF_NAME   PROCDEF_MEMO   PROCDEF_XML
  1   BusinessTripBorrowing   出差借款申请   <CLOB>
  2   BusinessTripBorrowing   出差借款申请   <CLOB>
  3   BusinessTripBorrowing   出差借款申请   <CLOB>
  …   …    …   <CLOB>
上表5中,字段VERSION表示流程的版本号,字段PROCDEF_NAME表示流程名称,字段PROCDEF_MEMO表示流程描述信息,字段PROCDEF_XML中保存的就是前述流程定义数据的XML文件。表5中三个版本的BusinessTripBorrowing可以表示一个公司在不同时期的出差借款流程。
步骤302:当接收到用户触发的流程实例后,根据输入的流程名称和流程版本号查找流程定义表,获取相应的流程定义XML数据。
假设用户小王需要进行出差借款申请,则会触发相应的流程实例,其中可以通过SQL查询语句获取最新的出差借款流程,查询条件包括流程名称和流程版本号,假设本实施例中流程名称为“BusinessTripBorrowing”,版本号为“3”,则根据上述两个字段信息查找表5,定位到表5中的第三条数据记录,从中获取字段PROCDEF_XML下保存的流程定义XML数据。
步骤303:解析流程定义XML数据,将流程定义XML数据转换为通过内存执行的JAVA对象数据。
流程定义XML数据中保存了对流程实例的流程描述数据,即该流程实例所包含的节点以及节点之间的有向连接。以图1所示的工作流为例,流程描述数据即为对图1所示的流程从开始到结束的执行过程进行描述的数据。
可以采用dom4j的XML解析技术,将XML的文本内容转换为JAVA对象Jpd13ProcessDefinition,转换后的JAVA对象数据可以在内存中直接执行相应的流程实例。
步骤304:根据转换后的JAVA对象数据启动流程实例,设置流程实例表中的通用上下文变量字段,并设置持久化标志字段。
其中,通用上下文变量字段可以具体包括:值为“xiaowang”的“REQUEST_PERSONID”申请人ID字段,值为“小王”的“REQUEST_PERSONNAME”申请人名称字段,值为“BusinessTripBorrowing”的“DOC_TYPE”业务类型字段等。上面就示例性示出了几个通用上下文变量字段,实际应用过程中可以从表2中示出的通用上下文变量字段中进行选择,对此本申请实施例不进行限制。
持久化标志字段“SAVE_SIGN”用于控制哪些类型的流程节点所执行的结果数据可以作为数据记录保存到活动实例表中。例如,当标志为BPM_ALL时,则表示所有类型的流程节点的执行结果数据都保存到活动实例表中,当标志为BPM_INFO时,则表示将状态节点、任务节点、子流程节点、自动节点、开始节点、结束节点、规则节点的执行结果数据保存到活动实例中,当标志为BPM_WAIT时,则表示将状态节点、任务节点、子流程节点的执行结果数据都保存到活动实例表中,当标志为BPM_NONE时,则表示将所有节点的执行结果都不保存到数据库中;为了简化操作,上述所有标志都可以用数字标识,并且可以根据需要设置保存哪些类型的节点数据,而不局限于上述示例所示的保存方式。
本实施例中假设设置SAVE_SIGN字段的值为“BPM_ALL”,当启动该流程实例后,为该流程实例分配唯一的流程ID,假设本实施例中的流程ID为“9791134”。
步骤305:查找流程实例的起始节点,将在起始节点生成的活动数据作为一条数据记录保存到活动实例表中。
如图1所示,本实施例中的流程实例的起始节点为“出差申请”,该“出差申请”对应一个活动实例,假设该活动实例ID为“9791135”。则活动实例表中对应该“出差申请”节点的活动实例的数据记录可以如下表6所示:
表6
需要说明的是,上述表6由于示例的是活动实例表中的一条数据记录,因此其以纵向方式列出了字段名称,并对字段名称进行了解释;实际在执行完所有实例流程后,活动实例表通常以横向方式列出字段名称,即每一行对应于一个节点的数据记录,在后续步骤中将对此进行示例说明。另外,如前表3中示出了活动实例表中可能包含的所有字段名称,而上表6中为了示例方便,仅列举了其中的一些字段进行说明,当实际应用的工作流表类型不同时,本实施例并不用于对其进行限制。
步骤306:按照起始节点的有向连接的指示,查找该起始节点的下一个节点为主管审批节点。
步骤307:将主管执行审批动作后的活动数据作为主管审批节点的数据记录保存到活动实例表中。
主管审批节点为一个任务节点,所执行的具体动作就是将任务分配给主管,等待主管审批。在等待过程中以及接收到主管审批操作后,流程实例数据和活动实例数据都需要分别进行保存。
其中,在等待过程中,流程实例数据保存到流程实例表,如下表7所示:
表7
  字段   字段值
  ID   9791134
  GMT_MODIFIED   2011-4-28下午03:26:26
  PROOCDEF   BusinessTripBorrowing#3
  PROC START_TIME   2011-4-28下午03:26:26
  PROCEND_TIME
  REQUEST_PERSONID   xiaowang
  REQUEST_PERSONNAME   小王
  SAVE_SIGN   BMP_ALL
  LINE_NOTE   出差申请->主管审批
在整个活动实例执行结束前,上表7中会发生变化的字段主要为“LINE_NOTE”字段,其记录了当前流程实例的路径信息,即记录流程实例运行到哪一个节点。
在等待过程中,活动实例数据保存到活动实例表,如下表8所示:
表8
  字段   字段值
  ID   9791136
  PROCINST   9791134
  GMT_MODIFIED   2011-4-28下午03:26:26
  START_TIME   2011-4-28下午03:26:26
  END_TIME
  NODE_TYPE   TaskActivity
  NODE_NAME   主管审批
  COL2   Borrowing_Director
  APPROVAL_ID
  APPROVAL_NAME
  APPROVAL_VOTE
上表8记录了在运行到“主管审批”节点的等待过程中,该节点上活动实例表中对应数据记录的初始值,由于还未得到主管的审批结果数据,因此字段“END_TIME”、“APPROVAL_ID”、“APPROVAL_ID”和“APPROVAL_VOTE”都为空值。
假设主管执行审批结果为“同意”,则该“主管审批”节点的活动实例表中的数据记录可以如下表9所示:
表9
  字段   字段值
  ID   9791136
  PROCINST   9791134
  GMT_MODIFIED   2011-4-28下午03:26:26
  START_TIME   2011-4-28下午03:26:26
  END_TIME   2011-4-29下午04:40:02
  NODE_TYPE   TaskActivity
  NODE_NAME   主管审批
  COL2   Borrowing_Director
  APPROVAL_ID   zhangsan
  APPROVAL_NAME   张三
  APPROVAL_VOTE   同意
步骤308:按照主管审批节点的有向连接指示,查找该主管审批节点的下一个节点为判断借款金额节点。
执行“判断借款金额”节点后的活动数据保存到活动实例表中,如下表10所示:
表10
  字段   字段值
  ID   9791145
  PROCINST   9791134
  GMT_MODIFIED   2011-4-29下午04:40:02
  START_TIME   2011-4-29下午04:40:02
  END_TIME
  NODE_TYPE   DecisionConditionActivity
  NODE_NAME   判断借款金额
  COL2   Borrowing_DecisionMoney
  APPROVAL_ID
  APPROVAL_NAME
  APPROVAL_VOTE
由于当前节点“判断借款金额”不需要等待过程,因此上表10中已经列出了结束时间,即上表10即为该“判断借款金额”节点的活动实例表中的最终数据记录。
步骤309:获取与判断结果对应的判断借款金额节点的有向连接指示,查找该判断借款金额节点的下一个节点为经理审批节点。
假设小王申请的金额为7000元,则判断借款金额节点判断该金额大于5000元,因此有向连接指示的下一个节点为经理审批节点。
步骤310:将经理执行审批动作后的活动数据作为经理审批节点的数据记录保存到活动实例表中。
在本步骤中,流程实例表中数据记录与表7的不同在于,其中字段“LINE_NOTE”的值为“出差申请->主管审批->判断借款金额->经理审批”,在此不再通过列表示出。
相应的,假设经理的审批结果为“同意”,则该“经理审批”节点的活动实例表中的数据记录可以如下表11所示:
表11
  字段   字段值
  ID   9791146
  PROCINST   9791134
  GMT_MODIFIED   2011-4-29下午05:23:49
  START_TIME   2011-4-29下午04:40:02
  END_TIME   2011-4-29下午05:23:49
  NODE_TYPE   TaskActivity
  NODE_NAME   经理审批
  COL2   Borrowing_Manager
  APPROVAL_ID   lisi
  APPROVAL_NAME   李四
  APPROVAL_VOTE   同意
步骤311:按照经理审批节点的有向连接指示,查找该经理审批节点的下一个节点为财务审批节点。
步骤312:将财务执行审批动作后的活动数据作为财务审批节点的数据记录保存到活动实例表中。
在本步骤中,流程实例表中数据记录与表7的不同在于,其中字段“LINE_NOTE”的值为“出差申请->主管审批->判断借款金额->经理审批->财务审批”,在此不再通过列表示出。
相应的,假设财务的审批结果为“同意”,则该“财务审批”节点的活动实例表中的数据记录可以如下表12所示:
表12
  字段   字段值
  ID   9791147
  PROCINST   9791134
  GMT_MODIFIED   2011-4-29下午05:31:59
  START_TIME   2011-4-29下午05:23:49
  END_TIME   2011-4-29下午05:32:00
  NODE_TYPE   TaskActivity
  NODE_NAME   财务审批
  COL2   Borrowing_Finance
  APPROVAL_ID   wangwu
  APPROVAL_NAME   王五
  APPROVAL_VOTE   同意
步骤313:按照财务审批节点的有向连接指示,查找该财务审批节点的下一个节点为银行打款节点。
步骤314:将执行银行打款节点后的活动数据保存到活动实例表中。
由于银行打款节点是一个自动节点,其无需执行等待过程,因此流程实例在该节点不停留,执行此节点后的活动实例表中的数据记录可以如下表13所示:
表13
  字段   字段值
  ID   9791148
  PROCINST   9791134
  GMT_MODIFIED   2011-4-29下午05:32:00
  START_TIME   2011-4-29下午05:32:00
  END_TIME   2011-4-29下午05:32:00
  NODE_TYPE   CustomActivity
  NODE_NAME   银行打款
  COL2   Borrowing_MadeAMoney
  APPROVAL_ID
  APPROVAL_NAME
  APPROVAL_VOTE
步骤315:按照银行打款节点的有向连接指示,查找该银行打款节点的下一个节点为结束节点。
步骤316:将结束节点后的活动数据保存到活动实例表中,结束当前流程。
执行结束节点后的活动实例表中的数据记录可以如下表14所示:
表14
  字段   字段值
  ID   9791149
  PROCINST   9791134
  GMT_MODIFIED   2011-4-29下午05:32:00
  START_TIME   2011-4-29下午05:32:00
  END_TIME   2011-4-29下午05:32:00
  NODE_TYPE   EndActivity
  NODE_NAME   结束
  COL2   Borrowing_End
  APPROVAL_ID
  APPROVAL_NAME
  APPROVAL_VOTE
执行完上述流程实例后,流程实例表中的最终数据记录如下15所示:
表15
而活动实例表以横表形式汇总了前述表6、表9至表14中的7条数据记录。需要说明的是,前述实施例为了示例清楚每个活动实例的数据记录,通过表6、表9至表14分别示出了7个活动实例的7条数据记录,实际应用中,每个活动实例的数据记录直接以横表表项的形式写入到活动实例表的一条数据表项中。
从上述实施例可见,本申请在执行工作流过程中,相应的工作流执行的结果数据只需要保存到流程实例表和活动实例表中,因此数据记录保存方便,提高了工作流的运行性能;在后续基于流程实例表和活动实例表进行数据查询时,也仅需要关联两张数据表,因此关联查询速度较快,相应提高了系统性能。
参见图4,为本申请工作流的数据查询方法的实施例流程图,该数据查询方法用于对前述实施例中的数据保存方法所保存的流程实例表和活动实例表中的数据进行查询:
步骤401:获取查询条件,该查询条件中包括流程ID和字段满足条件。
本实施例中的数据查询基于前述数据保存实施例中所保存的数据记录,主要为流程实例数据表和活动实例数据表。该查询数据的操作可以在流程实例的执行过程中进行,因为数据记录是实时更新保存的,也可以在流程实例结束后进行查询。
以在流程实例执行过程中进行数据查询操作为例,仍然结合图1示例,假设当前流程实例执行到主管审批节点,正在等待主管审批,而申请人小王想要查询当前流程实例执行到哪一个节点,并且希望输出的查询结果数据中包括节点名称、审批人名称、流程ID。则输入的查询条件中可以包括该流程实例的流程ID,例如“9791134”,以及需要显示的字段名称,由于要查询当前执行到哪一个节点,因此字段满足条件可以设置“结束时间”字段的值为空,因为该字段为空的数据记录,表示相应的节点还未执行完操作,即可以定位到流程实例当前所在的节点。
步骤402:根据流程ID关联流程实例表和活动实例表,获得活动实例表中具有该流程ID的数据记录。
由于流程ID可以唯一标识一个流程实例,因此通过流程ID可以关联属于同一流程实例的活动实例表中的数据记录,即从该活动实例表中查找出当前所有流程ID为“9791134”的数据记录。
步骤403:根据字段满足条件筛选数据记录,将筛选出的数据记录作为查询结果记录。
在活动实例表中所有流程ID为“9791134”的数据记录中,根据设置的字段满足条件“结束时间为空”,可以找到相应的一条数据记录,即当前所执行到的主管审批节点对应的数据记录,进一步,根据需要显示的字段名称,将筛选出的主管审批节点数据记录中的相应字段的内容输出即可。
与本申请工作流表的数据保存方法和查询方法的实施例相对应,本申请还提供了工作流表的数据保存装置和查询装置的实施例。
参见图5,为本申请工作流表的数据保存装置的第一实施例框图:
该数据保存装置包括:预设单元510、查找单元520、解析单元530、执行单元540和保存单元550。
其中,预设单元510,用于预先设置工作流表,所述工作流表包括流程定义表、流程实例表和活动实例表;
查找单元520,用于根据流程名称查找所述流程定义表,获取与所述流程名称对应的流程定义数据;
解析单元530,用于解析所述流程定义数据,根据解析得到的流程描述数据启动流程实例;
执行单元540,用于从所述流程实例的起始节点开始,按照所述流程描述数据运行所述流程实例;
保存单元550,用于在所述执行单元运行所述流程实例的过程中,将在流程节点上生成的活动数据作为数据记录保存到所述活动实例表中;以及,将运行所述流程实例过程的描述信息作为一条数据记录保存到所述流程实例表中,所述流程实例表与所述活动实例表具有相同的流程ID。
参见图6,为本申请工作流表的数据保存装置的第二实施例框图:
该数据保存装置包括:预设单元610、设置单元620、查找单元630、解析单元640、执行单元650、判断单元660和保存单元670。
其中,预设单元610,用于预先设置工作流表,所述工作流表包括流程定义表、流程实例表、活动实例表和设置上下文变量实例表,其中所述上下文变量实例表用于保存所述流程实例的普通上下文变量,所述普通上下文变量的保存形式为关键字和属性值的对应关系,所述关键字包括流程节点中判断节点的判断值,所述上下文变量实例表与所述流程实例表具有相同的流程ID;
设置单元620,用于预先设置需要保存数据记录的流程节点的类型;
查找单元630,用于根据流程名称查找所述流程定义表,获取与所述流程名称对应的流程定义数据;
解析单元640,用于解析所述流程定义数据,根据解析得到的流程描述数据启动流程实例,其中解析所述流程定义数据具体为将XML类型的流程定义数据转换为JAVA对象数据;
执行单元650,用于从所述流程实例的起始节点开始,按照所述流程描述数据运行所述流程实例,其中具体包括从所述起始节点开始,按照流程节点之间的有向连接的指示,顺序从当前流程节点执行到下一个流程节点,直至结束节点;
判断单元660,用于当所述流程实例运行到每一个流程节点时,判断所述流程节点的类型是否为预先设置的流程节点的类型;
保存单元670,用于在所述执行单元650运行所述流程实例的过程中,当所述判断单元的判断结果为是,则将在流程节点上生成的活动数据作为数据记录保存到所述活动实例表中;以及,将运行所述流程实例过程的描述信息作为一条数据记录保存到所述流程实例表中,所述流程实例表与所述活动实例表具有相同的流程ID。
参见图7,为本申请工作流表的数据查询装置的实施例框图,该数据查询装置用于对前述实施例中的数据保存装置所保存的流程实例表和活动实例表中的数据进行查询:
该数据查询装置包括:获取单元710、关联单元720和筛选单元730。
其中,获取单元710,用于获取查询条件,所述查询条件中包括流程ID和字段满足条件;
关联单元720,用于根据所述流程ID关联流程实例表和活动实例表,获得所述活动实例表中具有所述流程ID的数据记录;
筛选单元730,用于根据所述字段满足条件筛选所述数据记录,将筛选出的数据记录作为查询结果记录。
通过对以上实施方式的描述可知,本申请实施例中预先设置流程定义表、流程实例表和活动实例表,根据流程名称查找流程定义表,获取与流程名称对应的流程定义数据,解析流程定义数据,根据解析得到的流程描述数据启动流程实例,从流程实例的起始节点开始,按照流程描述数据运行所述流程实例,在运行流程实例的过程中,将在流程节点上生成的活动数据作为数据记录保存到所述活动实例表中,以及将运行流程实例过程的描述信息作为一条数据记录保存到流程实例表中,流程实例表与活动实例表具有相同的流程ID。本申请实施例在执行工作流过程中,仅需涉及四张数据表,相应的工作流执行的结果数据只需要保存到流程实例表和活动实例表中,因此数据记录保存方便,提高了工作流的运行性能;在后续基于流程实例表和活动实例表进行数据查询时,也仅需要关联两张数据表,因此关联查询速度较快,相应提高了系统性能。
本领域的技术人员可以清楚地了解到本申请实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述的本申请实施方式,并不构成对本申请保护范围的限定。任何在本申请的精神和原则之内所作的修改、等同替换和改进等,均应包含在本申请的保护范围之内。

Claims (12)

1.一种工作流表的数据保存方法,其特征在于,预先设置工作流表,所述工作流表包括流程定义表、流程实例表和活动实例表,其中,所述流程实例表,用于保存一个工作流的流程在执行完全过程后的描述信息,所述活动实例表,用于保存一个工作流的流程在流程节点上生成的活动数据,所述方法包括:
根据流程名称查找所述流程定义表,获取与所述流程名称对应的流程定义数据;
解析所述流程定义数据,根据解析得到的流程描述数据启动流程实例,其中,所述流程描述数据为一段对工作流从起始节点到结束节点的执行过程进行描述的程序语言;
从所述流程实例的起始节点开始,按照所述流程描述数据运行所述流程实例;
其中,在运行所述流程实例的过程中,将在流程节点上生成的活动数据作为数据记录保存到所述活动实例表中;以及,
将运行所述流程实例过程的描述信息作为一条数据记录保存到所述流程实例表中,所述流程实例表与所述活动实例表具有相同的流程ID。
2.根据权利要求1所述的方法,其特征在于,所述流程定义表中的字段包括:流程版本、流程名称、流程定义数据、流程定义图片;
所述流程实例表中的字段包括:流程ID、流程名称、流程实例的开始时间、结束时间、流程实例申请人、流程实例运行路径;
所述活动实例表中的字段包括:流程ID、活动实例的开始时间、结束时间、流程节点执行人名称。
3.根据权利要求1所述的方法,其特征在于,所述流程定义数据为XML类型数据;
所述解析所述流程定义数据具体为:将所述XML类型的流程定义数据转换为JAVA对象数据。
4.根据权利要求1所述的方法,其特征在于,所述按照所述流程描述数据运行所述流程实例包括:
从所述起始节点开始,按照流程节点之间的有向连接的指示,顺序从当前流程节点执行到下一个流程节点,直至结束节点。
5.根据权利要求1所述的方法,其特征在于,还包括:
预先设置需要保存数据记录的流程节点的类型;
当所述流程实例运行到每一个流程节点时,判断所述流程节点的类型是否为预先设置的流程节点的类型;
当判断结果为是,则保存在所述流程节点上生成的活动数据,否则,不保存在所述流程节点上生成的活动数据。
6.根据权利要求1所述的方法,其特征在于,还包括:
预先设置上下文变量实例表,用于保存所述流程实例的普通上下文变量,所述普通上下文变量的保存形式为关键字和属性值的对应关系,所述关键字包括流程节点中判断节点的判断值,所述上下文变量实例表与所述流程实例表具有相同的流程ID。
7.根据权利要求1所述的方法,其特征在于:所述活动实例表以横表的形式保存所述流程节点上生成的活动数据。
8.一种工作流表的数据保存装置,其特征在于,包括:
预设单元,用于预先设置工作流表,所述工作流表包括流程定义表、流程实例表和活动实例表,其中,所述流程实例表,用于保存一个工作流的流程在执行完全过程后的描述信息,所述活动实例表,用于保存一个工作流的流程在流程节点上生成的活动数据;
查找单元,用于根据流程名称查找所述流程定义表,获取与所述流程名称对应的流程定义数据;
解析单元,用于解析所述流程定义数据,根据解析得到的流程描述数据启动流程实例,其中,所述流程描述数据为一段对工作流从起始节点到结束节点的执行过程进行描述的程序语言;
执行单元,用于从所述流程实例的起始节点开始,按照所述流程描述数据运行所述流程实例;
保存单元,用于在所述执行单元运行所述流程实例的过程中,将在流程节点上生成的活动数据作为数据记录保存到所述活动实例表中;以及,将运行所述流程实例过程的描述信息作为一条数据记录保存到所述流程实例表中,所述流程实例表与所述活动实例表具有相同的流程ID。
9.根据权利要求8所述的装置,其特征在于,所述解析单元具体用于,将XML类型的流程定义数据转换为JAVA对象数据。
10.根据权利要求8所述的装置,其特征在于,所述执行单元具体用于,从所述起始节点开始,按照流程节点之间的有向连接的指示,顺序从当前流程节点执行到下一个流程节点,直至结束节点。
11.根据权利要求8所述的装置,其特征在于,还包括:
设置单元,用于预先设置需要保存数据记录的流程节点的类型;
判断单元,用于当所述流程实例运行到每一个流程节点时,判断所述流程节点的类型是否为预先设置的流程节点的类型;
所述保存单元,具体用于当所述判断单元的判断结果为是,则保存在所述流程节点上生成的活动数据。
12.根据权利要求8所述的装置,其特征在于,所述预设单元,还用于预先设置上下文变量实例表,用于保存所述流程实例的普通上下文变量,所述普通上下文变量的保存形式为关键字和属性值的对应关系,所述关键字包括流程节点中判断节点的判断值,所述上下文变量实例表与所述流程实例表具有相同的流程ID。
CN201110161141.8A 2011-06-15 2011-06-15 工作流表的数据保存方法、查询方法及装置 Active CN102831122B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201110161141.8A CN102831122B (zh) 2011-06-15 2011-06-15 工作流表的数据保存方法、查询方法及装置
HK13101116.2A HK1174118A1 (zh) 2011-06-15 2013-01-25 工作流表的數據保存方法、查詢方法及裝置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110161141.8A CN102831122B (zh) 2011-06-15 2011-06-15 工作流表的数据保存方法、查询方法及装置

Publications (2)

Publication Number Publication Date
CN102831122A CN102831122A (zh) 2012-12-19
CN102831122B true CN102831122B (zh) 2015-07-15

Family

ID=47334265

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110161141.8A Active CN102831122B (zh) 2011-06-15 2011-06-15 工作流表的数据保存方法、查询方法及装置

Country Status (2)

Country Link
CN (1) CN102831122B (zh)
HK (1) HK1174118A1 (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104021460B (zh) * 2014-06-27 2018-07-10 北京太格时代自动化系统设备有限公司 一种工作流程管理系统及工作流程处理方法
CN105183447A (zh) * 2015-07-13 2015-12-23 国云科技股份有限公司 一种轻量级的流程引擎实现方法
CN105447626A (zh) * 2015-11-12 2016-03-30 东软集团股份有限公司 一种工作流变量存储方法及装置、读取方法及装置
CN106897806A (zh) * 2015-12-17 2017-06-27 北京奇虎科技有限公司 工作流程创建方法和系统、业务系统
CN105608561A (zh) * 2016-01-12 2016-05-25 浪潮通用软件有限公司 一种处理邮件的方法及装置
CN107783879B (zh) * 2016-08-29 2021-04-20 阿里巴巴集团控股有限公司 一种用于分析工作流执行路径的方法与设备
CN108255467A (zh) * 2016-12-27 2018-07-06 北京京东尚科信息技术有限公司 按照工作流顺序执行服务的方法、装置及系统
CN107861765B (zh) * 2017-06-26 2020-11-17 平安普惠企业管理有限公司 产品配置方法、设备和计算机可读存储介质
CN107909488A (zh) * 2017-11-10 2018-04-13 平安科技(深圳)有限公司 保险理赔流程的处理方法及装置
CN110400116A (zh) * 2018-04-24 2019-11-01 优信拍(北京)信息科技有限公司 一种基于企业办公流转审批的处理方法,装置及系统
CN110764817A (zh) * 2019-09-27 2020-02-07 北京字节跳动网络技术有限公司 一种获取流程实例的方法、装置、介质和电子设备
CN111461656A (zh) * 2020-03-31 2020-07-28 上海星移软件有限公司 一种业务流程管理系统的流程数据处理方法及装置
CN114881613A (zh) * 2022-06-01 2022-08-09 北京字跳网络技术有限公司 一种数据处理方法、装置、电子设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101533491A (zh) * 2009-04-14 2009-09-16 河北全通通信有限公司 自由流转流程的实现方法
CN101727624A (zh) * 2009-12-17 2010-06-09 中国电力科学研究院 一种展现任务列表的方法及系统
CN102043625A (zh) * 2010-12-22 2011-05-04 中国农业银行股份有限公司 一种工作流运行方法及系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101533491A (zh) * 2009-04-14 2009-09-16 河北全通通信有限公司 自由流转流程的实现方法
CN101727624A (zh) * 2009-12-17 2010-06-09 中国电力科学研究院 一种展现任务列表的方法及系统
CN102043625A (zh) * 2010-12-22 2011-05-04 中国农业银行股份有限公司 一种工作流运行方法及系统

Also Published As

Publication number Publication date
HK1174118A1 (zh) 2013-05-31
CN102831122A (zh) 2012-12-19

Similar Documents

Publication Publication Date Title
CN102831122B (zh) 工作流表的数据保存方法、查询方法及装置
Motro et al. Fusionplex: resolution of data inconsistencies in the integration of heterogeneous information sources
CN104750681B (zh) 一种海量数据的处理方法及装置
US8782096B2 (en) Virtual repository management
US20070073691A1 (en) Server side filtering and sorting with field level security
US7444344B2 (en) Method to increase subscription scalability
JP2006505863A (ja) 電子的ドキュメントレポジトリーマネジメントおよびアクセスシステム
AU2005239366A1 (en) Partial query caching
CN108509437A (zh) 一种ElasticSearch查询加速方法
CN107943952A (zh) 一种基于Spark框架进行全文检索的实现方法
US20090182770A1 (en) Personalization of contextually relevant computer content
US20080065608A1 (en) Implicit context collection and processing
Wylot et al. Executing provenance-enabled queries over web data
JP2004110219A (ja) データ処理システム及びジョイン処理方法
US8965879B2 (en) Unique join data caching method
US20050044076A1 (en) Information retrieval from multiple sources
KR20180077830A (ko) 비공유 아키텍처 기반의 분산 스트림 처리 엔진에서 관계형 질의를 처리하는 방법, 이를 수행하기 위한 기록 매체 및 장치
US9852166B2 (en) Task handling in a multisystem environment
CN106940715B (zh) 一种基于索引表的查询的方法及设备
US9305066B2 (en) System and method for remote data harmonization
CN115239060A (zh) 基于大数据分析的适航审定风险评定系统及其方法
US20050197845A1 (en) Business workbook precalculation
US8103677B1 (en) Searching using object linked enterprise system
Hsu et al. Aggregated search over personal process description graph
US20100169266A1 (en) Data-overlap analysis for a data-warehousing system

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 1174118

Country of ref document: HK

C14 Grant of patent or utility model
GR01 Patent grant
REG Reference to a national code

Ref country code: HK

Ref legal event code: GR

Ref document number: 1174118

Country of ref document: HK