记录一个踩过的小坑;
需求是通过webAPI接口生产汇报单下推检验单,但是不是整单下推,涉及数量修改;
刚开始使用的是AfterConvert,对于数量比较大的没问题,也就没有反馈异常,后续检验数量为1或者比较小就报错了;经排查报错原因为检验单携带了质检方案,导致样本数量为修改数量前的样本数,例如汇报单是150,样本数为20;后续下推后通过AfterConvert把检验单数量修改为1,导致检验数量小于样本数量无法保存;
通过社区了解到AfterConvert方法在表单服务策略之后执行,但是这里有个疑问,我在AfterConvert中更新数量之后是有调用值更新和实体服务规则的,为何没有触发?有大佬能解答下么?
系统中手工修改数量是能触发样本数量变更的
无奈AfterConvert方法不行只能另找方法,后尝试使用OnAfterCreateLink解决了该问题;
记录代码如下:
public override void OnAfterCreateLink(CreateLinkEventArgs e)
{
base.OnAfterCreateLink(e);
decimal FInspectQty = decimal.Zero;
//// webapi下推接口中的自定义参数,CustomParams={"FFinishQty":200}
this.Option.TryGetVariableValue<decimal>("FInspectQty", out FInspectQty);
ExtendedDataEntity[] bills = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead");
if(FInspectQty > 0)
{
foreach (var item in bills)
{
//明细
Entity entityType = e.TargetBusinessInfo.GetEntity("FEntity");
DynamicObjectCollection MxEntityRows = entityType.DynamicProperty.GetValue(item.DataEntity) as DynamicObjectCollection;
foreach(DynamicObject entity in MxEntityRows)
{
//明细行
entity["BaseInspectQty"] = FInspectQty; //基本单位检验数量
entity["InspectQty"] = FInspectQty; //检验数量
entity["QualifiedQty"] = FInspectQty; //合格数量
entity["BaseQualifiedQty"] = FInspectQty; //基本单位合格数量
}
}
}
}
如有错误之处还望指正!!!
推荐阅读