事件触发服务流程空跑原创
金蝶云社区-云鳞
云鳞
3人赞赏了该文章 552次浏览 未经作者许可,禁止转载编辑于2023年04月19日 11:44:19

需求场景:

       针对供应链云库存管理中大数据的单据,在数据传输的时候,部分接口会创建事件触发服务流程,多个接口的触发事件都是同一个单据的"审核"或者"提交"...操作,当一个单据触发操作的时候存在多个接口同时调用,单据只会从其中一个接口传输,其它接口同步被调用,造成接口被触发调用但未传输数据。

解决步骤:

   1.在单据操作控件上添加操作代码

       添加操作代码,在单据的操作代码中设置每个接口触发的操作代码,在选择操作类型时,选"空操作",不用将添加的操作代码作为新操作放在列表中,添加到当前单据的操作中即可。


image.png

   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事件。


image.png


然后就实现满足条件才调接口,不会随便触发接口,当然本文就记录了其中一种方法,后续有其它好办法,欢迎留言评论,经测试可行,会完善文章。


赞 3