Acumatica 将自定义字段引用到不同屏幕上的另一个自定义字段

Acumatica refer custom field to another custom field on different screen

我在客户屏幕中创建了 2 个自定义字段(UsrFFA 和 UsrFreeFreightDay)。Customers Screen

然后我在销售订单屏幕上创建了类似的字段,如下所示 Sales Order

我希望销售订单屏幕上的这些字段填充相应客户 ID 的值。

我完成了培训 material T200 并找到了这段代码

 protected void SOOrder_CustomerID_FieldUpdated(PXCache sender,PXFieldUpdatedEventArgs e)
{
 SOOrder order = e.Row as SOOrder;
 BAccount customer =
 PXSelectorAttribute.Select<SOOrder.customerID>(sender, order)
 as BAccount;
 if (customer != null)
 {
 Contact defContact = PXSelect<Contact,
 Where<Contact.bAccountID, Equal<Required<Contact.bAccountID>>,
 And<Contact.contactID, Equal<Required<Contact.contactID>>>>>
 .Select(Base, customer.BAccountID, customer.DefContactID);
 if (defContact != null)
 {
 ContactExt contactExt = PXCache<Contact>
 .GetExtension<ContactExt>(defContact);
 sender.SetValue<SOOrderExt.usrCRVerified>(order,
 contactExt.UsrCreditRecordVerified);
 }
 }
}

我无法理解这段代码以及我应该如何在我的自定义中使用它。

您应该订阅 SOOrder.CustomerID 字段的 FieldUpdated 处理程序,并按照 示例 5.2:插入默认详细数据记录中所示的相同方式在销售订单屏幕上填充您的自定义字段 T200训练class:

protected virtual void ShipmentLine_ProductID_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
{
    // Obtain the new data record that contains the updated
    // values of all data fields
    ShipmentLine line = (ShipmentLine)e.Row;
    line.Description = string.Empty;
    if (line.ProductID != null)
    {
        Product product = PXSelectorAttribute.Select<ShipmentLine.productID>(sender, line) as Product;
        if (product != null)
        {
            // Copy the product name to the description of the shipment line
            line.Description = product.ProductName;
        }
    } 
}

您还可以查看步骤 3.1:添加 FieldUpdated 事件处理程序 (CustomerMaint)步骤 5.2:为销售订单表单 (SOOrderEntry) 自定义业务逻辑 来自 T300 训练 class 额外样本。

下面的代码片段应该可以在“销售订单”屏幕上实现预期的结果。如果您仍然无法理解下面的代码,我强烈建议您完成 T300 培训 class 以获得非常详细的动手练习和分步说明。

public class SOOrderEntryExt : PXGraphExtension<SOOrderEntry>
{
    public void SOOrder_CustomerID_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
    {
        var order = e.Row as SOOrder;
        if (order.CustomerID != null)
        {
            var customer = PXSelectorAttribute.Select<SOOrder.customerID>(sender, order) as BAccountR;
            if (customer != null)
            {
                var customerExt = customer.GetExtension<BAccountExt>();
                var orderExt = order.GetExtension<SOOrderExt>();
                orderExt.UsrFFA = customerExt.UsrFFA;
                orderExt.UsrFreeFreightDay = customerExt.UsrFreeFreightDay;
            }
        }
    }
}

按以下方式自定义 SOOrder 字段上的属性:

对于 UsrFFA 字段

[PXDBString(100)]
[PXUIField(DisplayName="FFA", Visible = true, Enabled = false)]
[PXFormula(typeof(Selector<SOOrder.customerID, BAccountExt.usrFFA>))]

对于 UsrFreeFreightDay 字段

[PXDBString(100)]
[PXUIField(DisplayName="Free Freight Day", Visible = true, Enabled = false)]
[PXFormula(typeof(Selector<SOOrder.customerID, BAccountExt.usrFreeFreightDay>))]