如何获取选择器替换键/描述值

How to get Selector Substitute Key / Description values

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

谢谢 -凯尔

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

编码的

以下示例在 Invoice/Memo 上的位置发生更改时将 Invoice/Memo 的描述更新为位置的 CD 和描述字段 [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
}

我还被告知可以使用另一种方法

PXFieldState.UnwrapValue(object value) 将 return 等同于后端的 UI 值。这很好,因为这样您就可以对下拉菜单和选择器使用一种方法,但我似乎看不出如何使用此

获取描述字段