电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

BOTP选单操作根据用户选择的源单顺序添加到目标单分录

来源:金蝶云社区作者:金蝶2024-09-239

BOTP选单操作根据用户选择的源单顺序添加到目标单分录

1 业务背景

产品现状:选单的顺序和最后添加到目标单的顺序是不一致的,因为BOTP存在分单合并策略的各种组合,所以不能做到统一的排序出来,默认是按源单列表的顺序加载到目标单;

选单顺序:

实际顺序:

客户需求:对于一些业务场景比如计划(任务)编排,需要根据用户的选择顺序去编排计划(任务)的执行顺序,所以需要选单操作时选择的顺序和加载到目标单分录的顺序要要保持一致;


2 思路与方案

通过单据转换插件动态干预目标单分录顺序

1、在initVariable事件拿到用户原始勾选顺序,并添加到操作变量中

2、在afterConvert事件中动态调整目标单分录顺序

3 实现步骤

以源单(单据头)下推目标单(单据体)为例讲解,没有涉及到复杂的分单合并策略,源单和目标单创建和BOTP配置简单的配置这里就不过多介绍

1、目标单关联配置,配置关联目标单单据体

2、BOTP转换规则关联实体配置,源单(单据头)<--->目标单(单据体)

3、编写单据转换插件

public class DemoConvertPlugin03 extends AbstractConvertPlugIn implements Plugin {
    @Override
    public void initVariable(InitVariableEventArgs e) {
        super.initVariable(e);
        if (e.getConvertArgs() instanceof DrawArgs){
            List<Long> soucePkList= new ArrayList<>();
            DrawArgs drawArgs = (DrawArgs)e.getConvertArgs();
            //用户原始勾选顺序
            List<ListSelectedRow> selectedRows = drawArgs.getSelectedRows();
            for (ListSelectedRow selectedRow : selectedRows) {
                Long primaryKeyValue = (Long) selectedRow.getPrimaryKeyValue();
                soucePkList.add(primaryKeyValue);
            }
            getOption().setVariableValue("test_sourcerow_pdorder", SerializationUtils.toJsonString(soucePkList));
        }
    }
    @Override
    public void afterConvert(AfterConvertEventArgs e) {
        //获取用户选择的顺序ids
        String testSourcerowPdorder = getOption().getVariableValue("test_sourcerow_pdorder");
        List<Long> objects = (List<Long>) SerializationUtils.fromJsonStringToList(testSourcerowPdorder, Long.class);
        //获取目标单对象
        ExtendedDataEntitySet targetExtDataEntitySet = e.getTargetExtDataEntitySet();
        Map<String, List<ExtendedDataEntity>> extDataEntityMap = targetExtDataEntitySet.getExtDataEntityMap();
        List<ExtendedDataEntity> headList = extDataEntityMap.get(getTgtMainType().getName());
        ExtendedDataEntity extendedDataEntity = headList.get(0);
        DynamicObject headObj = extendedDataEntity.getDataEntity();
        DynamicObjectCollection entryEntityCol = headObj.getDynamicObjectCollection("entryentity");
        //根据用户选择的顺序,变量entryEntityCol添加到list对象,用于后续重新排序
        List<DynamicObject> list = new ArrayList<>();
        for (int i = 0; i < objects.size(); i++) {
            for (int i1 = entryEntityCol.size() - objects.size(); i1 < entryEntityCol.size(); i1++) {
                DynamicObjectCollection o = (DynamicObjectCollection) entryEntityCol.get(i1).get("entryentity_lk");
                if(o.size() > 0){
 

BOTP选单操作根据用户选择的源单顺序添加到目标单分录

1 业务背景产品现状:选单的顺序和最后添加到目标单的顺序是不一致的,因为BOTP存在分单合并策略的各种组合,所以不能做到统一的排序出来...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信