webapi下推多张单据,出现空单据问题
金蝶云社区-云社区用户l6231922
云社区用户l6231922
0人赞赏了该文章 935次浏览 未经作者许可,禁止转载编辑于2017年02月09日 12:38:23

各位老师,我做了一个webAPI的服务器插件,客户端通过调用源单空操作,服务器端通过插件,解析客户端上传的数据,然后自动选择源单下推业务单据并保存。该接口已经成功使用了几个月了。参考程序请看下面的链接:
https://vip.kingdee.com/article/21482
这个程序使用中发现一个小问题。比如我的客户端数据是30行,服务器端通过FOR循环代码找到30行采购订单。而这30行订单对应了3个订单号。这三个订单号实际上有800行明细数据。下推的时候系统会自动按整单下推出来800行明细,根据下推的分组规则,有可能是4张入库单。然后我只能通过循环检查下推出来的明细,把我不要的那770行明细数据删掉。这就出问题了。因为下推的单据是4张共800行,有可能某张单据的明细全部都被删掉了。保存的时候,保存的时候就会出现某些单据只有单头没有单体的情况。
1、选择采购订单的代码 dt表体 是我传上来的数据。
ListSelectedRowCollection rows = new ListSelectedRowCollection();
for (int i = 0; i < dt表体.Rows.Count; i++){
ListSelectedRow row = new ListSelectedRow(dt表体.Rows["POOrderId"].ToString(), dt表体.Rows["POORDERENTRYID"].ToString(), 0, source);//关键,把订单追加到选择行
row.EntryEntityKey = "FEntity";//只下推一行 ,不过没得用,系统实际上还是整单下推
rows.Add(row);//这里找出需要下推的采购订单,
}//这里我只选择了30行采购订单
PushArgs pushArgs = new PushArgs(ruleElement, rows.ToArray());//下推服务接受的参数
pushArgs.TargetBillTypeId = sargetBillTypeId;
ConvertOperationResult convertResult = ServiceHelper.GetService().Push(this.Context, pushArgs); //转换生成目标单
result.MergeResult(convertResult);//合并转换操作结果 //目标单据数据集合
DynamicObject[] destObjs = convertResult.TargetDataEntities.Select(r => r.DataEntity).ToArray();//destObjs 就是下推好的数据集。这里会推出800行明细,根据分组规则可能是4张单据。
然后我只好使用FOR循环destObjs数据集里面的每张单据,而且循环每一行数据,把里面不需要的那些采购订单推出来的明细数据行都删掉。
DynamicObjectCollection[] 目标单据体;
目标单据体 = new DynamicObjectCollection[destObjs.Length];
for (int w = 0; w < destObjs.Length; w++)
{
目标单据体[w] = destObjs[w][明细数据集标识符] as DynamicObjectCollection;
m = 目标单据体[w].Count - 1;
while (m >= 0)
{
bool 下推结果符合入库清单要求 = false;
for (int i = dt表体.Rows.Count - 1; i >= 0; i--)
{
DynamicObjectCollection tmpobjlist;
if (目标单据体[w][m]["POORDERENTRYID"].ToString() == dt表体.Rows[i][原单明细Id名].ToString())
{
DynamicObject赋值_外购入库(目标单据体[w][m], dt表体, i, 目标单据元数据, Context1);
下推结果符合入库清单要求 = true;
}
}
if (下推结果符合入库清单要求 == false)
{
目标单据体[w].RemoveAt(m); //删除多余的下推数据
}
m--;
}//这里把不需要的明细删除之后,可能destObjs数组里面某张单据就没有明细了。destObjs是数组不是集合,我又不敢删除里面的元素。
FormMetadata destFormMetadata = ServiceHelper.GetService().Load(this.Context, target) as FormMetadata;
IOperationResult saveResult = ServiceHelper.GetService().Save(this.Context, destFormMetadata.BusinessInfo, destObjs, OperateOption.Create());//这里保存的时候,就有可能出现某些单据没有明细,只有单头的情况。请问一下各位老师,destObjs怎么处理,才能把那些空单据(destObjs[w][明细数据集标识符] .count==0)屏蔽掉,不保存啊?