如何引用我在 AP301000 中创建的客户字段

How to reference customer field which I created in AP301000

我在 AP301000 上创建了一个客户字段。该字段在屏幕上工作正常。现在我希望在选择供应商后填充此字段,因此我尝试使用代码列表自定义业务逻辑:

 protected void APInvoice_VendorID_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e, PXFieldUpdated InvokeBaseHandler)
    {
      if(InvokeBaseHandler != null)
        InvokeBaseHandler(cache, e);
      var row = (APInvoice)e.Row;

      APInvoice.UsrVendorKey="test";
    }

但我收到以下错误:

'PX.Objects.AP.APInvoice' does not contain a definition for 'UsrVendorKey' in file : Code#APInvoiceEntry(56)

我建议您阅读所有技术文档,特别是 T300 课程,因为它介绍了事件模型。您的代码存在一些问题。

首先,如果您希望在选择供应商时填充数据,则应使用 FieldDefaulting。 FieldUpdating 适用于更改该字段的值。

其次,您需要先获取扩展,然后才能对 UsrVendorKey 字段执行任何操作。

例如,获取 SOOrder 扩展程序如下所示,其中 SOOrderExt 是您的 DAC 扩展程序的名称。

var currentOrder = Base.Document.Current.GetExtension<SOOrderExt>();

获得扩展后,您可以使用它来访问您的新字段

e.NewValue = currentOrder.UsrFieldName;

您的代码无法编译,因为您试图将值设置为 class,而不是此 class 的实例。 rowAPInvoice 的实例。此外,您的自定义字段不会直接添加到 APInvoice,因此您需要先检索扩展名,然后才能更新值。假设您使用自定义管理器添加您的字段,扩展 class 通常会被命名为 APInvoiceExt。完整可能看起来像:

protected void APInvoice_VendorID_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e, PXFieldUpdated InvokeBaseHandler)
{
  if(InvokeBaseHandler != null)
    InvokeBaseHandler(cache, e);
  var row = (APInvoice)e.Row;
  var ext = cache.GetExtension<APInvoiceExt>();
  ext.UsrVendorKey="test";
}