调用下推服务后获取目标单数据包的方法

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

调用下推服务后获取目标单数据包的方法

问题描述:

二开在调用下推服务得到返回的下推结果后,无法方便地拿到生成的目标单数据包,也就无法对数据做二开干预。

怎么才能通过下推结果简单的获取到生成的目标单数据包呢?

版本

4.0.012+

解决方法:

因为下推结果中针对自动保存和未保存的目标单数据返回的数据形式不一样,所以我们需要针对这两种数据做不同方式的加载。

 

下推过程中自动保存的目标单通过id返回

// 从转换结果中获取目标单id
ConvertOperationResult result = this.getConvertResult();
// 此处取第一个目标单id做示例,需要全部目标单数据可以依此遍历处理
Object pk = result.getTargetBillIds().iterator().next();
// 从数据库读取单据数据包
DynamicObject targetObject = result.loadAutoSavedDataObjects(new IDataProvider() {
      @Override
      public DynamicObject loadReferenceData(DynamicObjectType dynamicObjectType, Object o) {
            return BusinessDataServiceHelper.loadSingle(o, dynamicObjectType);
      }
 
      @Override
      public Map<Object, DynamicObject> loadReferenceDataBatch(DynamicObjectType dynamicObjectType, Object[] objects) {
            DynamicObject[] datas = BusinessDataServiceHelper.load(objects, dynamicObjectType);
            Map<Object, DynamicObject> result = new HashMap<>(16);
            for (DynamicObject obj : datas) {
                  result.put(obj.getPkValue(), obj);
            }
            return result;
      }
}, getTargetMainType(), pk);

 

下推未保存的目标单通过序列化后的字符串返回,需要做反序列化加载

// 从转换结果中获取目标单id
ConvertOperationResult result = this.getConvertResult();
// 此处取第一个目标单缓存pageid做示例,需要全部目标单数据可以依此遍历处理
Object cachePageId = result.getCachePageIds().iterator().next();
 
DynamicObject targetObject = result.loadTargetDataObject(new IRefrencedataProvider() {
      @Override
        public void fillReferenceData(Object[] objs, IDataEntityType dType) {
           BusinessDataReader.loadRefence(objs, dType);
        }
}, getTargetMainType(), cachePageId);

 

 


调用下推服务后获取目标单数据包的方法

问题描述:二开在调用下推服务得到返回的下推结果后,无法方便地拿到生成的目标单数据包,也就无法对数据做二开干预。怎么才能通过下推结果...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息