事件触发服务流程空跑原创
3人赞赏了该文章
552次浏览
编辑于2023年04月19日 11:44:19
需求场景:
针对供应链云库存管理中大数据的单据,在数据传输的时候,部分接口会创建事件触发服务流程,多个接口的触发事件都是同一个单据的"审核"或者"提交"...操作,当一个单据触发操作的时候存在多个接口同时调用,单据只会从其中一个接口传输,其它接口同步被调用,造成接口被触发调用但未传输数据。
解决步骤:
1.在单据操作控件上添加操作代码
添加操作代码,在单据的操作代码中设置每个接口触发的操作代码,在选择操作类型时,选"空操作",不用将添加的操作代码作为新操作放在列表中,添加到当前单据的操作中即可。
2.在操作上添加触发逻辑
本文实例中的在"审核"操作上添加了操作插件,并且在操作插件中添加了触发joggle的条件,满足条件的数据触发joggle操作,当触发joggle操作的时候,接口上绑定操作的接口才会被触发。
package xx.scmc.im.opplugin.saloutbill; import kd.bos.dataentity.OperateOption; .......... import java.util.List; import java.util.stream.Collectors; /** * @Author: * @CreateTime: * @Description: **/ public class SalOutAuditOP extends AbstractOperationServicePlugIn { @Override public void onPreparePropertys(PreparePropertysEventArgs e) { super.onPreparePropertys(e); e.getFieldKeys().add("billtype"); e.getFieldKeys().add("customer"); } @Override public void afterExecuteOperationTransaction(AfterOperationArgs e) { DynamicObject[] dataEntities = e.getDataEntities(); OperateOption auditOption = OperateOption.create(); List<DynamicObject> filterdate= Arrays.stream(dataEntities).filter(T -> "im_saloutbill_BT".equals(T.getString("billtype.number")) && "643".equals(T.getString("biztype.number"))).collect(Collectors.toList()); if (!(filterdate.isEmpty())){ //触发dojoggle操作 OperationServiceHelper.executeOperate("dojoggle", "im_saloutbill", filterdate.toArray(new DynamicObject[0]), auditOption); } } }
3.在接口处修改触发事件
将之前触发事件由审核,修改成joggle事件。
然后就实现满足条件才调接口,不会随便触发接口,当然本文就记录了其中一种方法,后续有其它好办法,欢迎留言评论,经测试可行,会完善文章。
推荐阅读