调用下推服务后,如何拿到目标单数据包?
问题描述
默认的下推操作会将上游数据保存到目标单的数据库表里,请问要怎么控制这个规则,先不存进数据库,在拿到这些数据并处理完毕后才存进数据库呢?
解决方法
下推操作,默认不保存数据。
参考如下语句在下推后获取目标单数据包
Java
PushArgs pushArgs = new PushArgs();
pushArgs.setSourceEntityNumber(this.sourceBill);
pushArgs.setTargetEntityNumber(this.targetBill);
pushArgs.setRuleId(this.ruleId);
pushArgs.setBuildConvReport(true);
// 下推参数,设置所选数据项
List<ListSelectedRow> rows = new ArrayList<>();
for(DynamicObject obj : objs){
ListSelectedRow row = new ListSelectedRow(obj.getPkValue(), true);
rows.add(row);
}
pushArgs.setSelectedRows(rows);
// 执行下推服务
ConvertOperationResult pushResult = ConvertServiceHelper.push(pushArgs);
// 提取下推生成的目标单
MainEntityType targetMainType = EntityMetadataCache.getDataEntityType(this.getTargetBill());
List<DynamicObject> targetBillObjList = pushResult.loadTargetDataObjects(buildRefLoader(), targetMainType, true);
DynamicObject[] targetBillObjs = targetBillObjList.toArray(new DynamicObject[targetBillObjList.size()]);
OperateOption saveOption = this.getOption().copy();
// 强制操作校验结果,以实现整体成功、失败
saveOption.setVariableValue(OperateOptionConst.STRICTVALIDATION, String.valueOf(true));
// 执行保存操作
OperationResult saveResult = this.doOperation("save", targetBillObjs, saveOption);
Java
private IRefrencedataProvider buildRefLoader(){
IRefrencedataProvider refLoader = new IRefrencedataProvider() {
@Override
public void fillReferenceData(Object[] objs, IDataEntityType dType) {
BusinessDataReader.loadRefence(objs, dType);
}
}
return refLoader;
}
调用下推服务后,如何拿到目标单数据包?
本文2024-09-23 00:25:47发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-139407.html