CN113961332A - 一种工作流引擎实现的方法、装置、电子设备及存储介质 - Google Patents
一种工作流引擎实现的方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN113961332A CN113961332A CN202111335337.4A CN202111335337A CN113961332A CN 113961332 A CN113961332 A CN 113961332A CN 202111335337 A CN202111335337 A CN 202111335337A CN 113961332 A CN113961332 A CN 113961332A
- Authority
- CN
- China
- Prior art keywords
- workflow
- flow
- information
- completion condition
- instance
- 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
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/38—Creation or generation of source code for implementing user interfaces
-
- 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
- G06F9/4451—User profiles; Roaming
-
- 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/54—Interprogram communication
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本申请公开了一种工作流引擎实现的方法、装置、电子设备及存储介质,涉及自动程序设计技术领域,其中,该方法包括:根据前端业务请求携带的入参信息,获取对应的目标工作流定义信息;基于所述目标工作流定义信息创建对应的工作流实例,并启动所述工作流实例对应的执行流;提取所述工作流实例中的流程对象,并按照所述工作流实例中的流转信息依次判断各流程对象是否满足对应的完成条件;若未满足所述完成条件,则调用预先配置的第一拦截器,并在通过所述第一拦截器检测到所述流程对象满足对应的完成条件时,流转到下一流程对象进行判断。实现真正分离式执行启动流程命令,无需技术人员再次人为处理,流程自动化程度高。
Description
技术领域
本申请涉及自动程序处理技术领域,尤其涉及一种工作流引擎实现的方法、装置、电子设备及存储介质。
背景技术
工作流是指通过计算机对业务流程的自动化执行管理。工作流广泛使用在各行各业中,例如出差流程、请假流程、用车流程、计费结算流程、综合运维流程等,只要涉及到流程工作事务的,就需要用到工作流。
在相关技术中,工作流的实现方式如下:
1)业务人员和技术人员充分沟通工作流程明细,明确每个工作流程的流程节点、流程内容、流程权限等。
2)前端技术人员开发可视化界面(如web系统应用界面),业务人员触发明细菜单控件,页面交互根据业务人员触发的控件,判断进入哪个工作流程,同时获取节点流程判断数据。
3)后端技术人员根据沟通后的流程建模明细(如:明确下一个流程到哪里、明确流程内容是什么、明确的操作人是否有权限等),实现处理流程控制业务逻辑(如:流程有几层审批的控制、流程数据分析等),并返回响应数据给前端,告知其节点流程判断结果。
最后,每一次的工作流程操作都要进行业务和流程的数据保存与维护。
该实现方式存在以下不足:
(1)每个业务流程的流程事务需要清晰明确的流程设计。在开发前,需求设计人员需要和业务人员沟通并落实,技术实现的时候,每个节点流转都需要硬性判断下一步流程节点和操作人员。因此,项目迭代业务优化可拓展性不高,只要拓展复杂点的业务逻辑,会给技术处理带来很大的困难,甚至无法实现。
(2)系统如果涉及多个流程工作事务,一个流程事务就需要建立一个工作流,每个流程都需要单独开发交互页面和后台处理程序,技术人力和时间耗费成本高。
(3)已完成的工作流属于定制化静态流程,这给后期项目业务优化和技术处理带来很大的困难。
发明内容
本申请提供了一种工作流引擎实现的方法、装置、电子设备及存储介质,以解决现有技术中定制化静态工作流处理上导致的后期项目业务优化和技术处理难度大、技术实现成本高等问题。
第一方面,本申请实施例提供了一种工作流引擎实现的方法,包括:
根据前端业务请求携带的入参信息,获取对应的目标工作流定义信息;
基于所述目标工作流定义信息创建对应的工作流实例,并启动所述工作流实例对应的执行流;
提取所述工作流实例中的流程对象,并按照所述工作流实例中的流转信息依次判断各流程对象是否满足对应的完成条件;
若未满足所述完成条件,则调用预先配置的第一拦截器,并在通过所述第一拦截器检测到所述流程对象满足对应的完成条件时,流转到下一流程对象进行判断。
第二方面,本申请实施例还提供了一种工作流引擎实现的装置,包括:
工作流定义信息获取模块,用于根据前端业务请求携带的入参信息,获取对应的目标工作流定义信息;
启动模块,用于基于所述目标工作流定义信息创建对应的工作流实例,并启动所述工作流实例对应的执行流;
流转判断模块,用于提取所述工作流实例中的流程对象,并按照所述工作流实例中的流转信息依次判断各流程对象是否满足对应的完成条件;
拦截模块,用于若所述流程对象未满足所述完成条件,则调用预先配置的第一拦截器,并在通过所述第一拦截器检测到所述流程对象满足对应的完成条件时,流转到下一流程对象进行判断。
第三方面,本申请实施例还提供了一种电子设备,所述电子设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述第一方面的方法。
第四方面,本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述第一方面的方法。
本申请所提供的技术方案,具有如下有益效果:
在本实施例中,根据前端业务请求携带的入参信息获得对应的目标工作流定义信息以后,则可以基于所述目标工作流定义信息创建对应的工作流实例,并启动该工作流实例对应的执行流。执行流按照工作流定义信息自动提取当前工作流实例中的流程对象,并按照工作流实例中的流转信息依次判断各流程对象是否满足对应的完成条件,对于未满足完成条件的流程对象,则调用预先配置的第一拦截器,并在通过第一拦截器检测到该流程对象满足对应的完成条件时,自动推进流转到下一流程对象进行判断。便于节点流程的判断,实现真正分离式执行启动流程命令,达到根据前端请求启动哪个流程,并启动命令执行对应的工作流流程,无需技术人员再次人为处理,流程自动化程度高。
附图说明
图1是本申请实施例一提供的一种工作流引擎实现的方法实施例的流程图;
图2是本申请实施例二提供的一种工作流引擎实现的方法实施例的流程图;
图3是本申请实施例二提供的拦截器链中各拦截器的执行先后顺序示意图;
图4是本申请实施例二提供的一种应用场景实例中的工作流引擎的工作原理示意图;
图5是本申请实施例三提供的一种工作流引擎实现的装置实施例的结构框图;
图6是本申请实施例四提供的一种电子设备的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本申请,而非对本申请的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本申请相关的部分而非全部结构。
实施例一
图1为本申请实施例一提供的一种工作流引擎实现的方法实施例的流程图,本实施例可以应用于流程管理系统中,该流程管理系统是遵循业界标准BPMN2.0(BusinessProcess Modeling Notation,业务流程建模语言)规范的系统。通过基于BPMN2.0规范xml形式定义的流程建模,来创建业务流程的工作流引擎,能适用于多种业务类型的工作流。
本实施例可以包括如下步骤:
步骤110,根据前端业务请求携带的入参信息,获取对应的目标工作流定义信息。
示例性地,该前端业务请求可以为前端客户端检测到第一用户触发的业务类型后,根据该业务类型中携带的工作流标识生成的请求。其中,业务类型例如可以包括请假申请类型、用车申请类型、出差申请类型、访客出入申请类型等不同场景的工作流程类型。
在一种示例性的实现场景中,第一用户可以是使用工作流程的申请人员,当第一用户登录系统并触发流程申请功能时,前端客户端展示多种业务类型以供第一用户选择,并在检测到第一用户选定某种业务类型(例如请假申请类型)及填写了相关的申请信息以后,读取该选定的业务类型所绑定的工作流标识,并根据该工作流标识以及申请信息生成业务请求,然后将该业务请求发送给后台,则该业务请求中可以包括该选定的工作流标识。其中,工作流标识用于唯一标识一个工作流。
当服务后台接收到该业务请求以后,从该业务请求中解析出工作流标识以及申请信息,然后可以将申请信息作为业务数据交由业务方处理,并将工作流标识发给工作流服务进行处理,由工作流服务根据该工作流标识获取对应的目标工作流定义信息ProcessDefinition。其中,工作流定义信息是指对工作流的描述信息,其表现形式可以包括文本、流程图等。示例性地,工作流定义信息可以包括业务类型、工作流标识、流程节点信息等。
在一种实施例中,步骤110进一步可以包括如下步骤:
当接收到所述前端业务请求时,触发指定的工作流服务;由所述指定的工作流服务根据所述工作流标识加载对应的目标工作流定义信息。
在该实施例中,服务后台接收到前端业务请求时,触发工作流引擎Flowable中的指定的工作流服务RunTimeService(又称为运行时服务),并将解析出的工作流标识发送至工作流服务中,以告诉工作流服务启动哪个工作流分支。
工作流服务根据该工作流标识可以从流文件数据库中查找并加载对应的目标工作流文件,该目标工作流文件中记录有目标工作流定义信息。其中,该流文件数据库中存储有多个预先定义的工作流文件,各工作流文件中携带有对应的工作流标识等相关信息。该工作流文件可以是bpmn.XML格式的文件。
步骤120,基于所述目标工作流定义信息创建对应的工作流实例,并启动所述工作流实例对应的执行流。
工作流服务获得bpmn.XML文件以后,则可以解析该文件获得对应的目标工作流定义信息,并根据该目标工作流定义信息创建对应的工作流实例<bpmnModel>,每个流程实例至少会有一个执行流<Process>,Process为程序可执行的内存对象。其中,工作流实例和执行流都是代码接口。
在实现中,工作流服务可以调用启动接口start ProcessInstance来启动工作流实例中的执行流。
需要说明的是,工作流服务调用启动接口时,还需要注意如下参数的配置:申请人标识applyUserid(即第一用户标识),是项目有需要部门领导审核,通过本标识可以获取到本用户对应的部门分领导人员;工作流标识businessKey(即工作流实例标识),是流程定义时的业务类型key与业务流程id,通过下划线连接起来,即key_id;结果推送地址callBackUrl,即工作流服务可达路径。
在一种实施例中,在启动执行流以后,本实施例还可以包括如下步骤:
调用预先配置的第二拦截器,以获取所述工作流实例的初始节点,并对所述初始节点进行初始化处理。
在实现时,启动工作流实例以后,可以调用命令执行器(CommandExecutor,也是代码接口),并采用命令执行器来执行拦截器链(interceptors),其中,拦截器链中可以包括多个预先添加的、具有执行先后顺序的拦截器,如日志拦截器LogInterceptor(当日志级别为debug时,会输出启动日志)、事务拦截器SpringTransactionInterceptor(用于Spring事务管理,包括用户事务的doTransaction、commit、rollback)、命令上下文拦截器CommandContextInterceptor(执行SqlSession close方法,将数据进行持久化)、命令调用者拦截器commandInvokerInterceptor(真正执行启动流程命令的拦截器)、bpmn解析拦截器BpmnOverrideContextInterceptor、流程拦截器TransactionContextInterceptor、以及其他自定义拦截器(根据实际需要保证扩展性)等(需要说明的是,上述列举的拦截器并不具有执行先后次序的限定)。
在实际中,拦截器链中的每个拦截器,都在自己的execute方法中执行下一个拦截器的execute方法,是嵌套调用的,因此各拦截器执行的先后顺序大致可以如图3所示。
示例性地,第二拦截器可以为命令调用者拦截器commandInvokerInterceptor,其可以为拦截器链中的第一个拦截器。在执行工作流实例的命令之前,先执行拦截器commandInvokerInterceptor的方法。在第二拦截器内执行初始化操作(InitialOperation),可以采用process.getInitialFlowElement方法获取工作流实例的初始节点,然后初始化该初始节点。
其中,该初始节点为空节点,即第0节点。
步骤130,提取所述工作流实例中的流程对象,并按照所述工作流实例中的流转信息依次判断各流程对象是否满足对应的完成条件。
示例性地,流程对象可以包括顺序流(sequence flow)、活动任务(Activititask,包括用户任务、服务任务等)、网关(包括排他网关和并行网关)、事件(包括启动事件、结束事件等)等。从工作流实例中可以提取出这些流程对象,并逐一判断是否满足对应的完成条件。
在一种实施例中,步骤130可以通过调用节点操作推进器(DefaultFlowableEngineAgenda)实现,节点操作推进器用于节点流转推进、所有流程节点判断以及自动推进流转到下一个节点(即后置节点),直至流程运行完成。DefaultFlowableEngineAgenda持有操作对象operations,通过对节点操作封装为不同的operation,进行节点的流转,实现业务流程自动化。
则步骤130进一步可以包括如下步骤:
步骤130-1,将所述工作流实例中的流程对象添加到操作栈中。
在实现时,节点操作推进器中可以创建操作栈(operation stack),从工作流实例中提取出流程对象以后,可以将所有的流程对象都推入到(invoke.add())操作栈中。
步骤130-2,在所述操作栈中,从所述流程对象中的初始节点开始,获取各流程对象对应的操作对象,并判断各流程对象对应的各操作对象是否操作完成。
步骤130-3,若所述流程对象中所有的操作对象都操作完成,则判定所述流程对象满足对应的完成条件,并将所述流程对象操作出栈。
步骤130-4,若所述流程对象中任一操作对象没有操作完成,则判定所述流程对象未满足对应的完成条件。
当将所有流程对象都推入操作栈以后,则可以从操作栈的初始节点开始,一次遍历各流程对象。首先可以判断各流程对象是否具有对应的操作对象,如顺序流、启动事件、结束事件、初始节点等是没有操作对象的。如果能获得流程对象的操作对象,则进一步判断各操作对象是否已经完成对应的操作。否则,如果当前流程对象没有操作对象,则继续遍历下一流程对象(即后置元素)。
例如,如果一个流程对象为会签审批节点,审批人员分别为甲、乙、丙三人,需要三人都同意才可以进入下一个审批节点。则该流程对象对应的操作对象有三个,分别是甲审批操作对象、乙审批操作对象以及丙审批操作对象,如果甲乙丙三人均完成审批,则甲审批操作对象、乙审批操作对象以及丙审批操作对象均已完成,即该流程对象满足对应的完成条件;如果甲乙两人已完成审批,但丙没有完成审批,则甲审批操作对象、乙审批操作对象已完成,但丙审批操作对象没有操作完成,则该流程对象未满足对应的完成条件。
当判定当前流程对象满足对应的完成条件时,则可以将该流程对象操作出栈,并继续遍历下一流程对象。
在一种实施例中,在步骤130-2判断各流程对象对应的各操作对象是否操作完成之前,步骤130还可以包括如下步骤:
判断各流程对象是否具有行为器,所述行为器包括一个或多个操作对象;若所述流程对象具有对应的行为器,则执行该对应的行为器;若所述流程对象没有对应的行为器,则判定所述流程对象满足对应的完成条件,并将所述流程对象操作出栈。
在该实施例中,可以获取各流程对象对应的行为器,如果流程对象存在行为器,则可以执行该行为器,执行行为器的过程可以是执行各操作对象。如果不存在行为器,表示该流程对象(如顺序流)没有操作对象,此时可以判定该流程对象满足对应的完成条件,并将该流程对象操作出栈。
步骤140,若未满足所述完成条件,则调用预先配置的第一拦截器,并在通过所述第一拦截器检测到所述流程对象满足对应的完成条件时,流转到下一流程对象进行判断。
在该步骤中,如果判定当前遍历到的流程对象未满足对应的完成条件,则可以调用拦截器链中的第一拦截器,以中断当前工作流实例的继续执行,并执行第一拦截器的方法,采用第一拦截器对当前流程对象的完成情况(即是否达到完成条件)进行监控,如果通过第一拦截器检测到当前流程对象未满足对应的完成条件时,则结束工作流实例中的当前流程对象,并继续监听;如果通过第一拦截器检测到当前流程对象满足对应的完成条件时,则将该流程对象操作出栈,并退出第一拦截器,以及通知工作流实例流转到下一流程对象进行判断,反复执行以上操作,直至节点为结束事件,流程结束。示例性地,第一拦截器可以为流程拦截器TransactionContextInterceptor。
在一种实施例中,在需要流转到下一流程对象时,可以根据流转信息自动确定下一流程对象,并流转到下一流程对象进行判断。
在本实施例中,根据前端业务请求携带的入参信息获得对应的目标工作流定义信息以后,则可以基于所述目标工作流定义信息创建对应的工作流实例,并启动该工作流实例对应的执行流。执行流按照工作流定义信息自动提取当前工作流实例中的流程对象,并按照工作流实例中的流转信息依次判断各流程对象是否满足对应的完成条件,对于未满足完成条件的流程对象,则调用预先配置的第一拦截器,并在通过第一拦截器检测到该流程对象满足对应的完成条件时,自动推进流转到下一流程对象进行判断。便于节点流程的判断,实现真正分离式执行启动流程命令,达到根据前端请求启动哪个流程,并启动命令执行对应的工作流流程,无需技术人员再次人为处理,流程自动化程度高。
实施例二
图2为本申请实施例二提供的一种工作流引擎实现的方法实施例的流程图,本实施例在实施例一的基础上,对定义工作流信息的具体过程进行说明,可以包括如下步骤:
步骤210,当检测到第二用户触发新增流程功能时,向所述第二用户展示多个工作流流程。
本实施例提供可视化的业务交互界面,帮助第二用户定义流程的模型,进行动态配置流程定义。配置化的工作流流程,可以直接对应一个甚至多个模块,每个工作流流程可共用也易于维护。统一的流程维护,统一的业务数据和流程相关数据维护。
在实现时,可以采用vue技术实现前端工作流配置页面,进行配置新增、修改配置界面的实现。管理人员只要进入展示平台,就可以随时配置流程定义。
在一种示例性的实现场景中,第二用户的权限与第一用户的权限并不相同,第二用户可以是创建工作流程的管理人员或运维人员,当第二用户登录系统并触发新增流程功能(例如可以进行如下操作触发新增流程功能:进入“流程管理”菜单-》“新增流程”)时,前端客户端展示可视化的新增流程页面给第二用户,在新增流程页面中可以包括多个工作流流程。其中,不同的工作流流程可以具有不同的流转信息,包含不同的流程节点。
步骤220,获取所述第二用户从所述多个工作流流程中选定的目标工作流流程,并接收所述第二用户针对所述目标工作流流程输入的流程信息,所述流程信息包括业务类型以及流程节点信息。
第二用户根据实际业务需求可以从上述展示的多个工作流流程中选定至少一个工作流流程作为目标工作流流程,当客户端检测到第二用户选定的目标工作流流程以后,则展示与该目标工作流流程相关的流程页面,以供第二用户输入目标工作流流程对应的流程信息。
示例性地,流程信息可以包括业务类型以及流程节点信息,流程节点信息例如可以包括每个流程节点的审批人信息,包括审批人名称、部门等。业务类型例如可以包括请假申请类型、用车申请类型、出差申请类型、访客出入申请类型等。
例如,假设有两个工作流流程供第二用户选择,一个包括2个审批节点,第1个审批节点为会签审批节点,需三人都审批同意才可以进入第2个审批节点;第2个审批节点为或签审批节点,只需要两人中的一人审批同意则流程结束。另一个工作流流程可以为:包括1个审批节点,该审批节点为会签审批节点,需三人都审批同意则可以结束流程。
假设第二用户选择了第一种工作流流程,填入的流程信息为请假申请类型,则该工作流是供请假申请使用,然后在第一个审批节点中填写的审批人信息为甲、乙、丙,则该审批节点中需要甲、乙、丙三人都审批同意才可以进入下一审批节点。在第二个审批节点中填写的审批人信息为丁、戊,则在该审批节点中只需要丁或者戊其中一个人审批同意就可以结束流程。
需要说明的是,在前端的配置界面,可以设计三个接口,分别为:工作流流程定义列表接口process/query/flow/settings、获取流程详情接口process/query/flow/details、保存流定义接口process/setting。通过这三个接口实现步骤210与步骤220的交互。
步骤230,根据所述流程信息以及所述目标工作流流程,生成工作流定义信息。
当接收到第二用户输入的流程信息以后,前端客户端将该流程信息发送给后台,后台传送参数至Flowable工作流引擎,则工作流引擎可以根据该流程信息以及对应的目标工作流流程,生成业务流程的工作流定义信息,其中,该工作流定义信息包括后台为当前业务流程分配的、唯一标识该业务流程的工作流标识。
需要说明的是,对于每种业务类型的事件,可以采用key表示。当第二用户针对该业务类型选择的目标工作流流程的数量超过一个时,则对于该业务类型包括超过一个的业务流程,每个业务流程可以采用流程id表示。key和流程id都是全局唯一的,key和流程id组成工作流标识。
生成工作流定义信息以后,后台则可以将该工作流定义信息生成指定格式的工作流文件,并存储该工作流文件。示例性地,该指定格式的工作流文件可以为bpmn.XML格式文件。
步骤240,当接收到所述前端业务请求时,触发指定的工作流服务。
步骤250,由所述指定的工作流服务根据所述工作流标识加载对应的目标工作流定义信息。
步骤260,基于所述目标工作流定义信息创建对应的工作流实例。
步骤270,提取所述工作流实例中的流程对象,并按照所述工作流实例中的流转信息依次判断各流程对象是否满足对应的完成条件。
步骤280,若未满足所述完成条件,则为所述流程对象添加拦截器,并在通过所述拦截器检测到所述流程对象满足对应的完成条件时,流转到下一流程对象进行判断。
在本实施例中,工作流流程与业务是独立的,在第二用户需要新增业务流程时,可以从预先创建的多个工作流流程中选择所需的目标工作流流程,并针对目标工作流流程输入对应的流程信息,该流程信息为与业务相关的流程信息,包括业务类型以及流程节点信息,则系统可以根据第二用户输入的流程信息以及目标工作流流程,自动生成业务流程的工作流定义信息。从而实现工作流的动态配置,简化流程设计的业务逻辑和技术实现。
工作流流程与业务相互独立,避免了需求更改与硬编码之间矛盾的产生,当业务流程发生变更时(每次修改流程都会存储为新版本),只需要通过配置即可,无需在代码层面进行改进,可以快速且灵活地对变化的业务流程做出及时的维护处理,节省人力和时间成本。例如,假设有请假申请流程以及用车申请流程两个业务流程,均是采用工作流流程A创建。假设请假申请流程的审批人是张三,用车申请流程的审批人是王五。但后来张三离职了,则可以将请假申请事件与用车申请流程进行绑定,这样当有用户提交请假申请时,则可以按照用车申请流程进行请假流程,由王五进行审批。或者,某个业务流程从一个工作流流程变更到另一个工作流流程时,也只需要将该业务类型绑定需要更换到的工作流流程即可。
另外,通过本实施例的工作流配置的方式,可以使业务流程的实现代码,不再散落在各式各样的业务系统中,能够统一管理和维护。且开发者不需要关注太多参与者、活动节点衔接和流程流转控制等问题,提高了开发者开发的效率,减低代码出错率。
为了使得本领域技术人员能够更好地理解本申请,以下通过一个应用场景实例对本申请进行示例性说明,参考图4,示出了本应用场景实例中的工作流引擎的工作原理示意图。以个人请假申请流程为例进行说明:
操作步骤1:流程定义
管理人员(即第二用户)登录系统,点击进入“流程管理”菜单-》【新增流程】,即可打开【新增流程】页面,进行不同类型的流程新增。管理人员通过【新增流程】页面选定目标工作流流程并输入对应的流程信息,相关的参数数据主要如下:
业务类型:请假申请流程(流程的类型自定义,可以随意增加,包括请假申请、用车申请、出差申请、访客出入申请等);
流程节点信息:假设有2个审批节点,第1个审批节点为会签节点:审批人员分别为甲、乙、丙三人,需三人都必须同意才可以进入第2个审批节点;第2个审批节点为或签节点:审批人员为丁或者戊,只要一个人同意流程结束。
生成的流程文件格式为:bpmn.XML格式文件。
操作步骤2:请假申请提交
申请人员(即第一用户)打开“请假申请”菜单,进行申请信息填写,点击【提交】按钮,提交申请信息。本次申请的数据即为业务数据,由业务方自行处理后,向工作流服务方发起请求,以启动请假审批流程。
(1)启动命令
如图4所示,前端根据申请人员的申请向工作流引擎发起请求,事件触发了RuntimeService运行时服务,工作流引擎启动新的审批流(即执行流),调用startProcessInstanceCmd启动流程(启动命令)。工作流服务会根据操作步骤1的入参<流程key or流程id>加载解析bpmnXML格式文件(即图4的构造流程),创建一个流程实例<bpmnModel>,每个流程实例至少会有一个执行流<Process>。
生成的Process,流程通过process.getInitialFlowElement方法得到流程初始节点。在之后构造Execution实体时,设置该初始节点(即图4中的initialOperation开始节点初始化操作)。
(2)命令执行器
CommanExecutor命令执行器一部分用于实现启动命令,另一部分用于执行拦截器链中的各种拦截器(事件执行过程中会添加一些默认拦截器)。
(3)节点流转
操作步骤2向工作流引擎发起请求,执行拦截器链的各种拦截器中的commandInvokerInterceptor命令调用者拦截器,初始化流程开始节点(initialOperation开始节点初始化),执行startProcessInstancecmd启动流程后,进行如下两个操作:
1)执行堆栈中操作
将请假申请流程实例的所有流程节点操作(操作步骤1的请假申请流程定义已经创建,请假申请流程有2个流程节点)推入(invoke.add())到DefaultFlowableEngineAgenda节点操作推进器的操作入栈的操作栈operation stack中。
2)继续流转操作,包括对节点的操作以及对顺序流的操作
对节点的操作,记录节点开始,获取节点行为器并执行行为器。当无行为器的时候,则创建顺序流操作,并对顺序流操作。
对顺序流的操作,找到当前元素后置元素,设置为当前执行元素。如果后置元素是节点,则直接执行;如果后置元素是顺序流,则构造继续流转操作。
在请假申请流程中,启动流程后,1)和2)依次执行,执行initialOperation开始节点初始化操作,第0节点【空开始事件】,添加操作入栈,操作出栈,无行为器;后置节点元素是第1节点,直接执行第1节点操作入栈,其中第1节点为会签,审批任务有三个,分别为甲乙丙三个都要审批通过,才可以通过。如果甲乙都审批通过(操作执行,操作过),丙还未审批(操作执行,没操作过)进入各种拦截器中的TransactionContextInterceptor流程拦截器,拦截器判断节点是否满足完成条件,若丙未审批,任务不满足完成条件,结束当前操作。若丙审批通过,三个任务都完成,满足完成条件(操作执行,操作过),将当前节点操作出栈,并查找下一节点(后置节点);查找到第2节点,操作入栈,第2节点为或签,丁或者戊其中一个审批通过,就满足完成条件(操作执行,操作过),并查找下一节点(后置节点),反复执行以上操作,直至节点为结束事件,流程结束。
通过本实例,可以达到如下有益效果:
通过使用诸如活动、流转、状态、行为这样的术语,使得业务分析师和开发人员使用同一种语言交谈成为可能。优秀的流程设计建模工具,甚至能使开发人员不必将用户需求转化成详细设计文档。
可视化展示平台,可配置的工作流流程定义,不需要明确的流程设计,不受业务流程变更的影响,管理人员只要进入展示平台,就可以随时配置流程定义。
使用一个工作流程引擎,使业务流程的实现代码,不再散落在各式各样的业务系统中,能够统一管理和维护,避免与硬编码之间产生的矛盾,能够随时拓展业务且同时降低技术人员的资源耗费。
开发者不需要关注太多参与者,活动节点衔接和流程流转控制问题,提高了开发者开发的效率,减低代码出错率。
实施例三
图5为本申请实施例三提供的一种工作流引擎实现的装置实施例的结构框图,可以包括如下模块:
工作流定义信息获取模块510,用于根据前端业务请求携带的入参信息,获取对应的目标工作流定义信息;
启动模块520,用于基于所述目标工作流定义信息创建对应的工作流实例,并启动所述工作流实例对应的执行流;
流转判断模块530,用于提取所述工作流实例中的流程对象,并按照所述工作流实例中的流转信息依次判断各流程对象是否满足对应的完成条件;
拦截模块540,用于若所述流程对象未满足所述完成条件,则调用预先配置的第一拦截器,并在通过所述第一拦截器检测到所述流程对象满足对应的完成条件时,流转到下一流程对象进行判断。
在一种实施例中,所述装置还可以包括如下模块:
流转模块,用于若判定所述流程对象满足所述完成条件,则确定下一流程对象,并流转到下一流程对象进行判断。
在一种实施例中,所述装置还可以包括如下模块:
初始化模块,用于调用预先配置的第二拦截器,以获取所述工作流实例的初始节点,并对所述初始节点进行初始化处理。
在一种实施例中,所述流转判断模块530具体用于:
将所述工作流实例中的流程对象添加到操作栈中;
在所述操作栈中,从所述流程对象中的初始节点开始,获取各流程对象对应的操作对象,并判断各流程对象对应的各操作对象是否操作完成;
若所述流程对象中所有的操作对象都操作完成,则判定所述流程对象满足对应的完成条件,并将所述流程对象操作出栈;
若所述流程对象中任一操作对象没有操作完成,则判定所述流程对象未满足对应的完成条件。
在一种实施例中,所述流转判断模块530还用于:
判断各流程对象是否具有行为器,所述行为器包括一个或多个操作对象;
若所述流程对象具有对应的行为器,则执行该对应的行为器;
若所述流程对象没有对应的行为器,则判定所述流程对象满足对应的完成条件,并将所述流程对象操作出栈。
在一种实施例中,所述入参信息包括工作流标识,所述前端业务请求为前端客户端检测到第一用户触发的业务类型后,根据所述业务类型中携带的工作流标识生成的请求;
所述工作流定义信息获取模块510具体用于:
当接收到所述前端业务请求时,触发指定的工作流服务;
由所述指定的工作流服务根据所述工作流标识加载对应的目标工作流定义信息。
在一种实施例中,所述装置还可以包括如下模块:
工作流流程展示模块,用于当检测到第二用户触发新增流程功能时,向所述第二用户展示多个工作流流程;
流程信息获取模块,用于获取所述第二用户从所述多个工作流流程中选定的目标工作流流程,并接收所述第二用户针对所述目标工作流流程输入的流程信息,所述流程信息包括业务类型以及流程节点信息;
工作流定义信息生成模块,用于根据所述流程信息以及所述目标工作流流程,生成工作流定义信息。
在一种实施例中,所述装置还可以包括如下模块:
工作流文件生成模块,用于将所述工作流定义信息生成指定格式的工作流文件,并存储所述工作流文件。
本申请实施例所提供的一种工作流引擎实现的装置可执行本申请实施例一或实施例二中的一种工作流引擎实现的方法,具备执行方法相应的功能模块和有益效果。
实施例四
图6为本申请实施例四提供的一种电子设备的结构示意图,如图6所示,该电子设备包括处理器610、存储器620、输入装置630和输出装置640;电子设备中处理器610的数量可以是一个或多个,图6中以一个处理器610为例;电子设备中的处理器610、存储器620、输入装置630和输出装置640可以通过总线或其他方式连接,图6中以通过总线连接为例。
存储器620作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本申请实施例中的上述实施例一或实施例二对应的程序指令/模块。处理器610通过运行存储在存储器620中的软件程序、指令以及模块,从而执行电子设备的各种功能应用以及数据处理,即实现上述的方法实施例一或实施例二中提到的方法。
存储器620可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器620可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器620可进一步包括相对于处理器610远程设置的存储器,这些远程存储器可以通过网络连接至设备/终端/服务器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置630可用于接收输入的数字或字符信息,以及产生与电子设备的用户设置以及功能控制有关的键信号输入。输出装置640可包括显示屏等显示设备。
实施例五
本申请实施例五还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行上述方法实施例一或实施例二中的方法。
当然,本申请实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本申请任意实施例所提供的方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本申请可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台电子设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
值得注意的是,上述装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。
注意,上述仅为本申请的较佳实施例及所运用技术原理。本领域技术人员会理解,本申请不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本申请的保护范围。因此,虽然通过以上实施例对本申请进行了较为详细的说明,但是本申请不仅仅限于以上实施例,在不脱离本申请构思的情况下,还可以包括更多其他等效实施例,而本申请的范围由所附的权利要求范围决定。
Claims (11)
1.一种工作流引擎实现的方法,其特征在于,包括:
根据前端业务请求携带的入参信息,获取对应的目标工作流定义信息;
基于所述目标工作流定义信息创建对应的工作流实例,并启动所述工作流实例对应的执行流;
提取所述工作流实例中的流程对象,并按照所述工作流实例中的流转信息依次判断各流程对象是否满足对应的完成条件;
若未满足所述完成条件,则调用预先配置的第一拦截器,并在通过所述第一拦截器检测到所述流程对象满足对应的完成条件时,流转到下一流程对象进行判断。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若判定所述流程对象满足所述完成条件,则确定下一流程对象,并流转到下一流程对象进行判断。
3.根据权利要求1或2所述的方法,其特征在于,在所述提取所述工作流实例中的流程对象,并按照所述工作流实例中的流转信息依次判断各流程对象是否满足对应的完成条件之前,所述方法还包括:
调用预先配置的第二拦截器,以获取所述工作流实例的初始节点,并对所述初始节点进行初始化处理。
4.根据权利要求3所述的方法,其特征在于,所述按照所述工作流实例中的流转信息依次判断各流程对象是否满足对应的完成条件,包括:
将所述工作流实例中的流程对象添加到操作栈中;
在所述操作栈中,从所述流程对象中的初始节点开始,获取各流程对象对应的操作对象,并判断各流程对象对应的各操作对象是否操作完成;
若所述流程对象中所有的操作对象都操作完成,则判定所述流程对象满足对应的完成条件,并将所述流程对象操作出栈;
若所述流程对象中任一操作对象没有操作完成,则判定所述流程对象未满足对应的完成条件。
5.根据权利要求4所述的方法,其特征在于,在所述判断各流程对象对应的各操作对象是否操作完成之前,所述按照所述工作流实例中的流转信息依次判断各流程对象是否满足对应的完成条件,还包括:
判断各流程对象是否具有行为器,所述行为器包括一个或多个操作对象;
若所述流程对象具有对应的行为器,则执行该对应的行为器;
若所述流程对象没有对应的行为器,则判定所述流程对象满足对应的完成条件,并将所述流程对象操作出栈。
6.根据权利要求1或2所述的方法,其特征在于,所述入参信息包括工作流标识,所述前端业务请求为前端客户端检测到第一用户触发的业务类型后,根据所述业务类型中携带的工作流标识生成的请求;
所述根据前端业务请求携带的入参信息,获取对应的目标工作流定义信息,包括:
当接收到所述前端业务请求时,触发指定的工作流服务;
由所述指定的工作流服务根据所述工作流标识加载对应的目标工作流定义信息。
7.根据权利要求6所述的方法,其特征在于,在所述根据前端业务请求携带的入参信息,获取对应的目标工作流定义信息之前,所述方法还包括:
当检测到第二用户触发新增流程功能时,向所述第二用户展示多个工作流流程;
获取所述第二用户从所述多个工作流流程中选定的目标工作流流程,并接收所述第二用户针对所述目标工作流流程输入的流程信息,所述流程信息包括业务类型以及流程节点信息;
根据所述流程信息以及所述目标工作流流程,生成工作流定义信息。
8.根据权利要求7所述的方法,其特征在于,在所述根据所述流程信息以及所述目标工作流流程,生成工作流定义信息之后,还包括:
将所述工作流定义信息生成指定格式的工作流文件,并存储所述工作流文件。
9.一种工作流引擎实现的装置,其特征在于,包括:
工作流定义信息获取模块,用于根据前端业务请求携带的入参信息,获取对应的目标工作流定义信息;
启动模块,用于基于所述目标工作流定义信息创建对应的工作流实例,并启动所述工作流实例对应的执行流;
流转判断模块,用于提取所述工作流实例中的流程对象,并按照所述工作流实例中的流转信息依次判断各流程对象是否满足对应的完成条件;
拦截模块,用于若所述流程对象未满足所述完成条件,则调用预先配置的第一拦截器,并在通过所述第一拦截器检测到所述流程对象满足对应的完成条件时,流转到下一流程对象进行判断。
10.一种电子设备,其特征在于,所述电子设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-8任一项所述的方法。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111335337.4A CN113961332A (zh) | 2021-11-11 | 2021-11-11 | 一种工作流引擎实现的方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111335337.4A CN113961332A (zh) | 2021-11-11 | 2021-11-11 | 一种工作流引擎实现的方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113961332A true CN113961332A (zh) | 2022-01-21 |
Family
ID=79470247
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111335337.4A Pending CN113961332A (zh) | 2021-11-11 | 2021-11-11 | 一种工作流引擎实现的方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113961332A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114445047A (zh) * | 2022-01-29 | 2022-05-06 | 北京百度网讯科技有限公司 | 工作流生成方法、装置、电子设备及存储介质 |
CN117076096A (zh) * | 2023-10-17 | 2023-11-17 | 腾讯科技(深圳)有限公司 | 任务流程的执行方法、装置、计算机可读介质及电子设备 |
CN117078212A (zh) * | 2023-10-07 | 2023-11-17 | 腾讯科技(深圳)有限公司 | 业务流程处理方法及装置、电子设备、存储介质 |
-
2021
- 2021-11-11 CN CN202111335337.4A patent/CN113961332A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114445047A (zh) * | 2022-01-29 | 2022-05-06 | 北京百度网讯科技有限公司 | 工作流生成方法、装置、电子设备及存储介质 |
CN114445047B (zh) * | 2022-01-29 | 2024-05-10 | 北京百度网讯科技有限公司 | 工作流生成方法、装置、电子设备及存储介质 |
CN117078212A (zh) * | 2023-10-07 | 2023-11-17 | 腾讯科技(深圳)有限公司 | 业务流程处理方法及装置、电子设备、存储介质 |
CN117078212B (zh) * | 2023-10-07 | 2024-01-26 | 腾讯科技(深圳)有限公司 | 业务流程处理方法及装置、电子设备、存储介质 |
CN117076096A (zh) * | 2023-10-17 | 2023-11-17 | 腾讯科技(深圳)有限公司 | 任务流程的执行方法、装置、计算机可读介质及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113961332A (zh) | 一种工作流引擎实现的方法、装置、电子设备及存储介质 | |
US7676816B2 (en) | Systems and methods for integrating services | |
Mateescu et al. | Adaptation of service protocols using process algebra and on-the-fly reduction techniques | |
CN109951547B (zh) | 事务请求并行处理方法、装置、设备和介质 | |
CN107241315B (zh) | 银行网关接口的接入方法、装置及计算机可读存储介质 | |
US9442822B2 (en) | Providing a visual representation of a sub-set of a visual program | |
CN111258565B (zh) | 小程序的生成方法、系统、服务器及存储介质 | |
CN111104103B (zh) | 一种软件编辑微服务的可视化方法及系统 | |
CN111142933B (zh) | 工作流生成方法、装置、计算机设备和存储介质 | |
CN113568604B (zh) | 风控策略的更新方法、装置及计算机可读存储介质 | |
CN110633120A (zh) | 组态软件控件处理方法、装置、服务器、用户终端及系统 | |
US20210390010A1 (en) | Software Application Diagnostic Aid | |
CN106779404B (zh) | 一种流程预告警方法和装置 | |
CN112487163A (zh) | 自动化流程的执行方法及其接口数据的获取方法、装置 | |
US9323509B2 (en) | Method and system for automated process distribution | |
KR101901310B1 (ko) | 사용자 중심의 상호 연계 통합 애플리케이션 제공 시스템 | |
CN101114222A (zh) | 一种基于本体的反射式体系结构自演化方法 | |
Kuk et al. | Robustness testing framework for Web services composition | |
CN114819981A (zh) | 客服问题处理方法、装置、设备以及存储介质 | |
CN113791977A (zh) | 代码开发的处理方法、装置、电子设备与存储介质 | |
Xiong et al. | A petri net siphon based solution to protocol-level service composition mismatches | |
CN112799794A (zh) | 一种大数据调度方法、装置、系统和存储装置 | |
CN110321111A (zh) | 系统流程控制方法、装置、设备及计算机存储介质 | |
KR101055385B1 (ko) | 그리드 기반의 분산 엔지니어링 자원과 컴퓨팅 자원을 통합하고 실행하기 위한 엔지니어링 프레임워크 시스템 및 이를 이용한 엔지니어링 프로세싱 방법 | |
Anabalon et al. | Test reduction for easing web service integration |
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 |