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格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



