如何通过插件开发的方式在业务关联中实现自定义的“上链条件”?
问题描述:
现在区块链存证服务是通过【业务关联】模块中的“上链条件”来实现对原始业务单据的过滤,即只有满足上链条件的业务单据才会进入后面的字段映射、执行上链等流程。当前区块链存证服务中的“上链条件”标准实现只能对业务对象的“单据字段”进行一些通用性的设置,类似于单据列表中的“条件过滤”。而在客户实际上链场景中,往往有很多复杂的“上链条件”需要判断,就只能通过插件开发的方式来实现了。
解决方案:
1、进入“区块链存证服务”的业务关联,在“上链条件”切换页签为“自定义”。
2、点击并打开“微服务参数”设置弹窗。
其中:
“业务云”选择插件所在的云,当为空时默认调用的是平台微服务;
“业务应用”选择插件所在的应用;
“服务名称”为实现了 kd.bsc.bea.mservice.api.BizModelDataQueryService 接口的微服务名称;
“方法名”固定为 query,无需填写。
3、点击并确认微服务参数后,点击“确定”,并保存业务关联。则采用此“业务关联”的上链任务在启动执行时,将不再调用区块链存证服务的标准“上链条件”,而是通过微服务调用的方式直接调用用户自定义实现的该微服务方法。
需要注意的是,如果使用了自定义插件方式来实现“上链条件”,则该业务关联中的标准上链条件将不会生效(即使已经设置了部分条件)。同时业务关联中的“关联查询”功能不会调用“自定义插件”,即“关联查询”将直接查看的是原始业务单据列表页。
关于微服务:金蝶云·苍穹平台中是以应用为最小单位来提供服务的,因此根据云(cloudid)、应用(appid)即可唯一确定一套服务,所以在业务上可以某服务注册到一个应用下的服务工厂类ServiceFactory中,即可被其他应用所调用。为了实现“上链条件”的自定义插件,必须实现 kd.bsc.bea.mservice.api.BizModelDataQueryService 接口,即:
public interface BizModelDataQueryService { List<DynamicObject> query(Long mappingPkId, Long lastStcTime , String billNo); }
可以看到,query方法主要需要实现对“待上链”业务数据的查询,即通过此接口给定的“输入参数”以及其他自定义实现的方法,完成对业务数据的“条件过滤”。其中:
mappingPkId 是运行时调用此方法的“业务关联”主键,因此可以通过这个参数查询业务关联的其他基本信息等上下文(例如:“业务关联”所关联的“存证实体”或“业务对象”等);
lastStcTime 是上链任务“上一次触发上链”的时间,如果上链任务第一次执行则传入的是“历史数据上链起点”的时间,实现自定义控件时可以依据此字段进行一些时间相关的过滤,例如在我们的标准实现中对于“定时任务”类型的上链任务,会默认将单据的“修改时间”与此参数进行比较,以避免未更新的数据重复上链;
billno 是在“事件触发”类型的上链任务根据事件订阅所传递进来的参数,一般为业务对象的单据编号,而对“定时任务”类型的上链任务此参数传入时为空(也包括上链任务第一次执行时的“历史数据上链”);
最终的返回参数是一个 List,即根据业务自定义的上链条件所查询得到的“待上链”的全部业务单据数据,一条单据数据记录在一个DynamicObject类型中。
更多关于区块链存证服务的“事件触发”存证上链,见文章:
https://club.kdcloud.com/questions/215842974327500032/answers/215842974361054464
更多关于苍穹的自定义微服务调用,见文章:https://club.kdcloud.com/article/82065157714706944
如何通过插件开发的方式在业务关联中实现自定义的“上链条件”?
本文2024-09-23 01:11:46发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-144385.html