Acumatica - 销售订单 - 预防领域的自动更新时更改客户

问题描述 投票:0回答:1

我想知道是否有人知道的一种方式,以防止某些字段从一定条件下更新销售订单页面上的客户现场时默认/存储的数据更新。

我的目标:当销售订单页面上,如果选择某个订单类型(在这种情况下,意味着它的订单类型为销售订单创建,并从我们的网站发送),改变客户字段不更新/覆盖财务设置或运输设置。这是因为金融和航运设置字段被填充,并从网站发送,并且可以具有比储存的客户信息更具体的信息。

我想继续为其他选项卡/默认域数据的加载,但保留客户输入的付款和发货信息。

enter image description here

acumatica
1个回答
2
投票

销售订单图中的SOOrder_CustomerID_FieldUpdated事件更新基于客户ID的改变所有相关的客户信息。您可以在图形扩展覆盖它。该联系人和地址信息被用作ID到另一个表,以便所有你需要做的就是保持相同的联系人或地址ID。我测试了以下图表延伸和它似乎通过调用基方法之前保持ID值工作。

public class SOOrderEntryMyExtension : PXGraphExtension<SOOrderEntry>
{
    protected virtual void SOOrder_CustomerID_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e, PXFieldUpdated del)
    {
        var order = (SOOrder)e.Row;
        var oldCustomerID = (int?)e.OldValue;
        var orderBeforeBase = (SOOrder)cache.CreateCopy(order);

        del?.Invoke(cache, e);

        if (order == null || orderBeforeBase == null || oldCustomerID == null || order.CustomerID == oldCustomerID || order.OrderType != "WO")
        {
            return;
        }

        if (order.BillAddressID != orderBeforeBase.BillAddressID)
        {
            cache.SetValueExt<SOOrder.billAddressID>(order, orderBeforeBase.BillAddressID);
        }

        if (order.BillContactID != orderBeforeBase.BillContactID)
        {
            cache.SetValueExt<SOOrder.billContactID>(order, orderBeforeBase.BillContactID);
        }

        if (order.ShipAddressID != orderBeforeBase.ShipAddressID)
        {
            cache.SetValueExt<SOOrder.shipAddressID>(order, orderBeforeBase.ShipAddressID);
        }

        if (order.ShipContactID != orderBeforeBase.ShipContactID)
        {
            cache.SetValueExt<SOOrder.shipContactID>(order, orderBeforeBase.ShipContactID);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.