webAPI下推检验单并修改数量原创
金蝶云社区-彭碰车
彭碰车
16人赞赏了该文章 678次浏览 未经作者许可,禁止转载编辑于2024年05月14日 15:38:52

记录一个踩过的小坑;

需求是通过webAPI接口生产汇报单下推检验单,但是不是整单下推,涉及数量修改;

刚开始使用的是AfterConvert,对于数量比较大的没问题,也就没有反馈异常,后续检验数量为1或者比较小就报错了;经排查报错原因为检验单携带了质检方案,导致样本数量为修改数量前的样本数,例如汇报单是150,样本数为20;后续下推后通过AfterConvert把检验单数量修改为1,导致检验数量小于样本数量无法保存;

通过社区了解到AfterConvert方法在表单服务策略之后执行,但是这里有个疑问,我在AfterConvert中更新数量之后是有调用值更新和实体服务规则的,为何没有触发?有大佬能解答下么?

系统中手工修改数量是能触发样本数量变更的

image.png

无奈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; //基本单位合格数量

                    }

                }

            }

            

        }

如有错误之处还望指正!!!


赞 16