微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何以编程方式更新INKitRegister记录而没有错误?

如何解决如何以编程方式更新INKitRegister记录而没有错误?

以下代码成功插入了INKitRegister记录。

public class SOOrderEntry_Extension : PXGraphExtension<SOOrderEntry>
{
    #region Event Handlers

    public virtual void _(Events.RowPersisting<SOLine> e)
    {            
        SOLine soLine = e.Row;

        InventoryItem inItem = PXSelect<InventoryItem,Where<InventoryItem.inventoryID,Equal<required<SOLine.inventoryID>>>>
            .Select(new PXGraph(),soLine.InventoryID);

        if (inItem == null)
            return;

        if (inItem.KitItem.HasValue && inItem.KitItem.Value)
        {
            SOLineExt soLineExt = soLine.GetExtension<SOLineExt>();
            INKitRegister kit = null;
            bool kitIsNew = false;

            if (soLineExt.INKitRegisterDocType != null && soLineExt.INKitRegisterRefNbr != null)
            {
                kit = PXSelect<INKitRegister,Where<INKitRegister.docType,Equal<required<SOLineExt.iNKitRegisterDocType>>,And<INKitRegister.refNbr,Equal<required<SOLineExt.iNKitRegisterRefNbr>>>>>
                .Select(new PXGraph(),soLineExt.INKitRegisterDocType,soLineExt.INKitRegisterRefNbr);
            }
            
            // If kit mix doesn't exist,create it
            if (kit == null)
            {
                kit = new INKitRegister();
                kitIsNew = true;
            }

            // Insert/update INKitRegister (new mix)
            var graph = PXGraph.CreateInstance<KitAssemblyEntry>();
            graph.Document.Current = kit;
            graph.Document.Cache.SetValueExt<INKitRegister.tranDate>(kit,soLine.RequestDate);
            if (kitIsNew)
            {
                graph.Document.Cache.SetValueExt<INKitRegister.kitInventoryID>(kit,soLine.InventoryID);
            }                
            graph.Document.Cache.SetValueExt<INKitRegister.uOM>(kit,soLine.UOM);
            graph.Document.Cache.SetValueExt<INKitRegister.qty>(kit,soLine.Qty);
            //graph.Document.Cache.SetValueExt<INKitRegister.tranDesc>(kit,string.Format("{0} {1}",soLine.TranDesc));
            kit = graph.Document.Cache.Update(kit) as INKitRegister;
            graph.Actions.PressSave();
            
            // Save the mix props to the SOLine
            soLineExt.INKitRegisterDocType = kit.DocType;
            soLineExt.INKitRegisterRefNbr = kit.RefNbr;
        }
    }

    #endregion
}

当我尝试更改SOOrder的数量时,应该使用相同的代码来更新现有的INKitRegister记录。

相反,我收到此错误

错误:更新“ IN Kit”记录至少引发了一个错误。请检查错误错误:“总费用”不能为空。错误:“ Ext。费用”不能为空。

(大概)在插入记录时自动计算“总成本”和“外部成本”。

问:为什么在Update上不再次计算这些值?我不知道从哪里开始手动计算它们,无论如何这似乎并不是一个好主意。>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。