CN114327414A - 节点可插拨的触发器实现方法及计算机可读存储介质 - Google Patents
节点可插拨的触发器实现方法及计算机可读存储介质 Download PDFInfo
- Publication number
- CN114327414A CN114327414A CN202210087371.2A CN202210087371A CN114327414A CN 114327414 A CN114327414 A CN 114327414A CN 202210087371 A CN202210087371 A CN 202210087371A CN 114327414 A CN114327414 A CN 114327414A
- Authority
- CN
- China
- Prior art keywords
- node
- trigger
- action
- execution
- data
- 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.)
- Granted
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种节点可插拨的触发器实现方法,包括将触发器的运行逻辑拆分成公共能力和节点能力两个部分,所述公共能力包括触发器核心执行逻辑及各动作节点的通用执行逻辑,所述节点能力包括执行各动作节点的具体执行逻辑;根据触发器公共能力包括的核心执行逻辑及各通用执行逻辑分别创建对应的引擎;根据触发器节点能力包括的各具体执行逻辑分别创建对应的动作节点。本发明中,通过提取触发器核心执行逻辑及各动作节点的通用执行逻辑形成公共能力,将动作节点的具体执行逻辑形成节点能力,使触发器具体的节点能力与公共能力分离,节点之间无直接的功能耦合,某个节点的功能不再依赖其他节点的功能,从而节点可独立开发、独立上线、独立使用。
Description
技术领域
本发明属于工业互联网平台技术领域,涉及一种节点可插拨的触发器实现方法及计算机可读存储介质。
背景技术
工业互联网平台需要使用大量进行数据流转配置和业务编排的触发器。但由于企业对业务的诉求多样,就需要让触发器去自动执行各种各样的工作,而在触发器中,就会转换成对应的执行各种不同动作的节点。随着开发的节点增多,每个节点之间如果存在耦合关系,会导致开发新节点的效率降低,使客户企业不得不长时间等待。而且频繁修改一个高度耦合的系统,可能会影响已经实现的功能,产生系统的不稳定。同时企业存在定制节点的诉求,如果节点功能之间存在耦合就很难针对企业开发出独立的定制节点。
发明内容
有鉴于此,本发明的目的在于提供一种节点可插拨的触发器实现方法及计算机可读存储介质。
为达到上述目的,本发明提供如下技术方案:
一种节点可插拨的触发器实现方法,包括以下步骤:
S1、触发器的运行逻辑包括公共能力和节点能力两个部分,使触发器的动作节点通过公共能力产生数据流转;所述公共能力包括触发器核心执行逻辑及各动作节点的通用执行逻辑,所述节点能力包括执行各动作节点的具体执行逻辑;
S2、根据触发器公共能力包括的核心执行逻辑及各通用执行逻辑分别创建对应的引擎;
S3、根据触发器节点能力包括的各具体执行逻辑分别创建对应的动作节点。
进一步的,实现所述公共能力的引擎包括:
触发器流程运转引擎,用于实现触发器核心执行逻辑,驱动触发器按照触发器配置的流程图依次运行;
触发器运行上下文管理引擎,用于在内存中建立触发器运行上下文,在触发器运行过程中将节点对数据的操作记录存储在触发器运行上下文中,供后续的执行节点引用;
触发器通用赋值过滤引擎,使用统一的计算公式模型,对数据进行过滤或赋值;
触发器历史记录及异常处理引擎,用于在数据库中存储触发器执行过程中的数据,以及对于执行过程中的异常进行自动化的处理。
进一步的,所述动作节点在执行过程中产生的数据通过公共能力部分的触发器上下文管理引擎进行管理,执行过程中具体写入的数据由各动作节点的节点能力自行实现;
所述动作节点在执行过程中需要对数据进行赋值和过滤时,使用公共能力的触发器通用赋值过滤引擎实现,将逻辑转换为公式进行计算;
所述动作节点在执行过程中的运行记录内容生成、异常判断由该节点的节点能力自行实现,并且接入公共能力的触发器历史记录及异常处理引擎中,由公共能力进行统一的存储和调度。
进一步的,还包括以下步骤:
S211、定义对象类型AutomationExecution和对象类型AutomationRuntimeContext;其中,对象类型AutomationExecution用于存储触发器的运行记录,参数包括触发器目前运行的节点,以及上一运行节点开始执行的时间、结束执行的时间和执行结果;
对象类型AutomationRuntimeContext用于存储触发器的配置参数和触发器运行上下文,参数包括触发器的配置对象Automation、运行日志管理对象HistoryManager、触发器执行动作节点工厂NodeBehaviorFactory和触发器运行上下文contextValue;所述配置对象Automation包括本次触发器中的所有动作节点的执行顺序及节点的配置参数;
S212、创建动作节点统一的通用行为接口NodeBehavior,并定义通用行为接口的核心方法execute,通用行为接口的核心方法execute的参数包括一个AutomationExecution类型的对象execution和一个AutomationRuntimeContext类型的对象context。
进一步的,创建动作节点的方法包括以下步骤:
S31、定义动作节点的参数;
S32、设置动作节点的配置界面;
S33、创建新的类,实现NodeBehavior接口,并在实现类中完成具体的节点执行逻辑;
S34、在内存的NodeBehaviorFactory中注册新增的实现类。
进一步的,触发器的运行过程包括以下步骤:
S21、创建触发器核心执行逻辑,当满足触发器的触发条件时,在内存中创建出触发器执行实例,实例化出AutomationExecution和AutomationRuntimeContext的对象;
S22、从触发器的配置对象Automation中取出触发器执行的第一个动作节点的配置参数,将节点配置参数传入触发器执行动作节点工厂NodeBehaviorFactory,并调用通用行为接口NodeBehavior中该动作节点的实现类方法,执行该动作节点的核心方法execute;
S23、当动作节点执行完成后,将该动作节点的执行数据写入对象context的触发器运行上下文contextValue;将该动作节点的执行情况写入对象execution;
S24、触发器核心执行逻辑调用运行日志管理对象HistoryManager的日志写入方法将对象execution的内容写入数据库的触发器日志中;并根据执行结果判断是否存在执行异常,如果存在执行异常则启动异常处理机制;如果执行正常则继续执行后续的动作节点;
S25、当需要继续向下执行时,从触发器的配置对象Automation中按执行顺序取出当前需执行的动作节点的配置参数,并将上一动作节点的对象execution和对象context的数据传入当前需执行的动作节点中,并调用该节点的核心方法execute,重复上述步骤继续往下执行。
S26、当没有后续的执行动作节点时,结束触发器的执行。
进一步的,还包括建立触发器执行动作节点列表,所述触发器执行动作节点列表用于存储建立的每一动作节点的信息,在执行所述S34步骤后,还执行以下步骤:
S35、在触发器执行动作节点列表中新增一条数据,用于存储新增的动作节点的信息。
进一步的,所述触发器执行动作节点列表每条数据均包括节点名称、节点类型标识和节点分类,所述节点分类包括通用、高级和定制,对于“通用”类型的动作节点,所有用户均具有使用权限;对于“高级”类型的动作节点,与该动作节点建立了映射关系的用户具有使用权限;对于“定制”类型的动作节点,其参数还包括定制该动作节点的企业用户的企业id,只有定制的用户能够建立与该动作节点的映射关系,并在建立映射关系后具有该动作节点的使用权限。
进一步的,还包括建立动作节点与企业的关系列表,所述动作节点与企业的关系列表包括企业id和动作节点id,用于在企业id下添加“高级”类型的动作节点及“定制”类型的动作节点的id,以建立企业用户与“高级”类型的动作节点及“定制”类型的动作节点之间的映射关系。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现节点可插拨的触发器实现方法。
本发明中,通过提取触发器核心执行逻辑及各动作节点的通用执行逻辑形成公共能力,便于开发触发器新的动作节点,且新开发的动作节点对现有节点不会产生影响,无需过多考虑现有动作节点的功能,仅需要考虑新增的节点的具体执行逻辑即可。另外,不同的企业可以拥有不同的动作节点,从而实现不同企业的功能差异,甚至能够实现动作节点的定制。且能够复制出一个新的节点,在原有节点的代码功能上迭代开发,避免对现有节点的改动,降低风险。
附图说明
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作优选的详细描述,其中:
图1为本发明节点可插拨的触发器实现方法的一个优选实施例的流程图。
图2为创建动作节点的流程图。
图3为触发器整体运行的逻辑图。
图4为触发器运行过程的流程图。
图5为一个具体实例中,配置获取数据节点的示意图。
图6为一个具体实例中,配置删除数据节点的示意图。
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
本发明中,通过提取触发器核心执行逻辑及各动作节点的通用执行逻辑形成公共能力,将各动作节点的具体执行逻辑形成节点能力,将触发器各动作节点的具体执行逻辑与公共能力进行分离,各节点之间无直接的功能耦合,某个节点的功能不需要依赖其他节点的功能,从而使节点可独立开发、独立上线、独立使用。
如图1所示,本发明节点可插拨的触发器实现方法的一个优选实施例包括以下步骤:
S1、触发器的运行逻辑包括公共能力和节点能力两个部分,使所述公共能力与触发器动作节点的具体执行动作分离,触发器的动作节点通过公共能力产生数据流转,各动作节点的具体执行逻辑之间无功能耦合;所述公共能力包括触发器核心执行逻辑及各动作节点的通用执行逻辑,其中,触发器核心执行逻辑包括触发器流程运转引擎,各动作节点的通用执行逻辑包括运行上下文管理、数据赋值、数据过滤、历史记录、异常处理等的执行逻辑,所述节点能力包括执行各动作节点的具体执行逻辑(如获取数据、新建数据、编辑数据、删除数据、发送通知等),各动作节点的具体执行动作之间无耦合。当然,所述节点能力还可包括触发节点执行触发动作的执行逻辑。对于单个节点底层的运行逻辑,由于每个节点的数据结构、运行逻辑(包括数据获取、处理流程)是一致的,所以各个节点能够独立运行。动作节点可包括获取数据节点、新增数据节点、编辑数据节点、删除数据节点、通知类节点、人工填写节点、并行分支节点等。
所述触发节点用于在触发动作满足触发条件时运行触发器,所述触发节点的配置参数用于配置触发器的触发方式和对应的触发条件。所述触发条件是指:在用户应用层面,用户开启或触发所述触发器的开关。所述触发方式包括表单触发和时间触发;当触发方式为表单触发时,触发条件包括触发动作类型和表单ID,必要时触发条件还可包括数据过滤规则;当触发方式为定时触发时,触发条件包括定时时间。
所述获取数据节点用于从指定的表单(即一个数据表,每一数据表都有一个独立的ID号,可通过数据表的ID号指定表单,也可根据数据表的名称指定表单)获取满足数据过滤规则的一条或多条数据;其配置参数包括获取数据方式、获取数据的表单和数据过滤规则;获取数据方式包括表单获取和前置节点(即在该节点之前可能被执行的节点,如该节点的父节点,该节点父节点的父节点等等)获取,当选择从表单获取时,表单的选项包括数据库中该企业用户下的所有表单。
所述新增数据节点用于根据设置的参数自动在表单新增一条或多条数据;其配置参数包括需要新增数据的表单、字段(表单中一列单元格的列标题为这一列单元格的字段名称;每一单元格还分配有一个独立的字段ID号,可通过数据表的字段名称来指定表单的一列单元格,也可通过字段ID指定表单的一个单元格)及数据赋值规则。
所述编辑数据节点用于根据设置的参数自动对表单的数据进行修改操作;其配置参数包括需要编辑数据的表单、字段及数据赋值规则。
所述删除数据节点用于根据设置的参数自动对表单的数据进行删除操作;其配置参数包括需要删除数据的节点及表单。
所述通知节点用于通过指定方式向指定用户发送通知消息,例如:app通知节点;其配置参数包括发送通知的方式和接收通知的对象名称。
所述人工填写节点用于通过人工填写的方式在表单中新增一条数据,其配置参数包括填写数据的表单名称和有填写权限的用户名称。
所述并行分支节点包括分支操作节点、分支节点和分支组合节点,所述分支操作节点用于将一路执行流程分路为两路或两路以上的分支执行流程,每一分支执行流程设置有一个分支节点,所述分支节点的配置参数包括数据过滤规则;当满足数据过滤规则时,执行该分支节点所在的分支流程,否则,不执行该分支节点所在的分支流程;所述分支组合节点与分支操作节点一一对应,用于将对应的分支操作节点分路的分支执行流程汇合为一路执行流程。
S2、根据触发器公共能力包括的核心执行逻辑及各通用执行逻辑分别创建对应的引擎(即执行该逻辑的代码)。实现所述公共能力的引擎包括触发器流程运转引擎、触发器运行上下文管理引擎、触发器通用赋值过滤引擎和触发器历史记录及异常处理引擎。
所述触发器流程运转引擎用于实现触发器核心执行逻辑,驱动触发器按照触发器配置的流程图依次运行。为通过触发器核心执行逻辑执行各动作节点的具体执行逻辑,在创建节点前需要先执行以下步骤:
S211、定义对象类型AutomationExecution和对象类型AutomationRuntimeContext;其中,对象类型AutomationExecution用于存储触发器的运行记录,参数包括触发器目前运行的节点,以及上一运行节点开始执行的时间、结束执行的时间和执行结果;当然,对象类型AutomationExecution的参数还可包括触发器的配置id号(在触发器配置完成时为触发器分配的id)、当前运行的这一次触发器的实例id(系统为运行的触发器临时分配的id)和本次触发的平台企业(即企业用户)id。
对象类型AutomationRuntimeContext用于存储触发器的配置参数和触发器运行上下文,参数包括触发器的配置对象Automation(包括使触发器触发的事件和本次触发器中的所有动作节点的执行顺序及节点的配置参数)、运行日志管理对象HistoryManager(用于对日志进行存储)、触发器执行动作节点工厂NodeBehaviorFactory(用于在内存中创建所有的动作节点)、触发器运行上下文contextValue(是一个key-value结构的list集合,key是每个节点的id,value是节点的运行数据)。
S212、创建动作节点统一的通用行为接口NodeBehavior,所述通用行为接口NodeBehavior为java中定义的抽象类;并定义通用行为接口的核心方法execute(AutomationExecution execution,AutomationRuntimeContext context);核心方法execute的参数包括一个AutomationExecution类型的对象execution和一个AutomationRuntimeContext类型的对象context。该步骤的具体示例如下:
每次需要新增执行动作节点时需要实现该通用行为接口,编写对应的节点动作行为等相关业务代码即可。从而对于触发器的公共能力的代码编写来说,就无需关心具体节点实现的功能。所有的代码都可以基于NodeBehavior去编写。等待具体运行触发器时,程序才会调用具体的执行动作节点的实现类去完成具体节点的功能。
所述触发器运行上下文管理引擎用于在内存中建立触发器运行上下文,在触发器运行过程中将节点对数据的操作记录存储在触发器运行上下文中,供后续的执行节点引用。触发器在触发后先在内存中生成一个key-value结构的list集合作为触发器运行上下文,用于存储触发器各节点的运行数据,其中,key为节点的节点ID,触发器的每一节点都分配有一个唯一的节点ID;value为该节点的运行数据,包括节点运行时调用的表单的表单ID、节点运行时操作的字段的字段ID、以及节点运行结束后上述字段对应的数据;当触发器的运行结束时,对应的list集合自动删除。
为便于在触发器运行过程中调用节点的运行数据,本实施例优选为所述list中采用三层存储结构存放节点的运行数据,第一层结构存储以节点ID表示的执行过的触发器节点,在每一节点ID下存储该节点执行的表单的表单ID作为第二层结构,在每一表单ID下存储该节点执行的字段的字段ID及该字段在执行后的数据作为第三层结构。其中,获取到前置节点传入的字段ID定义为elementId,节点ID定义为nodeId,表单ID定义为formId。
例如:在新增节点(ID为addNode01),给“员工信息表”(ID为formStaffInfo01)表单新增一条数据,假设员工信息表中有三个字段“姓名”(ID为name01)、“电话”(ID为phone01)、“地址”(ID为address01);当执行新增节点为员工信息表单新增一条姓名为“张三”、电话为“18933223355”、地址为“北京市朝阳区28号”的数据后,运行上下文中该节点的运行数据如下所示:
从内存中调用目标字段或触发字段的数据时,先根据nodeId从list的第一层结构中找到对应的节点,然后根据formId在该节点的第二层结构中找到对应的表单,再根据elementId从该表单的第三层结构中找到对应的字段和数据,根据获取到的nodeId,formId,elementId,可以精准查询到当前节点对应的表单字段值为多少。例如:要调用上述新增节点的员工信息表中电话字段的数据时,先根据“addNode01”从list中找到新增节点,再根据“formStaffInfo01”从新增节点的数据中找到员工信息表,最后根据“phone01”找到电话字段,并读取该字段对应的数据得到“18933223355”,即为目标字段的数据。
所述触发器通用赋值过滤引擎,使用统一的计算公式模型,根据配置的数据过滤规则或数据赋值规则对数据进行过滤或赋值。
配置数据过滤规则包括选择匹配规则、选择过滤值类型和设置过滤值。所述匹配规则用于指定匹配的算法,所述过滤值类型用于指定将过滤值转化为匹配规则的参数的方法;所述过滤值用于获取匹配规则的参数(即匹配参数)。所述匹配规则可以包括:(匹配参数)为空、(匹配参数)不为空、等于匹配参数、不等于匹配参数、大于匹配参数、大于或等于匹配参数、小于匹配参数、小于或等于匹配参数、处于两个匹配参数的范围之内、等于多个匹配参数中的一个。所述过滤值类型包括自定义、变量字段和过滤公式;当过滤值类型为自定义时,以人工输入所需的数据作为过滤值。当过滤值类型为变量字段时,以一前置节点中表单的字段作为目标字段,以目标字段作为过滤值。
当过滤值类型为过滤公式时,在设置过滤值的过滤值设置区域中显示预先定义的运算函数库中的函数公式,先从中选择一个函数公式作为过滤公式,然后设置过滤公式的各个运算参数,输入数据作为函数公式的参数或从前置节点的表单字段中选择一个表单的字段作为目标字段,以包括参数的过滤公式作为过滤值。在根据过滤值类型和过滤值得到匹配参数时,通过函数公式对参数的值进行运算,以运算结果作为匹配参数;其中,当输入数据作为过滤公式的参数时,直接通过过滤公式对输入的数据进行运算,得到运算结果;当以目标字段作为过滤公式的参数时,先从所述内存中调用前置节点的运行数据,根据过滤公式的参数从所述运行数据中提取出目标字段的数据,再通过过滤公式对提取的数据进行运算,得到运算结果。通过上述方法,可以调用多个前置节点的表单的字段数据进行公式运算后,将运算结果作为执行节点的数据过滤规则的匹配参数,也可将前置节点的表单的字段数据与指定值进行公式运算后,将运算结果作为匹配参数,数据过滤方式更加灵活。
所述数据赋值规则包括字段赋值、公式赋值和自定义赋值。
当选择字段赋值时,从前置节点的表单的字段中选择一个表单的字段作为目标字段,以目标字段作为赋值参数;从而在赋值时,能够从内存中调用目标字段的表单所在节点的运行数据,然后从运行数据中找出目标字段的数据赋值给被赋值字段。当选择公式赋值规则时,在赋值参数区域中显示预先设置的函数公式,先从中选择一个函数公式为赋值规则的公式,然后设置函数公式的各个运算参数,以指定值作为函数公式的参数或从前置节点的表单字段中选择一个表单的字段作为目标字段,以目标字段作为函数公式的参数,以包含参数的函数公式作为赋值参数;在赋值时,通过函数公式对参数的值进行运算,将运算结果赋值给被赋值字段;当函数公式的参数为指定值时,直接以指定值作为函数参数的值;当函数公式的参数为前置节点的表单字段时,先从内存中调用目标字段的表单所在节点的运行数据,然后从运行数据中找出目标字段的数据作为函数参数的值。通过定义公式赋值的赋值规则,可以调用多个前置节点的表单的字段数据进行公式运算后,将运算结果给执行节点的表单的字段赋值,也可将前置节点的表单的字段数据与指定值进行公式运算后,将运算结果给执行节点的表单的字段赋值,赋值方式更加灵活。当选择自定义赋值规则时,在赋值参数区域中写入需要赋值给被赋值字段的数据,将赋值参数区域写入的数据作为赋值参数;以赋值参数区域写入的数据给被赋值字段赋值。
为在按照数据赋值规则实现数据赋值,可预先针对每一赋值规则分别定义一个赋值函数表达式,并定义一个数据结构(数据结构中定义有解析时需要用到的函数)用于存储节点的赋值函数表达式和赋值参数。
所述触发器历史记录及异常处理引擎,用于在数据库中存储触发器执行过程中的数据,以及对于执行过程中的异常进行自动化的处理,并支持对异常情况进行重试。
当触发器运行异常时,所述触发器历史记录及异常处理引擎执行异常处理机制,将异常数据写入所述触发器运行日志中,并读取异常处理机制的处理方法,当处理方式为继续运行时,结束当前节点的动作并继续运行触发器的下一节点;当异常处理机制为中止运行时,将触发器运行上下文的内容写入数据库,并从内存中删除触发器运行上下文;同时在触发器界面显示“重跑”选项。此时,用户可对触发器运行日志进行解析,以便于查找触发器的异常原因并进行相应的处理。当用户对异常原因进行处理后可选择“重跑”,之后触发器会在内存中重新生成触发器运行上下文,并将存储在数据库中的触发器运行上下文的数据写回内存中,从而恢复触发器在中止时的运行数据,从中止的节点处继续运行。
触发器运行时,各动作节点在执行过程中产生的数据通过公共能力部分的触发器上下文管理引擎进行管理,执行过程中具体写入的数据由各动作节点的节点能力自行实现。当所述动作节点在执行过程中需要对数据进行赋值和过滤时,使用公共能力的触发器通用赋值过滤引擎实现,将逻辑转换为公式进行计算。所述动作节点在执行过程中的运行记录内容生成、异常判断由该节点的节点能力自行实现,并且接入公共能力的触发器历史记录及异常处理引擎中,由公共能力进行统一的存储和调度。通过这种方式,可将触发器具体的执行动作节点与公共能力进行分离,节点之间无直接的功能耦合,而是通过触发器的上下文管理产生数据的流转,某个节点的功能不再依赖其他节点的功能,从而可独立开发、独立上线、独立使用。
S3、根据触发器节点能力包括的各具体执行逻辑分别创建对应的动作节点。如图2和图3所示,创建动作节点的方法包括以下步骤:
S31、定义动作节点的参数,包括配置参数、节点id和节点类型。当然还可包括节点名称等参数。例如,要新增一个用于删除节点数据的删除数据节点,定义的参数如下:
其中核心的配置为nodeType和deleteNodeReqBO。
S32、设置动作节点的配置界面,并修改触发器保存接口支持上述节点类型的节点;例如,新增了一个删除数据节点,则需要修改触发器保存接口支持node_delete类型的节点。
S33、创建新的类,实现NodeBehavior接口,并在实现类中完成具体的节点执行逻辑。创建DeleteFormBehavior实现NodeBehavior接口,在通用行为接口NodeBehavior中增加实现该动作节点的执行动作的实现类;例如,创建DeleteFormBehavior实现NodeBehavior接口,并在DeleteFormBehavior中增加实现删除节点数据的执行逻辑后的代码如下:
S34、在内存的NodeBehaviorFactory中注册新增的实现类。这里的NodeBehaviorFactory是一个工厂方法,会在系统启动时就自动在内存中创建好不同的节点对象,供系统中所有的触发器使用,在触发器执行过程就仅需从内存的NodeBehaviorFactory中传入触发器类型即可获取对应的执行动作节点对象(即其中的NodeBehavior create(Node<?>node)方法)。避免各个触发器在运行过程中从数据库中调用动作节点的代码,导致运行时间长。例如,在新增了一个删除数据节点后,在内存的NodeBehaviorFactory中注册其实现类的代码如下:
为便于对建立的动作节点进行管理,还可建立触发器执行动作节点列表process_node,所述触发器执行动作节点列表process_node用于存储建立的每一动作节点的信息,在执行所述S34步骤后,还执行以下步骤:
S35、在触发器执行动作节点列表process_node表新增一条数据,用于存储新增的动作节点的信息。
为便于根据不同企业的需求对企业用户的触发器所包括的动作节点进行个性化配置,还可建立动作节点与企业的关系列表process_node_enterprise_relation,process_node_enterprise_relation包括企业id和动作节点id,用于配置企业用户与“高级”类型的动作节点及“定制”类型的动作节点之间的映射关系。当在一企业id下添加“高级”类型的动作节点及“定制”类型的动作节点的id,则建立该动作节点与企业的映射关系;当在一企业id下删除已添加的“高级”类型的动作节点及“定制”类型的动作节点的id,则取消该动作节点与企业的映射关系。
所述触发器执行动作节点列表每条数据均包括节点名称、节点类型标识和节点分类;当然,还可包括节点描述说明,用于简要说明该动作节点的执行动作。所述节点分类包括通用、高级和定制,对于“通用”类型的动作节点,无需在动作节点与企业的关系列表中建立企业用户与动作节点的映射关系,所有用户均具有使用权限;对于“高级”类型的动作节点,用户需要先在动作节点与企业的关系列表中建立企业用户与动作节点的映射关系,与该动作节点建立了映射关系的用户具有使用权限;对于“定制”类型的动作节点,其参数还包括定制该动作节点的企业用户的企业id,只有定制的用户能够建立与该动作节点的映射关系,并在建立映射关系后具有该动作节点的使用权限。
为便于对企业用户和动作节点的关联关系进行管理,系统设置有节点关联页面,进入节点关联页面,选择企业后,可查看该企业已经关联的节点和可关联的节点。
节点关联页面中显示的该企业用户可关联的节点包括:
(1)process_node中节点分类为“高级”的节点;
(2)process_node中节点分类为“定制”且企业id信息为该企业的节点节点关联页面中显示的该企业用户已关联的节点包括:
process_node_enterprise_relation中企业id信息为该企业的全部节点。
为企业增加关联节点时,在节点关联页面中勾选可关联的节点后,点击确定,即可在process_node_enterprise_relation表插入对应的节点关联关系。
在企业需要减少关联节点时,取消对已经关联节点的勾选,点击确定,即可在process_node_enterprise_relation表中删除对应的节点关联记录。
企业用户进入触发器配置页面,选择触发动作后,添加执行动作节点,即可查询到该企业可以使用的动作节点。查询逻辑为:
(1)查询process_node表中类型为“通用”的全部节点
Select*from process_node where type=[通用]
(2)查询process_node_enterprise_relation中当前企业已经关联的节点
Select*from process_node_enterprise_relation where enterprise_id=[当前登录企业id]
并且将两个查询逻辑的结果进行合并、去重处理。这里的去重处理是因为,可能存在原本的高级节点因为使用得十分频繁而被修改成了通用节点,所以可能存在两个查询条件中重复的部分。
特殊情况下,可能存在企业已经在具体的触发器中使用到了某个执行动作节点,但是在企业与执行动作节点的关系中又被去除掉了,这种情况下,在编辑这个触发器时,已经添加的不可用节点不受影响,但是无法再次添加这个节点。
形成实现节点能力的动作节点后,即可采用已有的动作节点配置触发器,具体方法为:
先在可视化配置画布中生成触发节点,当然,也可同时生成结束节点;之后以触发节点作为始节点,以结束节点作为终止节点,从已有的动作节点中选择具有对应执行动作的节点并根据所述父子关系由父至子逐级指向依次添加至所述触发节点和所述结束节点之间,并设置各节点的配置参数,由此形成由触发节点至所述结束节点的触发器执行流程,据此生成触发器。
如图3和图4所示,配置好触发器后,触发器的运行过程如下:
S21、创建触发器核心执行逻辑,当满足触发器的触发条件时,在内存中创建出触发器执行实例,实例化出AutomationExecution和AutomationRuntimeContext的对象。例如,在一个具体实例中,实例化出的AutomationExecution对象如下:
public class AutomationExecutionImpl implements AutomationExecution{
private Node<?>currentNode;
//触发器目前运行到什么节点(即当前正在运行的节点)
private String processInstanceId;
//当前运行的这一次触发器的实例id,自动生成
private AutomationExecuteResult executeResult;
//本节点(指最近一个运行完成的节点)触发器触发后的结果
private String automationId;
//本次触发对应的触发器配置id
private Date createTime;
//本节点的执行开始时间
private Date finishedTime;
//本节点的执行结束时间
private Integer enterpriseId;
//本次触发具体的平台企业id
Private Integer userId;
//产生本次触发器用户,可能为空
}
实例化出的AutomationRuntimeContext对象如下:
public class AutomationRuntimeContext{
private final Automation automation;
//当前触发器的配置,里面就包含本次触发器包含的执行动作节点
private final HistoryManager historyManager;
//运行日志管理对象,负责对日志进行存储
private NodeBehaviorFactory nodeBehaviorFactory;
//触发器执行动作节点的工厂
private Map<String,ContextData>contextValue=new HashMap<>();
//触发器运行上下文,是一个map,key是节点的id,value是运行上下文
Private Map<String,Form>formMap=new HashMap<>();
//触发器运行过程中用到的企业单据数据,算作触发器上下文的一部分
}
AutomationRuntimeContext中的Automation对象的示例如下:
public class AutomationImpl implements Automation{
private AutomationStartEvent startEvent;
//这里是触发器触发事件的信息
private List<Node<?>>nodes;
//这里就是整个触发器需要执行的动作节点信息,有序的列表
}
S22、触发器流程运转引擎从触发器的配置对象Automation中取出触发器执行的第一个动作节点的配置参数,将节点配置参数传入触发器执行动作节点工厂NodeBehaviorFactory,并调用NodeBehavior中该动作节点的实现类方法,可直接获取该执行动作节点的实现类,执行其execute(AutomationExecution execution,AutomationRuntimeContext context))方法。
S23、当动作节点执行完成后,将该动作节点的执行数据写入对象context的触发器运行上下文contextValue(只在原有节点的执行数据的基础上增加数据,会保留原有节点的执行数据);将该动作节点的执行情况(包括日志内容、时长、执行结果)写入对象execution(此时会覆盖execution中之前写入的数据);从而将本节点运行完毕的结果进行记录,便于在下一步写入日志,并记录上下文的数据,以便后续的节点继续使用。
S24、触发器核心执行逻辑拿到S23步骤处理后的execution后,调用运行日志管理对象HistoryManager的日志写入方法将对象execution的内容写入数据库的触发器日志中;并且根据执行结果判断是否存在执行异常,如果存在执行异常则启动异常处理机制;如果执行正常则继续执行后续的动作节点。
S25、当需要继续向下执行时,触发器流程运转引擎从触发器的配置对象Automation中按执行顺序取出当前需执行的动作节点的配置参数,并将上一动作节点的对象execution和对象context的数据传入当前需执行的动作节点中,并调用该节点的核心方法execute,重复上述步骤继续往下执行。
S26、当没有后续的执行动作节点时,结束触发器的执行。
以上步骤实现了触发器流程运转引擎、触发器上下文管理、触发器历史记录及异常处理。并且这部分内容与具体每个动作节点的功能实现无关,实现了节点的解耦。
下面以一个实例进行说明,假设客户希望支持一个新的能力:删除特定的单据,当客户删除发货单时,同步将这个发货单分解出物流单据也一并自动删除。则可以通过触发节点、获取数据节点和删除数据节点配置出触发器以实现该功能。
如图5所示,先在可视化配置画布上设置触发节点的触发方式和触发条件(触发节点为自动添加),在该实施中,将触发方式设置为表单触发,触发条件设置为发货单(表单)被删除。
然后在触发节点下添加一个获取数据节点作为触发节点的子节点(即在触发节点后执行的节点),配置获取数据节点的获取方式为从表单获取,此时,图中“选择表单”的下拉菜单会显示数据库中该企业用户的所有表单,从中选择物流单作为获取数据的表单;之后,将数据过滤规则设置为物流单中发货单号(字段)的数据等于触发节点(触发节点为获取数据节点的前置节点)中发货单(表单)中发货单号(字段)的数据。
如图6所示,之后在获取数据节点下添加一个删除数据节点作为其子节点,并设置删除数据节点的删除对象为获取数据节点(获取数据节点为删除数据节点的前置节点)中的物流单(表单)。
假设记录第一个节点id为aaa,第二个节点id为bbb,第三个节点id为ccc。当删除一张发货单时,该触发器被触发,并且在触发器运行上下文中写下触发节点的运行数据,此时,触发器运行上下文包括以下内容:
aaa:发货单,id为1234567,发货单号为:FH20220111001。
之后,获取数据节点运行,从触发器运行上下文中获取aaa节点的发货单号FH20220111001,并且作为查询条件去物流单中查找发货单号等于FH20220111001的数据,假设一共查询到两条数据,记录执行日志为成功,记录数据到触发器运行上下文中,此时触发器运行上下文的内容如下:
aaa:发货单,id为1234567,发货单号为:FH20220111001。
bbb:物流单,id为654321、654322。
之后,删除数据节点运行,从触发器运行上下文中获取bbb节点写入的数据(即物流单,id为654321、654322);并调用删除数据节点对应的单据删除接口,删除掉对应id的物流单数据。记录执行日志为成功,记录数据到触发器运行上下文中,此时触发器运行上下文的内容如下:
aaa:删除 发货单,id为1234567,发货单号为:FH20220111001。
bbb:找到 物流单,id为654321、654322。
ccc:删除 物流单,id为654321、654322。
本实施例中,通过预先创建动作节点统一的通用行为接口NodeBehavior,并定义通用行为接口的核心方法execute,可快速开发触发器新的动作节点,新开发的动作节点对现有节点不会产生影响,因此无需过多考虑现有动作节点的功能,仅需要考虑新增的节点需要存储什么日志、记录什么上下文内容、判断哪些异常情况。可做到可快速响应需求。另外,不同的企业可以拥有不同的动作节点,从而实现不同企业的功能差异,甚至能够实现动作节点的定制。当某些节点功能不满足要求,又不能够直接修改时,可选择复制出一个新的节点,在原有代码功能上迭代开发,可避免对现有节点的改动,降低风险。
本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,通过计算机执行所述计算机程序时执行上述节点可插拨的触发器实现方法的部分或全部的实际操作,从而实现上述实施例中任意一项实施例的功能。
最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。
Claims (10)
1.一种节点可插拨的触发器实现方法,其特征在于,包括以下步骤:
S1、触发器的运行逻辑包括公共能力和节点能力两个部分,使触发器的动作节点通过公共能力产生数据流转;所述公共能力包括触发器核心执行逻辑及各动作节点的通用执行逻辑,所述节点能力包括执行各动作节点的具体执行逻辑;
S2、根据触发器公共能力包括的核心执行逻辑及各通用执行逻辑分别创建对应的引擎;
S3、根据触发器节点能力包括的各具体执行逻辑分别创建对应的动作节点。
2.根据权利要求1所述的节点可插拨的触发器实现方法,其特征在于,实现所述公共能力的引擎包括:
触发器流程运转引擎,用于实现触发器核心执行逻辑,驱动触发器按照触发器配置的流程图依次运行;
触发器运行上下文管理引擎,用于在内存中建立触发器运行上下文,在触发器运行过程中将节点对数据的操作记录存储在触发器运行上下文中,供后续的执行节点引用;
触发器通用赋值过滤引擎,使用统一的计算公式模型,对数据进行过滤或赋值;
触发器历史记录及异常处理引擎,用于在数据库中存储触发器执行过程中的数据,以及对于执行过程中的异常进行自动化的处理。
3.根据权利要求2所述的节点可插拨的触发器实现方法,其特征在于,所述动作节点在执行过程中产生的数据通过公共能力部分的触发器上下文管理引擎进行管理,执行过程中具体写入的数据由各动作节点的节点能力自行实现;
所述动作节点在执行过程中需要对数据进行赋值和过滤时,使用公共能力的触发器通用赋值过滤引擎实现,将逻辑转换为公式进行计算;
所述动作节点在执行过程中的运行记录内容生成、异常判断由该节点的节点能力自行实现,并且接入公共能力的触发器历史记录及异常处理引擎中,由公共能力进行统一的存储和调度。
4.根据权利要求1所述的节点可插拨的触发器实现方法,其特征在于,还包括以下步骤:
S211、定义对象类型AutomationExecution和对象类型AutomationRuntimeContext;其中,对象类型AutomationExecution用于存储触发器的运行记录,参数包括触发器目前运行的节点,以及上一运行节点开始执行的时间、结束执行的时间和执行结果;
对象类型AutomationRuntimeContext用于存储触发器的配置参数和触发器运行上下文,参数包括触发器的配置对象Automation、运行日志管理对象HistoryManager、触发器执行动作节点工厂NodeBehaviorFactory和触发器运行上下文contextValue;所述配置对象Automation包括本次触发器中的所有动作节点的执行顺序及节点的配置参数;
S212、创建动作节点统一的通用行为接口NodeBehavior,并定义通用行为接口的核心方法execute,通用行为接口的核心方法execute的参数包括一个AutomationExecution类型的对象execution和一个AutomationRuntimeContext类型的对象context。
5.根据权利要求4所述的节点可插拨的触发器实现方法,其特征在于,创建动作节点的方法包括以下步骤:
S31、定义动作节点的参数;
S32、设置动作节点的配置界面;
S33、创建新的类,实现NodeBehavior接口,并在实现类中完成具体的节点执行逻辑;
S34、在内存的NodeBehaviorFactory中注册新增的实现类。
6.根据权利要求5所述的节点可插拨的触发器实现方法,其特征在于,触发器的运行过程包括以下步骤:
S21、创建触发器核心执行逻辑,当满足触发器的触发条件时,在内存中创建出触发器执行实例,实例化出AutomationExecution和AutomationRuntimeContext的对象;
S22、从触发器的配置对象Automation中取出触发器执行的第一个动作节点的配置参数,将节点配置参数传入触发器执行动作节点工厂NodeBehaviorFactory,并调用通用行为接口NodeBehavior中该动作节点的实现类方法,执行该动作节点的核心方法execute;
S23、当动作节点执行完成后,将该动作节点的执行数据写入对象context的触发器运行上下文contextValue;将该动作节点的执行情况写入对象execution;
S24、触发器核心执行逻辑调用运行日志管理对象HistoryManager的日志写入方法将对象execution的内容写入数据库的触发器日志中;并根据执行结果判断是否存在执行异常,如果存在执行异常则启动异常处理机制;如果执行正常则继续执行后续的动作节点;
S25、当需要继续向下执行时,从触发器的配置对象Automation中按执行顺序取出当前需执行的动作节点的配置参数,并将上一动作节点的对象execution和对象context的数据传入当前需执行的动作节点中,并调用该节点的核心方法execute,重复上述步骤继续往下执行。
S26、当没有后续的执行动作节点时,结束触发器的执行。
7.根据权利要求5所述的节点可插拨的触发器实现方法,其特征在于,还包括建立触发器执行动作节点列表,所述触发器执行动作节点列表用于存储建立的每一动作节点的信息,在执行所述S34步骤后,还执行以下步骤:
S35、在触发器执行动作节点列表中新增一条数据,用于存储新增的动作节点的信息。
8.根据权利要求7所述的节点可插拨的触发器实现方法,其特征在于,所述触发器执行动作节点列表每条数据均包括节点名称、节点类型标识和节点分类,所述节点分类包括通用、高级和定制,对于“通用”类型的动作节点,所有用户均具有使用权限;对于“高级”类型的动作节点,与该动作节点建立了映射关系的用户具有使用权限;对于“定制”类型的动作节点,其参数还包括定制该动作节点的企业用户的企业id,只有定制的用户能够建立与该动作节点的映射关系,并在建立映射关系后具有该动作节点的使用权限。
9.根据权利要求8所述的节点可插拨的触发器实现方法,其特征在于,还包括建立动作节点与企业的关系列表,所述动作节点与企业的关系列表包括企业id和动作节点id,用于在企业id下添加“高级”类型的动作节点及“定制”类型的动作节点的id,以建立企业用户与“高级”类型的动作节点及“定制”类型的动作节点之间的映射关系。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至9中任一项所述的节点可插拨的触发器实现方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210087371.2A CN114327414B (zh) | 2022-01-25 | 2022-01-25 | 节点可插拨的触发器实现方法及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210087371.2A CN114327414B (zh) | 2022-01-25 | 2022-01-25 | 节点可插拨的触发器实现方法及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114327414A true CN114327414A (zh) | 2022-04-12 |
CN114327414B CN114327414B (zh) | 2022-11-15 |
Family
ID=81028601
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210087371.2A Active CN114327414B (zh) | 2022-01-25 | 2022-01-25 | 节点可插拨的触发器实现方法及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114327414B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6834054B1 (en) * | 1999-04-12 | 2004-12-21 | Alcatel | Method of supporting shortcuts |
CN105893055A (zh) * | 2016-04-22 | 2016-08-24 | 广东凯通软件开发有限公司 | 流程引擎平台化触发方法 |
US9552854B1 (en) * | 2015-11-10 | 2017-01-24 | Intel Corporation | Register files including distributed capacitor circuit blocks |
CN111708834A (zh) * | 2020-05-25 | 2020-09-25 | 苏州浪潮智能科技有限公司 | 一种业务配置数据同步的方法、系统、设备及介质 |
CN112138397A (zh) * | 2020-09-30 | 2020-12-29 | 网易(杭州)网络有限公司 | 一种触发器管理方法、装置、计算机设备和存储介质 |
CN112860740A (zh) * | 2019-11-27 | 2021-05-28 | 中兴通讯股份有限公司 | 一种触发器实现的方法和装置 |
CN113900638A (zh) * | 2021-11-23 | 2022-01-07 | 重庆允成互联网科技有限公司 | 可视化触发器配置方法及存储介质 |
-
2022
- 2022-01-25 CN CN202210087371.2A patent/CN114327414B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6834054B1 (en) * | 1999-04-12 | 2004-12-21 | Alcatel | Method of supporting shortcuts |
US9552854B1 (en) * | 2015-11-10 | 2017-01-24 | Intel Corporation | Register files including distributed capacitor circuit blocks |
CN105893055A (zh) * | 2016-04-22 | 2016-08-24 | 广东凯通软件开发有限公司 | 流程引擎平台化触发方法 |
CN112860740A (zh) * | 2019-11-27 | 2021-05-28 | 中兴通讯股份有限公司 | 一种触发器实现的方法和装置 |
CN111708834A (zh) * | 2020-05-25 | 2020-09-25 | 苏州浪潮智能科技有限公司 | 一种业务配置数据同步的方法、系统、设备及介质 |
CN112138397A (zh) * | 2020-09-30 | 2020-12-29 | 网易(杭州)网络有限公司 | 一种触发器管理方法、装置、计算机设备和存储介质 |
CN113900638A (zh) * | 2021-11-23 | 2022-01-07 | 重庆允成互联网科技有限公司 | 可视化触发器配置方法及存储介质 |
Non-Patent Citations (2)
Title |
---|
XIAOQING LI等: "Event-Triggered Control for Discrete-Time Semi-Markovian Jump Neural Networks Considering Probabilistic Actuator Faults", 《2020 4TH INTERNATIONAL CONFERENCE ON ROBOTICS AND AUTOMATION SCIENCES (ICRAS)》 * |
宋瑛瑛等: "基于消息的气象服务数据加工流水线设计与应用", 《气象科技进展》 * |
Also Published As
Publication number | Publication date |
---|---|
CN114327414B (zh) | 2022-11-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107370786B (zh) | 一种基于微服务架构的通用信息管理系统 | |
US6275977B1 (en) | Application cooperation method and apparatus | |
CN111814089A (zh) | 一种页面渲染的方法、装置、渲染服务器和存储介质 | |
CN111752925B (zh) | 一种可视化数据管理方法 | |
JP2002259643A (ja) | ビジネスプロセス制御プログラム | |
CN110333889A (zh) | 容器服务用户集群的升级方法及系统 | |
CN110659261A (zh) | 一种数据挖掘模型发布方法及模型和模型服务管理方法 | |
CN110888736A (zh) | 一种基于容器云平台的应用管理方法、系统及相关组件 | |
CN110908793A (zh) | 长时任务执行方法、装置、设备及可读存储介质 | |
CN109408322B (zh) | 一种云平台的自动业务流程实现方法 | |
CN112613832B (zh) | 一种基于有限状态机的轻量级工作流组件及其处理方法 | |
CN114327414B (zh) | 节点可插拨的触发器实现方法及计算机可读存储介质 | |
CN112835638A (zh) | 一种基于嵌入式应用程序的配置信息管理方法及装置 | |
CN114385672A (zh) | 信息处理方法及装置、电子设备及存储介质 | |
CN115879756A (zh) | 一种基于表单的动态工作流设计方法 | |
CN112486461B (zh) | 一种基于springboot框架的信息处理系统 | |
CN115544050A (zh) | 操作日志记录方法、装置、设备及存储介质 | |
CN114490694A (zh) | 一种业务规则处理方法、装置、服务器及存储介质 | |
CN113434119A (zh) | 一种基于流程控制的业务处理方法及其装置 | |
CN110968467A (zh) | 一种gpu和算法的远程自动测试方法 | |
CN110610371A (zh) | 潜在用户分析方法、系统和计算机可读存储介质 | |
JP2001134424A (ja) | システムパラメタ作成方法、システムパラメタ作成装置、システムパラメタ作成プログラムを記録したコンピュータ読み取り可能な記録媒体及びシステムパラメタ作成データを格納したコンピュータ読み取り可能な記録媒体 | |
CN116483841B (zh) | 一种基于React框架的表单数据管理方法及装置 | |
CN114416070B (zh) | 用于可视化配置触发器的节点组件及装置 | |
CN113010196B (zh) | 补丁筛选方法、装置、设备和存储介质 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |