首页 > 解决方案 > 如何获取选择器替换键/描述值

问题描述

假设我有一个 DAC 记录,比如 SOOrder,我有一个字段,比如 customerID,其中有一个整数字段上定义的 PXSelectorAttribute,它有一个 SubstitueKey = typeof(Customer.acctCD) 和 Description = typeof(Customer.acctName) . 有没有什么方法可以在不对选择器表执行 PXSelect 的情况下获取该记录的替代键/描述字段的值?

谢谢-凯尔

标签: acumatica

解决方案


请注意,由于未指定版本,因此我的示例是针对 2020r2 进行编码的

以下是在发票/备忘录上更改位置时将发票/备忘录的描述更新到位置的 CD 和 Descr 字段 [CD: Descr] 的示例。我相信您正在寻找的功能是PXSelectorAttribute.Select<SELECTOR_FIELD>(SELECTOR_FIELD_CACHE, SELECTOR_FIELD_RECORD) AS SELECTOR_TARGET_DAC.

public class ArInvoiceEntrySoExt : PXGraphExtension<ARInvoiceEntry>
{
    #region Event Handlers
    #region ArInvoice
    public virtual void _(Events.FieldUpdated<ARInvoice.customerLocationID> e, PXFieldUpdated del)
    {
        var inv = e.Row as ARInvoice;
        del?.Invoke(e.Cache, e.Args);
        if (inv != default)
        {
            var loc = PXSelectorAttribute.Select<ARInvoice.customerLocationID>(e.Cache, inv) as Location;
            e.Cache.SetValueExt<ARInvoice.docDesc>(inv, string.Format("{0}: {1}", loc?.LocationCD, loc?.Descr));
        }
    }
    #endregion
    #endregion
}

另一种方法是,您可以使用PXSelectorAttribute.GetField(SELECTOR_FIELD_CACHE, SELECTOR_FIELD_RECORD, "SELECTOR_FIELD_NAME", SELECTOR_FIELD_VALUE, "SELECTOR_TARGET_FIELD_NAME")从选择器的目标记录中获取特定字段。例如,以下代码使用此替代方法执行与上述相同的操作:

public class ArInvoiceEntrySoExt : PXGraphExtension<ARInvoiceEntry>
{
    #region Event Handlers
    #region ArInvoice
    public virtual void _(Events.FieldUpdated<ARInvoice.customerLocationID> e, PXFieldUpdated del)
    {
        var inv = e.Row as ARInvoice;
        del?.Invoke(e.Cache, e.Args);
        if (inv != default)
        {
            var loc = PXSelectorAttribute.Select<ARInvoice.customerLocationID>(e.Cache, inv) as Location;
            e.Cache.SetValueExt<ARInvoice.docDesc>(inv, string.Format("{0}: {1}",
                PXSelectorAttribute.GetField(e.Cache, inv, "customerLocationID", inv.CustomerLocationID, "LocationCD"),
                PXSelectorAttribute.GetField(e.Cache, inv, "customerLocationID", inv.CustomerLocationID, "Descr")));
        }
    }
    #endregion
    #endregion
}

推荐阅读