技术新讯 > 计算推算,计数设备的制造及其应用技术 > 基于BPMN错误边界事件的业务单据处理方法与系统与流程  >  正文

基于BPMN错误边界事件的业务单据处理方法与系统与流程

  • 国知局
  • 2024-10-09 16:35:02

本发明涉及工作流数据处理,特别涉及一种基于bpmn错误边界事件的业务单据处理方法与系统。

背景技术:

1、当前,越来越多的业务场景使用基于业务流程建模符号bpmn2.0(businessprocess modeling notation)的通用流程建模技术实现业务流转,比如:采购质量报检、车间综合评价流程、普通分销订货策略、门店等级评测方案、运费结算复核流程等等诸如此类,通过与工作流的配合,能够大大提升业务的处理效率。

2、一般来讲,工作流与业务的交互分为两种情况:流程办理与业务办理。在实际业务场景中,业务操作与工作流操作解耦,必然带来数据一致性的问题。

3、流程办理不需要考虑业务单据之间的交互,待办审批的时候,直接通过iframe标签内嵌业务单据,仅仅用于跳转而已;

4、业务办理则需要在代码中通过远程过程调用协议rpc调用(远程过程调用协议rpc调用一般通过网关gateway转发实现)工作流的运行任务runtask()接口,除了要考虑业务单据之间的交互,还要考虑业务单据与工作流之间的交互。

5、因此,业内普遍做法是通过网关gateway远程调用工作流接口,业务单据到底是提交还是回滚,取决于网关gateway(用于实现不同网络之间的通信和数据转发交换)转发工作流接口之后的响应结果状态码。

6、如附图1所示,如果响应的状态码是200(200 是http协议中的状态码,表示服务器成功处理了客户端请求),那么业务侧执行业务单据提交动作;

7、如果响应状态是非200,那么业务侧执行业务单据回滚动作。

8、但在实际应用中,这种解决方案存在潜在的未知异常风险,往往会出现“假失败,真成功”的情况。

9、具体来说,业务侧先通过网关geteway调用工作流接口,然后工作流将调用结果状态转发给gateway,gateway再将结果状态转发给业务侧;业务侧依据网关gateway返回的状态结果,判断业务单据到底是提交还是回滚,较为被动;并且中间交互过程完全依托于网络通信的好坏,网络通信出现延迟或网络拥堵、抖动,都可能会出现网关gateway转发结果异常,明明工作流调用成功,流程节点状态也更新成功,但网关gateway返回业务侧却是网络延迟或其他异常,导致业务单据回滚,业务单据状态与流程节点不一致的情况。业务侧无法完全信任网关gateway的响应结果状态,业务侧处理业务单据较为被动,并且,缺乏行之有效性的日志审计手段,无法准确记录二者数据状态,给业务带来巨大的隐患。

10、因此,如何更好的解决业务办理类型中业务单据与流程节点状态一致性,是当前实际业务场景中亟需解决的问题。

11、为了更好解决业务单据与流程节点状态一致性问题,本发明提出了一种基于bpmn错误边界事件的业务单据处理方法与系统。

技术实现思路

1、本发明为了弥补现有技术的缺陷,提供了一种简单高效的基于bpmn错误边界事件的业务单据处理方法与系统。

2、本发明是通过如下技术方案实现的:

3、一种基于bpmn错误边界事件的业务单据处理方法,其特征在于:使用业务流程建模符号bpmn来设计业务流程,将错误边界事件嵌入子流程、调用者活动或者自定义节点;

4、当错误边界事件依附的流程活动服务任务servicetask(用于自动执行预定义的服务或操作)节点抛出bpmnerror错误后,错误事件被捕获,触发边界事件,工作流直接调用业务侧可执行接口,一并携带流程节点状态数据通知业务侧,确保业务单据与流程节点状态一致;同时,将调用过程通过日志记录的形式实现业务单据与流程节点状态的跟踪留痕,便于后续的复盘审计。

5、包括以下步骤:

6、步骤s1、定义目标业务组件可执行接口,接口路径从前向后依次按照业务类型,业务编码,v,版本号和/upd组成,其中版本号按照同类型业务从1开始自增叠加,所有接口请求方式全部设定为发送post,用于接下来的业务单据状态更新动作;

7、步骤s2、将各业务组件目标可执行接口维护到x1平台字典列表中,当x1平台初始化时,将字典列表转换成json(javascript object notation,javascript对象简谱)串,缓存到远程字典服务器redis(remote dictionary server)缓存数据库中,供服务任务servicetask节点订阅使用;

8、所述步骤s2中,字典列表json串在远程字典服务器redis缓存数据库中的键key为业务流程建模符号应用服务接口队列列表bpmn_api_queue_list;

9、业务流程建模符号应用服务接口队列列表bpmn_api_queue_list中的每一项是一个由键值对key-value组成的字典项,用来维护业务目标可执行接口属性;其中,字典键key表示某一个业务目标可执行接口唯一编码,从前向后依次由前缀bpmn_api_,业务类型,业务编码,v与业务方法增量组成,与步骤s1中定义的接口路径保持一致,字典值value表示对应接口的实际url地址。

10、步骤s3、提供边界事件软件开发包sdk(software development kit)插件,利用边界事件软件开发包sdk插件封装边界事件border_evt;

11、边界事件border_evt根据业务实际情况进行扩展,对流程引擎一侧做到可插拔与动态升级;

12、流程引擎bpm-server(business process managementserver)依赖边界事件软件开发包sdk插件,在流程引擎模块启动时,将边界事件border_evt实例化为一个bean,初始化到spring容器中,为接下来流程节点订阅做准备;

13、步骤s4、按照业务实际场景需求自定义流程节点,节点类型至少包含用户任务节点<bpmn2: usertask>和服务任务节点<bpmn2: servicetask>两类,

14、其中,用户任务节点<bpmn2: usertask>的办理方式为流程办理,不需要与业务进行交互;

15、服务任务节点<bpmn2: servicetask>为目标流程节点,办理方式为业务办理,需要与业务交互;

16、所述步骤s4中,选择目标流程节点,并为其选择表达式方式,将其绑定为:

17、${border_evt.exe(execution,业务目标可执行接口字典key)};

18、其中,执行上下文方法exe()为bean实例边界事件border_evt封装的内部方法,用于捕获错误边界事件,执行具体业务逻辑;

19、表达式引用bean实例必须以$开头,以}结尾;

20、执行execution表示工作流内置的流程环境变量,业务目标可执行接口字典键key取自远程字典服务器redis缓存数据库中业务流程建模符号应用服务接口队列列表bpmn_api_queue_list字典列表中的某一项(根据实际业务场景选取);

21、步骤s5、工作流一侧,执行流程引擎bpm-server,捕获错误边界事件;

22、当业务流程进行到目标流程节点时,流程引擎bpm-server执行以下操作:

23、步骤s5.1、流程引擎bpm-server从spring容器获取边界事件border_evt实例,利用java反射机制调用执行上下文方法exe(),在执行上下文方法exe()中执行工作流的运行任务方法runtask(),完成流程通过操作;

24、步骤s5.2、执行上下文方法exe()根据运行任务方法runtask()的运行结果(运行结果规定为bpmresult<list<taskdto>>,即业务流程结果<列表<任务数据传输对象)来决定是否抛出bpmnerror错误边界异常:

25、若业务流程结果bpmresult响应状态码code为200,则不触发bpmnerror错误边界事件,继续流转到下一节点;

26、若业务流程结果bpmresult响应状态码非200,则直接抛出bpmnerror错误,触发错误边界事件,此时,执行上下文方法exe()执行以下操作:

27、步骤s5.2.1、执行上下文方法exe()执行获取执行变量方法execution.getvariable(“bpmn_busi_params”),获取流程实例变量中传过来的业务单据参数以及流程实例相关参数;

28、步骤s5.2.2、执行上下文方法exe()定义一个流程状态参数flowstatus,并将其写回到前一步骤s5.2.1获取到的流程实例参数中,用以标记当前流程节点的实际状态;

29、步骤s5.2.3、执行上下文方法exe()根据目标流程节点预先订阅的业务目标可执行接口字典键key,调用通过键获取字典值方法dictutil. getdictvaluebykey(业务目标可执行接口字典key)获取业务目标可执行接口统一资源定位符url;此时,执行上下文方法exe()使用httpclient客户端携带获取到的业务参数,连同流程实例参数一起远程调用业务目标可执行接口,实现业务单据状态更新动作;

30、步骤s6、业务组件一侧,各目标业务组件内置日志记录sdk软件开发包,日志记录sdk软件开发包提供统一日志记录逻辑;当工作流触发bpmnerror错误边界事件时,回调业务目标可执行接口,业务端接口的执行过程以json串形式存储下来,业务目标接口返回结果定义为baseresult<object>,即基础结果<对象>;

31、若基础结果baseresult响应码code为200,则表示业务单据状态更新成功,将json串中的业务单据状态busistatus更新为流程节点状态flowstatus,表示本次回调业务单据状态成功;

32、若基础结果baseresult响应码code为非200,则表示业务单据状态更新出现未知异常,将json串中的业务单据状态busistatus更新为99,流程节点状态flowstatus更新为当前流程节点实际状态,表示本次回调业务单据状态失败。

33、进一步的,所述步骤s6中,调用sdkk软件开发包的跟踪日志方法logutil.tracelog(json串)将步骤s5~步骤s6的调用过程生成的实际json结果串,并存入到日志库,便于后续的人工审计和二次补偿调用。

34、用于实现本发明基于bpmn错误边界事件的业务单据处理方法的系统,包括:

35、目标业务组件可执行接口定义模块,用于定义目标业务组件可执行接口,接口路径从前向后依次按照业务类型,业务编码,v,版本号和/upd组成,其中版本号按照同类型业务从1开始自增叠加,所有接口请求方式全部设定为发送post;

36、目标业务组件可执行接口发布模块,用于将目标业务组件可执行接口维护到x1平台字典列表中,当x1平台初始化时,将字典列表转换成json(javascript objectnotation,javascript对象简谱)串,缓存到远程字典服务器redis(remote dictionaryserver)缓存数据库中,供服务任务servicetask节点订阅使用;

37、边界事件软件开发包sdk插件模块,用于定义边界事件border_evt,并将其依赖注入到流程引擎bpm-server中,在流程引擎模块启动时,将边界事件border_evt实例化为一个bean,初始化到spring容器中,为接下来流程节点订阅做准备;

38、工作流节点订阅可执行接口模块,负责按照业务实际场景需求自定义流程节点,选择类型为服务任务节点servicetask的目标节点,并为其选择表达式方式,按照业务流程建模符号bpmn2.0定义规范,将目标节点绑定为:

39、${border_evt.exe(execution,'业务目标可执行接口字典key ')};

40、工作流边界事件捕获及触发模块,负责在工作流一侧执行流程引擎bpm-server,捕获错误边界事件,工作流根据运行任务方法runtask()执行结果,来决定是否抛出bpmnerror错误边界事件以及是否调用业务单据接口,通知业务侧执行相应逻辑;

41、业务单据处理及日志审计模块,负责在业务组件一侧的各目标业务组件内置日志记录sdk软件开发包,日志记录sdk软件开发包提供统一日志记录逻辑;根据实际执行情况更新业务单据状态busistatus和流程节点状态flowstatus,将执行过程封装为json串入到日志库,进而保证二者状态一致。

42、一种基于bpmn错误边界事件的业务单据处理设备,其特征在于:包括存储器和处理器;所述存储器用于存储计算机程序,所述处理器用于执行所述计算机程序时实现如上所述的方法步骤。

43、一种可读存储介质,其特征在于:所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的方法步骤。

44、本发明的有益效果是:该基于bpmn错误边界事件的业务单据处理方法与系统,提供了一种灵活的业务单据与流程节点绑定和订阅关系,将业务单据的操作与流程处理的操作在逻辑上完全解耦,在不破坏业务逻辑结构的基础上实现了业务数据回滚,解决了业务单据与流程节点状态一致性问题,在保持业务完整性的同时又对业务和流程无感,能够满足不同业务场景下业务逻辑的横向扩展,对流程引擎无代码侵入影响。

本文地址:https://www.jishuxx.com/zhuanli/20240929/313449.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。