Search code examples
acumatica

Why is my hyperlink / button in the grid to launch a screen disabled?


I have a customization to the Sales Orders screen, where I've added a user field (non-bound / [PXString] to hold the value of a PO Receipt Nbr. I populate it with the RowSelected event, and I'm trying to launch the Purchase Receipts screen from that field with a PXAction tied to that field's Linked Command:

The Field:

public abstract class usrPOReceiptNbr : BqlString.Field<usrPOReceiptNbr> { }
[PXString(15, IsUnicode = true)]
[PXUIField(DisplayName = "PO Receipt Nbr", Enabled = true)]
public virtual string UsrPOReceiptNbr { get; set; }

The RowSelected event code to populate the field:

var soordershipment = e.Row as SOOrderShipment;

using (new PXConnectionScope())
{
    //get the extension
    var soordershipmentext = PXCache<SOOrderShipment>.GetExtension<SOOrderShipmentExt>(soordershipment);

    //Get the soorder cache...
    SOOrder soorder = Base.Document.Current;
    if (soorder != null)
    {
        //Now get the POReceiptLine record:
        PXResultset<POReceiptLine> res = PXSelectJoin<POReceiptLine,
                                                      InnerJoin<SOOrder,
                                                          On<SOOrder.orderNbr, Equal<POReceiptLine.sOOrderNbr>,
                                                          And<SOOrder.orderType, Equal<POReceiptLine.sOOrderType>>>>,
                                         Where<SOOrder.orderNbr, Equal<Required<SOOrder.orderNbr>>>,
                                         OrderBy<Desc<POReceiptLine.receiptNbr>>>.Select(Base, soorder.OrderNbr);


        foreach (PXResult<POReceiptLine> rec in res)
        {
            POReceiptLine porl = (POReceiptLine)rec;
            soordershipmentext.UsrPOReceiptNbr = porl.ReceiptNbr;
            break;  //Stop after the first record, since I only want the highest sorted field
        }
    }
}

The code to launch the Purchase Receipts screen is as follows:

public PXAction<SOOrder> LaunchPurchaseReceipts;
[PXButton(CommitChanges = true)]
[PXUIField(DisplayName = "Launch Purchase Receipts", Enabled = true)]

protected virtual IEnumerable launchPurchaseReceipts(PXAdapter adapter)
{
    var soorder = (SOOrder)Base.Document.Current;

    POReceiptEntry graph = PXGraph.CreateInstance<POReceiptEntry>();

    var soordershipment = (SOOrderShipment)Base.shipmentlist.Current;
    var soordershipmentext = PXCache<SOOrderShipment>.GetExtension<SOOrderShipmentExt>(soordershipment);

    graph.Document.Current = graph.Document.Search<POReceipt.receiptNbr, POReceipt.receiptType>(soordershipmentext.UsrPOReceiptNbr, soordershipment.ShipmentType);

    throw new PXRedirectRequiredException(graph, "Purchase Receipts")
    {
        Mode = PXBaseRedirectException.WindowMode.NewWindow
    };
}

The problem is that I continue to get this error when launching the hyperlink on the PO Receipt Nbr field for that screen (it never even gets to the code to launch the screen):

enter image description here

...and here's the error...

enter image description here

I've tried forcing the field to enabled with the RowSelected event, using:

PXUIFieldAttribute.SetEnabled<SOOrderShipmentExt.usrPOReceiptNbr>(e.Cache, null, true);

But that doesn't do anything.

Any ideas?


Solution

  • This issue has been resolved with a suggestion from Brendan (thanks much) by using the RowSelected event to set the method's enabled property to true:

    LaunchPurchaseReceipts.SetEnabled(true);