Skip to main content
Answer

FieldUpdated Event in ARPaymentEntry Not Fetching ARRegister RefNbr by Custom Field (UsrLinksoftARInvoiceNumber)

  • June 11, 2025
  • 3 replies
  • 78 views

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:

  1. Look up a matching ARRegister record where UsrLinksoftARInvoiceNumber = entered ARAdjustExt.usrLinksoftARInvoiceNumber value.

  2. 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.

Best answer by PDharmasena10

   Please try to add a extension for ARRegister2 also as below and try the event handler given bellow.

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
    }

    public class ARRegister2Ext : PXCacheExtension<PX.Objects.AR.ARRegister2>
    {

        #region UsrLinksoftARInvoiceNumber
        public abstract class usrLinksoftARInvoiceNumber : PX.Data.BQL.BqlString.Field<ARAdjustExt.usrLinksoftARInvoiceNumber> { }
        #endregion
    }

       

 

 

protected void _(Events.FieldUpdated<ARAdjust, ARAdjustExt.usrLinksoftARInvoiceNumber> e)
        {
            ARAdjust row = e.Row;
            var ext = e.Cache.GetExtension<ARAdjustExt>(row);

            if (ext?.UsrLinksoftARInvoiceNumber == null)
                return;

            ARRegister2 arRegister = PXSelect<ARRegister2,
                Where<ARRegister2Ext.usrLinksoftARInvoiceNumber, Equal<Required<ARRegister2Ext.usrLinksoftARInvoiceNumber>>>>
                .Select(Base, ext.UsrLinksoftARInvoiceNumber);

            if (arRegister != null)
            {
                e.Cache.SetValueExt<ARAdjust.adjdRefNbr>(row, arRegister.RefNbr);
            }
        }

 

3 replies

Forum|alt.badge.img+1

I’d reckon you need something like:

 

     #region UsrLinksoftARInvoiceNumber
     [PXDBString(50)]
     [PXUIField(DisplayName = "Linksoft AR Invoice Number")]

[PXSelector(typeof(Search<ARRegisterExt.usrLinksoftARInvoiceNumber>), ValidateValue = false)]


     public virtual string UsrLinksoftARInvoiceNumber { get; set; }
     public abstract class usrLinksoftARInvoiceNumber :         PX.Data.BQL.BqlString.Field<usrLinksoftARInvoiceNumber> { }
     #endregion

 

And make such you have CommitChanges=true


darylbowman
Captain II
Forum|alt.badge.img+15

Have you tried debugging to see at what point your methods are failing? I don’t see anything glaring, except that you probably need to set the ARAdjust.adjdDocType as well.


Forum|alt.badge.img+2
  • Semi-Pro I
  • Answer
  • June 16, 2025

   Please try to add a extension for ARRegister2 also as below and try the event handler given bellow.

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
    }

    public class ARRegister2Ext : PXCacheExtension<PX.Objects.AR.ARRegister2>
    {

        #region UsrLinksoftARInvoiceNumber
        public abstract class usrLinksoftARInvoiceNumber : PX.Data.BQL.BqlString.Field<ARAdjustExt.usrLinksoftARInvoiceNumber> { }
        #endregion
    }

       

 

 

protected void _(Events.FieldUpdated<ARAdjust, ARAdjustExt.usrLinksoftARInvoiceNumber> e)
        {
            ARAdjust row = e.Row;
            var ext = e.Cache.GetExtension<ARAdjustExt>(row);

            if (ext?.UsrLinksoftARInvoiceNumber == null)
                return;

            ARRegister2 arRegister = PXSelect<ARRegister2,
                Where<ARRegister2Ext.usrLinksoftARInvoiceNumber, Equal<Required<ARRegister2Ext.usrLinksoftARInvoiceNumber>>>>
                .Select(Base, ext.UsrLinksoftARInvoiceNumber);

            if (arRegister != null)
            {
                e.Cache.SetValueExt<ARAdjust.adjdRefNbr>(row, arRegister.RefNbr);
            }
        }