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

Acumatica 如何引用我在AP301000中创建的客户字段,acumatica,Acumatica,我已经在AP301000上创建了一个客户字段。这个字段在屏幕上运行良好。现在,我希望在选择供应商后填充此字段,因此我尝试使用以下代码列表自定义业务逻辑: protected void APInvoice_VendorID_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e, PXFieldUpdated InvokeBaseHandler) { if(InvokeBaseHandler != null)

我已经在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。字段更新用于更改该字段的值

第二,在使用UsrVendorKey字段执行任何操作之前,需要先获得扩展名

例如,获取SOOrder扩展名的方式如下所示,其中SOOrderExt是DAC扩展名的名称

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

您的代码无法编译,因为您试图将值设置为类,而不是该类的实例<代码>行是
APInvoice
的一个实例。此外,您的自定义字段不会直接添加到APInvoice,因此您需要先检索扩展名,然后才能更新值。假设使用自定义管理器添加字段,扩展类通常命名为
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";
}
protectedvoid-APInvoice\u-VendorID\u-FieldUpdated(PXCache缓存、PXFieldUpdatedEventArgs e、PXFieldUpdated InvokeBaseHandler)
{
if(InvokeBaseHandler!=null)
InvokeBaseHandler(缓存,e);
变量行=(APInvoice)e.row;
var ext=cache.GetExtension();
ext.UsrVendorKey=“测试”;
}

FieldDefaulting在更新客户时不会调用;您仍然需要调用call.SetDefaultExt才能再次引发事件。在这种特殊情况下,可以使用FieldUpdate直接更新自定义字段。在原始海报的问题中还需要强调的一个重要错误是,他们试图直接访问该类——因此,即使他们想要更新标准字段,代码仍然无法编译。“row”是APInvoice的一个实例。明白了,它在registerext中。请您帮助我如何检索此选定供应商的acctReferenceNbr信息,我认为它应该在VendorMain中。我想做的不是将“测试”分配给UsrVendorKey字段,而是将供应商的帐户引用分配给该字段。受保护的无效APInvoice_VendorID_FieldUpdated(PXCache缓存,PXFieldUpdatedEventArgs e,pxFieldUpdatedInvokeBaseHandler){if(InvokeBaseHandler!=null)InvokeBaseHandler(缓存,e);var row=(APInvoice)e.row;var ext=cache.GetExtension();VendorMaint graph=PXGraph.CreateInstance();graph.BAccount.Current=(VendorR)vendor.Current;ext.UsrVendorKey=graph.BAccount.AcctReferenceNbr;}上述代码昨天仍然有效,但今天给我错误消息:“PX.Data.PXCache”不包含“GetExtension”的定义,并且最佳扩展方法重载“PX.Data.pxcachex.GetExtension(PX.Data.IBqlTable)”在文件中有一些无效参数:
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";
}