CN115562842A - 一种基于Activiti的流程交互方法及系统 - Google Patents
一种基于Activiti的流程交互方法及系统 Download PDFInfo
- Publication number
- CN115562842A CN115562842A CN202211405745.7A CN202211405745A CN115562842A CN 115562842 A CN115562842 A CN 115562842A CN 202211405745 A CN202211405745 A CN 202211405745A CN 115562842 A CN115562842 A CN 115562842A
- Authority
- CN
- China
- Prior art keywords
- sub
- flow
- main
- processes
- main process
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于Activiti的流程交互方法及系统,本发明所述方法通过基于流程设计器中配置的主流程启动子流程的方式,启动主流程和子流程;主流程流转过程中备份当前主流程节点信息;主流程通过多线程的方式启动多个子流程;在子流程端备份主流程信息;在主流程端记录子流程启动结果信息;子流程失败补发;其中,所述主流程是基于Activiti的主流程;所述子流程是基于Activiti的子流程,包括单个或多个跨流程引擎的外部子流程;实现了主流程可以启动单个或多个跨流程引擎的外部子流程的目的,使流程间的交互更加灵活,满足复杂的业务需求。
Description
技术领域
本发明属于工作流技术领域,具体涉及一种基于Activiti的流程交互方法及系统。
背景技术
随着业务系统日趋复杂,目前单个流程模板局限性大,很难满足业务系统流程之间的处理逻辑,Acitiviti是使用嵌入子流程流程元素<subProcess>内嵌在主流程元素<process>之内,只能在该流程中使用该子流程,外部是无法访问到的。这种子流程一般作为局部通用逻辑处理,或者因为特定业务需要,但是不能用于跨流程引擎的流程交互。
发明内容
为解决现有技术中的不足,本发明提供一种基于Activiti的流程交互方法及系统,实现了主流程可以启动单个或多个跨流程引擎的外部子流程的目的,使流程间的交互更加灵活,满足复杂的业务需求。
为达到上述目的,本发明所采用的技术方案是:
第一方面,提供一种基于Activiti的流程交互方法,包括:基于流程设计器中配置的主流程启动子流程的方式,启动主流程和子流程;主流程流转过程中备份当前主流程节点信息;主流程通过多线程的方式启动多个子流程;在子流程端备份主流程信息;在主流程端记录子流程启动结果信息;子流程失败补发;其中,所述主流程是基于Activiti的主流程;所述子流程是基于Activiti的子流程,包括单个或多个跨流程引擎的外部子流程。
进一步地,流程设计器中配置的主流程启动子流程的方式,具体为:在流程设计器中,对子流程活动进行属性设置,包括:是否需要启动多个子流程、同步还是异步方式、当前流程引擎的流程系统url地址、跨流程引擎的子流程系统url地址。
进一步地,通过流程设计器的子流程活动图元设置当前流程图需要与远程在其他节点部署的基于Activiti系统中的流程交互的属性信息,属性信息包括:子流程类型、调用方式、子流程名称、本地服务url、目标服务的url。
进一步地,主流程流转过程中备份当前主流程节点信息,具体为:当前主流程节点信息,包括主流程引擎地址、主流程流程实例ID、主流程当前执行ID、关联的业务表单数据;当前主流程节点信息保存到哈希表中,作为启动子流程的入参;主流程引擎地址在流程设计器中的子流程活动属性设置中有具体的url地址,获取该url地址,进行保存;主流程流程实例ID和主流程当前执行ID,即为当前流程的基本属性;关联的业务表单数据即为当前的主流程关联的表单中,需要与子流程表单属性进行同步的属性。
进一步地,主流程通过多线程的方式启动多个子流程,具体为:在流程设计器中的子流程活动属性中设置跨流程引擎的子流程系统url地址,多个地址之间用“;”分隔;创建设定数目的线程池,通过多线程调用启动远程子流程的方法,启动多个子流程,并获取每个子流程的启动结果。
进一步地,通过流程设计器设置的目标服务url地址的个数,通过多线程的方式启动外部子流程,由于需要等待线程的执行结果,所以选用Future的线程任务模式,此任务模式实现了有返回值的Callable接口,用于获取到该线程任务的返回值。
进一步地,在子流程端备份主流程信息,具体为:将主流程流转过程中备份的当前主流程节点信息,在子流程引擎系统中,以子流程能识别的变量名称,存储到子流程的标量表中。
进一步地,在主流程端记录子流程启动结果信息,具体为:获取主流程通过多线程的方式启动多个子流程的返回结果,统计启动外部子流程的成功的数目,以变量的形式记录启动成功的数量;在主流程通过多线程的方式启动多个子流程后,将当前主流程的执行ID、流程编码、子流程的url地址、启动成功的子流程实例ID、启动结果、报错信息记录到子流程实例表中。
进一步地,子流程失败补发,具体为:主流程通过多线程的方式启动多个子流程的过程中,如果存在失败的子流程需要补发,需要从在主流程端记录的子流程启动结果信息中取得当前主流程启动失败的所有子流程列表,对这些失败的子流程重新启动,如果成功,那么更新子流程实例表中对应记录的启动结果。
第二方面,提供一种基于Activiti的流程交互系统,包括处理器和存储设备,所述存储设备中存储有多条指令,用于所述处理器加载并执行第一方面所述方法的步骤。
与现有技术相比,本发明所达到的有益效果:本发明通过基于流程设计器中配置的主流程启动子流程的方式,启动主流程和子流程;主流程流转过程中备份当前主流程节点信息;主流程通过多线程的方式启动多个子流程;在子流程端备份主流程信息;在主流程端记录子流程启动结果信息;子流程失败补发;其中,主流程是基于Activiti的主流程;子流程是基于Activiti的子流程,包括单个或多个跨流程引擎的外部子流程;实现了主流程可以启动单个或多个跨流程引擎的外部子流程的目的,使流程间的交互更加灵活,满足复杂的业务需求。
附图说明
图1是本发明实施例提供的一种基于Activiti的流程交互方法的主要流程示意图;
图2是本发明实施例中流程设计器的子流程活动属性设置界面示意图;
图3本发明实施例提供的一种基于Activiti的流程交互方法的详细流程示意图。
具体实施方式
下面结合附图对本发明作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。
实施例一:
如图1~图3所示,一种基于Activiti的流程交互方法,包括:基于流程设计器中配置的主流程启动子流程的方式,启动主流程和子流程;主流程流转过程中备份当前主流程节点信息;主流程通过多线程的方式启动多个子流程;在子流程端备份主流程信息;在主流程端记录子流程启动结果信息;子流程失败补发;其中,所述主流程是基于Activiti的主流程;所述子流程是基于Activiti的子流程,包括单个或多个跨流程引擎的外部子流程。
本实施例通过采用在流程设计器中配置流程交互方式,实现主流程可以启动单个或多个跨流程引擎的外部子流程。所述的流程设计器即为流程的一种可视化界面,用于编排业务流程,对业务流程中的业务节点进行属性的设置;所述的主流程即为业务根据业务描述为若干活动之间的关系的主框架流程;所述的外部子流程即为主流程流转过程中需要与非本系统的另外一个流程进行交互,结束后可以返回子流程。
本实施例通过流程设计器配置子流程属性、发送多个外部子流程、发送失败重发,实现了主流程可以启动单个或多个跨流程引擎的外部子流程的目的,使流程间的交互更加灵活,满足复杂的业务需求。
图2为流程设计器的子流程活动属性设置界面示意图。如图2所示,子流程活动属性包括以下设置:
如图1、图3所示,一种基于Activiti的流程交互方法,具体包括以下步骤。
(1)基于流程设计器中配置的主流程启动子流程的方式,启动主流程和子流程。
步骤S201解析子流程图元的属性信息。
所述的解析子流程图元的属性信息,即为将子流程活动图元的相关属性设置转换为JSON对象,获取到相关KEY的值。
在流程设计器中,对子流程活动进行属性设置,包括:是否需要启动多个子流程、同步还是异步方式、当前流程引擎的流程系统url地址、跨流程引擎的子流程系统url地址。
步骤S202获取属性信息的主流程url地址、子流程url地址,获取当前主流程的流程实例ID、执行ID。
(2)主流程流转过程中备份当前主流程节点信息。
步骤S203获取当前子流程节点的配置信息,获取当前主流程的实例信息。
所述的当前子流程节点的配置信息,即为子流程活动图元的主流程url地址、子流程url地址,所述的当前主流程的实例信息即为当前主流程的流程实例ID、执行ID。
当前主流程节点信息,包括主流程引擎地址、主流程流程实例ID、主流程当前执行ID、关联的业务表单数据;当前主流程节点信息保存到哈希表中,作为启动子流程的入参。
主流程引擎地址在所述的流程设计器中的子流程活动属性设置中有具体的url地址。
主流程流程实例ID和主流程当前执行ID,即为当前流程的基本属性。
关联的业务表单数据即为当前的主流程关联的表单中,有哪些属性需要与子流程表单属性进行同步。
步骤S204、判断是否为外部多子流程。
所述的判断是否为外部子流程,即为判断当前子流程活动图元的属性设置方式是否设置为外部子流程,并且判断是否设置了目标服务的url。
(3)主流程通过多线程的方式启动多个子流程。
步骤S205、根据配置的多子流程地址通过多线程的方式启动多个子流程。
所述的主流程通过多线程的方式启动多个子流程,即为在所述的流程设计器中的子流程活动属性设置中的跨流程引擎的子流程系统url地址,多个地址之间用“;”分隔。
创建设定数目的线程池,通过多线程调用启动远程子流程的方法,启动多个子流程。由于需要等待线程的执行结果,所以选用Future的线程任务模式,此任务实现了有返回值的Callable接口,因此可以获取到该线程任务的返回值。
(4)在子流程端备份主流程信息;具体为:将主流程流转过程中备份的当前主流程节点信息,在子流程引擎系统中,以子流程能识别的变量名称,存储到子流程的标量表中。
步骤S206、在子流程端将主流程的相关信息,存储到子流程变量表中。
步骤S2061、生成的子流程可以根据流程图正常流转;
步骤S2062、子流程结束后回到主流程。
(5)在主流程端记录子流程启动结果信息。
步骤S207在主流程端记录每个子流程线程启动后的结果信息,并将信息保存到数据库的子流程实例表中。
所述的在主流程端记录子流程启动结果信息,即为:a、获取步骤(3)中通过多线程启动子流程的返回结果,统计启动外部子流程的成功的数目,以变量的形式记录启动成功的数量。b、在步骤(3)中以多线程的方式启动子流程后,将当前主流程的执行ID、流程编码、子流程的url地址、启动成功的子流程实例ID、启动结果、报错信息(如果启动失败)记录到子流程实例表PT_wf_hi_multisuproc中。
(6)子流程失败补发。
步骤S208、判断启动子流程时有无失败线程。
根据主流程实例ID找到活动类型为子流程活动的活动实例ID,通过该活动实例ID获取当前的子流程活动的图元属性信息,并获取步骤S203中所需要的信息。
步骤S209、从子流程实例表中取到当前流程相关的失败记录的url地址。
根据此活动实例ID在子流程实例表PT_wf_hi_multisuproc中找到所有启动失败记录的子流程地址addrs,将这些地址以“,”分隔,并保存到字符串中。
步骤S210、以多线程的方式重新启动。
重复S205的过程,以多线程的方式启动失败的子流程。
步骤S211、更新子流程实例表中的信息。
对失败的子流程启动完成后,获取到每个线程的完成结果更新子流程实例表PT_wf_hi_multisuproc。
实施例二:
基于实施例一所述的一种基于Activiti的流程交互方法,本实施例提供一种基于Activiti的流程交互系统,包括处理器和存储设备,所述存储设备中存储有多条指令,用于所述处理器加载并执行实施例一所述方法的步骤。
本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本申请实施例中的方案可以采用各种计算机语言实现,例如,面向对象的程序设计语言Java和直译式脚本语言JavaScript等。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (10)
1.一种基于Activiti的流程交互方法,其特征在于,包括:
基于流程设计器中配置的主流程启动子流程的方式,启动主流程和子流程;
主流程流转过程中备份当前主流程节点信息;
主流程通过多线程的方式启动多个子流程;
在子流程端备份主流程信息;
在主流程端记录子流程启动结果信息;
子流程失败补发;
其中,所述主流程是基于Activiti的主流程;所述子流程是基于Activiti的子流程,包括单个或多个跨流程引擎的外部子流程。
2.根据权利要求1所述的基于Activiti的流程交互方法,其特征在于,流程设计器中配置的主流程启动子流程的方式,具体为:在流程设计器中,对子流程活动进行属性设置,包括:是否需要启动多个子流程、同步还是异步方式、当前流程引擎的流程系统url地址、跨流程引擎的子流程系统url地址。
3.根据权利要求1所述的基于Activiti的流程交互方法,其特征在于,通过流程设计器的子流程活动图元设置当前流程图需要与远程在其他节点部署的基于Activiti系统中的流程交互的属性信息,属性信息包括:子流程类型、调用方式、子流程名称、本地服务url、目标服务的url。
4.根据权利要求1所述的基于Activiti的流程交互方法,其特征在于,主流程流转过程中备份当前主流程节点信息,具体为:当前主流程节点信息,包括主流程引擎地址、主流程流程实例ID、主流程当前执行ID、关联的业务表单数据;当前主流程节点信息保存到哈希表中,作为启动子流程的入参;
主流程引擎地址在流程设计器中的子流程活动属性设置中有具体的url地址,获取该url地址,进行保存;
主流程流程实例ID和主流程当前执行ID,即为当前流程的基本属性;
关联的业务表单数据即为当前的主流程关联的表单中,需要与子流程表单属性进行同步的属性。
5.根据权利要求1所述的基于Activiti的流程交互方法,其特征在于,主流程通过多线程的方式启动多个子流程,具体为:在流程设计器中的子流程活动属性中设置跨流程引擎的子流程系统url地址,多个地址之间用“;”分隔;
创建设定数目的线程池,通过多线程调用启动远程子流程的方法,启动多个子流程,并获取每个子流程的启动结果。
6.根据权利要求5所述的基于Activiti的流程交互方法,其特征在于,通过流程设计器设置的目标服务url地址的个数,通过多线程的方式启动外部子流程,由于需要等待线程的执行结果,所以选用Future的线程任务模式,此任务模式实现了有返回值的Callable接口,用于获取到该线程任务的返回值。
7.根据权利要求1所述的基于Activiti的流程交互方法,其特征在于,在子流程端备份主流程信息,具体为:将主流程流转过程中备份的当前主流程节点信息,在子流程引擎系统中,以子流程能识别的变量名称,存储到子流程的标量表中。
8.根据权利要求1所述的基于Activiti的流程交互方法,其特征在于,在主流程端记录子流程启动结果信息,具体为:
获取主流程通过多线程的方式启动多个子流程的返回结果,统计启动外部子流程的成功的数目,以变量的形式记录启动成功的数量;
在主流程通过多线程的方式启动多个子流程后,将当前主流程的执行ID、流程编码、子流程的url地址、启动成功的子流程实例ID、启动结果、报错信息记录到子流程实例表中。
9.根据权利要求1所述的基于Activiti的流程交互方法,其特征在于,子流程失败补发,具体为:
主流程通过多线程的方式启动多个子流程的过程中,如果存在失败的子流程需要补发,需要从在主流程端记录的子流程启动结果信息中取得当前主流程启动失败的所有子流程列表,对这些失败的子流程重新启动,如果成功,那么更新子流程实例表中对应记录的启动结果。
10.一种基于Activiti的流程交互系统,其特征在于,包括处理器和存储设备,所述存储设备中存储有多条指令,用于所述处理器加载并执行权利要求1~9任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211405745.7A CN115562842A (zh) | 2022-11-10 | 2022-11-10 | 一种基于Activiti的流程交互方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211405745.7A CN115562842A (zh) | 2022-11-10 | 2022-11-10 | 一种基于Activiti的流程交互方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115562842A true CN115562842A (zh) | 2023-01-03 |
Family
ID=84770167
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211405745.7A Pending CN115562842A (zh) | 2022-11-10 | 2022-11-10 | 一种基于Activiti的流程交互方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115562842A (zh) |
-
2022
- 2022-11-10 CN CN202211405745.7A patent/CN115562842A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107688500B (zh) | 一种分布式任务处理方法、装置、系统及设备 | |
CN109684057B (zh) | 任务处理方法、装置和存储介质 | |
CN108984652B (zh) | 一种可配置数据清洗系统和方法 | |
US10338910B2 (en) | Multi-tenant upgrading | |
WO2020232951A1 (zh) | 一种任务执行方法及装置 | |
CN111666088A (zh) | Pod的更替方法、装置、电子设备及计算机可读存储介质 | |
CN114281653B (zh) | 应用程序的监控方法、装置及计算设备 | |
CN113535141A (zh) | 数据库操作代码的生成方法及装置 | |
CN114860654A (zh) | 一种基于Flink数据流的Iceberg表Schema动态变更方法及系统 | |
JP2023553220A (ja) | マルチインスタンスプロセスのためのプロセスマイニング | |
CN114816170A (zh) | 规则方案生成方法、装置、介质及电子设备 | |
CN111625330A (zh) | 跨线程的任务处理方法、装置、服务器及存储介质 | |
CN115562842A (zh) | 一种基于Activiti的流程交互方法及系统 | |
US20150212799A1 (en) | Migration between model elements of different types in a modeling environment | |
CN114553859A (zh) | 一种bmc配置管理方法、装置、电子设备及存储介质 | |
CN115168291A (zh) | 层级目录实现方法、装置、电子设备及存储介质 | |
US8560572B2 (en) | System for lightweight objects | |
CN106648550B (zh) | 用于并发执行任务的方法与设备 | |
CN110221952B (zh) | 业务数据的处理方法及装置、业务数据处理系统 | |
CN114625515A (zh) | 一种任务管理方法、装置、设备及存储介质 | |
CN106776296A (zh) | 覆盖率检测的启动方法、装置和启动设备 | |
CN114880150A (zh) | 故障隔离和现场保护方法和系统 | |
CN113792247B (zh) | 基于代码特征生成功能流程图的方法、装置、设备和介质 | |
CN110795220B (zh) | 一种任务合并方法、装置和计算机可读存储介质 | |
US20230289237A1 (en) | Automated nesting of existing stacks in a root stack within an aws environment |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |