OpenApi保存操作单据中包含基础资料报错问题解决方案原创
1人赞赏了该文章
505次浏览
未经作者许可,禁止转载编辑于2023年07月10日 15:41:38
前言
在调用保存操作时,单据中存在基础资料字段,保存时有时会报
"rowMsg":["“编码=demo1,符合F7过滤条件”的基础资料1在系统中不唯一,重复的基础资料1内码:[1707883952544429056, 1726141666663869440]"]
类似的错误
原因
传入的基础资料编码在系统中确实存在多个,因为对于普通基础资料而言,同一编码可以有多个状态,可以暂存多条相同编码的数据,但是只有一天是审核态的为有效数据,这在页面的f7使用中是会有这个过滤,但是对于接口来说是不区分的
解决
利用API的保存插件二次处理,查到该编码对应的真实有效的基础资料数据Id,即可唯一确定数据是哪一条
实现
实现ApiSavePlugin 在preHandleRequestData方法中处理数据即可
代码
public class ApisaveDemoPlugin implements ApiSavePlugin { @Override public List<Map<String, Object>> preHandleRequestData(List<Map<String, Object>> reqData) { for (Map<String, Object> data : reqData) { Map<String, Object> basedatafield = (Map<String, Object>) data.get("basedatafield"); Object number = basedatafield.get("number");// 获取传入的基础资料编码 QFilter qFilter = new QFilter("number", QCP.equals, number); qFilter.and(new QFilter("status", QCP.equals, "C"));// 添加过滤条件为审核 DynamicObject basedata = QueryServiceHelper.queryOne("demo006", "Id", qFilter.toArray()); basedatafield.put("Id", basedata.get("Id"));// 获取查询出的数据的Id并添加到参数中 basedatafield.remove("number");// 去掉原本的编码参数因为Id是最准的 } return reqData; } }
效果
赞 1
1人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读