Hi community,
I'm customizing the ARPaymentEntry screen in Acumatica and encountering an issue where a custom field update event doesn't fetch the matching RefNbr from ARRegister even though the data exists in the database.
I’ve added two custom fields using DAC extensions:
public class ARRegisterExt : PXCacheExtension<PX.Objects.AR.ARRegister>
{
#region UsrLinksoftARInvoiceNumber
[PXDBString(50)]
[PXUIField(DisplayName = "Linksoft AR Invoice Number")]
public virtual string UsrLinksoftARInvoiceNumber { get; set; }
public abstract class usrLinksoftARInvoiceNumber : PX.Data.BQL.BqlString.Field<usrLinksoftARInvoiceNumber> { }
#endregion
}
This field stores an external invoice number (e.g., from a third-party system like Linksoft). It’s saved directly in the ARRegister(ARInvoice) table and visible on invoices.

public class ARAdjustExt : PXCacheExtension<PX.Objects.AR.ARAdjust>
{
#region Activation
public static bool IsActive()
{
return DialTow.Activation.IsActive();
}
#endregion
#region UsrLinksoftARInvoiceNumber
[PXDBString(50)]
[PXUIField(DisplayName = "Linksoft AR Invoice Number")]
public virtual string UsrLinksoftARInvoiceNumber { get; set; }
public abstract class usrLinksoftARInvoiceNumber : PX.Data.BQL.BqlString.Field<usrLinksoftARInvoiceNumber> { }
#endregion
}
This field appears in the document to apply tab of the ARPayment screen. The user manually enter inksoft invoice number here.

When the user enters a value in ARAdjustExt.usrLinksoftARInvoiceNumber, I want to:
-
Look up a matching ARRegister record where UsrLinksoftARInvoiceNumber = entered ARAdjustExt.usrLinksoftARInvoiceNumber value.
-
If found, populate the ARAdjustExt.refNbr with the refNbr from that invoice.
protected void _(Events.FieldUpdated<ARAdjust, ARAdjustExt.usrLinksoftARInvoiceNumber> e)
{
ARAdjust row = e.Row;
var ext = e.Cache.GetExtension<ARAdjustExt>(row);
if (ext?.UsrLinksoftARInvoiceNumber == null)
return;
// Querying ARRegister for matching UsrLinksoftARInvoiceNumber
ARRegister arRegister = PXSelect<ARRegister,
Where<ARRegisterExt.usrLinksoftARInvoiceNumber, Equal<Required<ARRegisterExt.usrLinksoftARInvoiceNumber>>>>
.Select(Base, ext.UsrLinksoftARInvoiceNumber);
if (arRegister != null)
{
e.Cache.SetValueExt<ARAdjust.adjdRefNbr>(row, arRegister.RefNbr);
}
}
I use this updater on ARPaymentEntry extension.but it not fetch vaues as expected.
(
public class ARPaymentEntry_Extension : PXGraphExtension<PX.Objects.AR.ARPaymentEntry>
{
public static bool IsActive()
{
return true;
}
#region Event Handlers
protected void ARAdjust_UsrLinksoftARInvoiceNumber_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
{
var row = e.Row as ARAdjust;
if (row == null) return;
var ext = PXCache<ARAdjust>.GetExtension<ARAdjustExt>(row);
if (string.IsNullOrEmpty(ext?.UsrLinksoftARInvoiceNumber)) return;
// Find matching invoice by Linksoft AR Invoice Number
var invoice = PXSelectJoin<ARInvoice,
InnerJoin<ARRegister,
On<ARInvoice.docType, Equal<ARRegister.docType>,
And<ARInvoice.refNbr, Equal<ARRegister.refNbr>>>>,
Where<ARRegisterExt.usrLinksoftARInvoiceNumber, Equal<Required<ARRegisterExt.usrLinksoftARInvoiceNumber>>>>
.Select(Base, ext.UsrLinksoftARInvoiceNumber)
.FirstTableItems
.FirstOrDefault();
if (invoice != null)
{
row.AdjdRefNbr = invoice.RefNbr;
row.AdjdDocType = invoice.DocType;
sender.Update(row);
}
}
#endregion
also try this field updater, but not working)
I would really appreciate any advice, sample code, or direction on how to properly fetch a value from ARRegister using a custom field added through a DAC extension.
Thank you.