操作上的服务插件、服务端服务

您所在的位置:网站首页 productlineid 操作上的服务插件、服务端服务

操作上的服务插件、服务端服务

2024-07-16 19:43| 来源: 网络整理| 查看: 265

最近与同事们讨论了,操作上的服务插件、服务端服务有什么区别?谁先执行?

写篇文章总结一下讨论结果。

服务插件、服务端服务的添加入口,如下图:

服务插件介绍

贯穿整个操作的执行流程,操作涉及到事务的提交,在事务的各个阶段都会调用插件的事件进行通知。

使用方式:

继承AbstractOperationServicePlugIn类

常用事件:

beforeExecuteOperationTransaction

操作校验通过之后,开启事务之前,触发此事件

beginOperationTransaction

操作校验通过,开启了事务,准备把数据提交到数据库之前触发此事件

endOperationTransaction

数据已经提交到数据库之后,事务未提交之前,触发此事件

rollbackOperation

操作事务提交失败,事务回滚之后触发此事件

afterExecuteOperationTransaction

操作执行完毕,事务提交之后,触发此事件

参考文档:

https://developer.kingdee.com/article/225548911073404160?productLineId=29&isKnowledge=2

https://developer.kingdee.com/article/225570386111660544

服务端服务介绍

我个人认为,本质上也是一种服务插件,算是苍穹内置的。

服务端服务如下图:

服务端服务在xml文件中注册,这个xml文件是内置在苍穹jar包里面的,包名通常是 bos-ext-xxx(业务云标识).jar

例如:

AutoGenerateScmcOrder (“电商订单自动生成供应链采购订单”操作),放在了bos-ext-scm-1.0.jar下面,以及他的注册文件OpBizRule_scm.xml。

可以在源码中看到,他也是从AbstractOperationServicePlugIn层层派生下去的。

来到AutoGenerateScmcOrder的父类,可以看到是在beforeExecuteOperationTransaction中调用setMServiceParam这个抽象方法的,即AutoGenerateScmcOrder的主体的业务逻辑,即 生成供应链采购订单。

谁先被调用?

在服务插件、服务端服务是在EntityOperateService中被调用的。

plugInProxy、opBizRuleService两个代理对象分别代理了 服务插件、服务端服务插件的代理类。

虽然调用顺序是服务插件先被调用,但是,在不同的服务端服务上执行主体业务逻辑是不一样的。

例如:

像是“自动下推”操作(实现类AutoPushOpAction),“电商订单自动生成供应链采购订单”操作(实现类AutoGenerateScmcOrder), 他们的执行主体业务逻辑的地方不一样。

上图的“电商订单自动生成供应链采购订单”操作在beforeExecuteOperationTransaction事件中执行。

“自动下推”是在afterExecuteOperationTransaction里面执行主体业务逻辑。

总结

1.服务插件、服务端服务都是由AbstractOperationServicePlugIn的派生类实现的。

2.服务插件、服务端服务的执行顺序要结合具体的操作业务逻辑。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3