通过插件直接调用单据转换规则下推生成目标单原创
7人赞赏了该文章
4813次浏览
编辑于2023年10月31日 18:37:55
关键词:插件,单据转换,botp
一、需求
单据转换一般通过源单单据点击下推按钮执行转换过程,生成目标单。但是实际项目中往往会出现需要不通过标准产品预置的按钮调用单据转换操作,比如api直接调用,比如调度任务直接调用,或某些特殊场景需要在插件中调用单据转换。
二、思路与方案
2.1分析思路
需要考虑以下几点。
如何调用单据转换?需要传入哪些参数?怎么确保是否执行成功?
2.2实现方案
获取需要执行下推的源单数据,插件调用下推,确定是否下推成功。
三、实现过程
1、以api调用为例,其他场景代码相同可以参考。首先创建自定义api接口
(本篇文章主要讲解插件调用单据转换,关于怎么使用自定义api相关内容,可以自行在社区查看相关资料,这里不做多余的说明)
2、为方便测试,需要准备两张单据,源单与目标单。并且配置转换规则
(如何配置单据转换,可以参考这个链接
https://developer.kingdee.com/article/232566086187808512?productLineId=29&isKnowledge=2
)
3、编写插件
(1)获取需要执行下推的源单数据,并封装数据包
//获取源单id DynamicObjectCollection srcdemolist = QueryServiceHelper.query("单据标识", "*", null); //只取第一条,演示用 Long pkid = (Long) srcdemolist.get(0).get("id"); //构建选中行数据包 List <ListSelectedRow> selectedRows=new ArrayList(); ListSelectedRow selectedRow=new ListSelectedRow(pkid); selectedRows.add(selectedRow);
(2)获取单据转换规则
//获取转换规则id ConvertRuleReader read=new ConvertRuleReader(); List<String> loadRuleIds = read.loadRuleIds("srcdemo", "targetdemo", false);
(3)创建下推参数
// 创建下推参数 PushArgs pushArgs = new PushArgs(); // 源单标识,必填 pushArgs.setSourceEntityNumber("srcdemo"); // 目标单据标识,必填 pushArgs.setTargetEntityNumber("targetdemo"); // 生成转换结果报告,必填 pushArgs.setBuildConvReport(true); //不检查目标单新增权限,非必填 pushArgs.setHasRight(true); //传入下推使用的转换规则id,不填则使用默认规则 //pushArgs.setRuleId(""); //下推默认保存,必填 pushArgs.setAutoSave(true); // 设置源单选中的数据包,必填 pushArgs.setSelectedRows(selectedRows);
(4)执行下推操作,并确认是否执行成功
// 执行下推操作 ConvertOperationResult result = ConvertServiceHelper.push(pushArgs); //获取下推目标单id Set<Object> targetBillIds = result.getTargetBillIds(); if(targetBillIds.size()>0) { return ApiResult.success("true"); }else { return ApiResult.fail("false", "error"); }
四、效果图
五、开发环境版本
V4.0.018.0
六、注意事项
1、插件中需要设置下推默认保存,否则可能不能正常生成目标单
2、如果单据转换规则只有一个,可以不进行配置
七、参考资料
八、源代码
推荐阅读