单据的删除,反审核和作废等操作不希望反写回滚的正确做法

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

单据的删除,反审核和作废等操作不希望反写回滚的正确做法

1 业务场景

用户通过转换规则由源单生成目标单后(以目标单保存时反写为例),在目标单配置了保存时的反写规则,在目标单保存时触发反写对源单的数据进行调整。当用户删除目标单时会触发反写回滚,导致之前对源单调整的数据回退,用户可以通过实现反写插件的方式来避免这个问题。(注意:通过删除反写规则的方式无法解决该问题,而且对于已经发生业务的反写规则删除后会有不可逆的风险。)

2 使用说明

2.1 设计插件

首先,需要派生kd.bos.entity.botp.plugin.AbstractWriteBackPlugIn类,来创建干预反写的插件类。

import kd.bos.entity.botp.plugin.AbstractWriteBackPlugIn;

public class AvoidRollbackPlugin extends AbstractWriteBackPlugIn {}

在此类中实现删除时避免反写回滚的逻辑,需要通过重写afterCommitAmount事件,可以在这个事件里面动态调整反写量;

例:实现删除目标单时不修改源单数据(即避免反写回滚)。

import kd.bos.entity.botp.plugin.args.AfterCommitAmountEventArgs;

import java.util.Arrays;
import java.util.List;

public class AvoidRollbackPlugin extends AbstractWriteBackPlugIn{

  private final List<String> rules = Arrays.asList("1691222118181677056");

  /**
    * 执行反写规则,把当前反写量,写到源单行之后,触发此事件;
    * 可以通过调整反写量来达到源单数据不发生变化的目的(即避免回滚
    * @param e
    */
  @Override
  public void afterCommitAmount(AfterCommitAmountEventArgs e) {
      super.afterCommitAmount(e);
      String opType = getOpType();//获取当前执行反写的操作
      String srcFieldKey = e.getSrcFieldKey();//获取源单字段标识
      String ruleId = e.getRule().getId();//获取当前执行的反写规则id
      if("delete".equalsIgnoreCase(opType) && "qtyfield".equals(srcFieldKey) && rules.contains(ruleId)){
          e.getSrcActiveRow().set(srcFieldKey,999);//修改数值
      }
  }
}

2.2 插件注册

在配置完插件类后,需要我们在目标单的表单设计界面注册一个插件。插件注册请参考文档:反写插件手册

单据的删除,反审核和作废等操作不希望反写回滚的正确做法

1 业务场景用户通过转换规则由源单生成目标单后(以目标单保存时反写为例),在目标单配置了保存时的反写规则,在目标单保存时触发反写对...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息