Daniel Saffo
Daniel Saffo

Reputation: 94

Action button not not updating on screen

I have an action button on the QuoteMaint graph. This action is in the actions folder. I set whether or not the button is enabled based on the quote status. When the user submits the quote, the action button should be enabled. I stepped through the code and it runs the routine to enable button, but on the screen it is not enabled. When I refresh the screen it is enabled with no issues. The code is below, thanks for your help!

    public PXAction<CRQuote> printQuoteSummary;

    [PXButton(CommitChanges = true, SpecialType = PXSpecialButtonType.Report)]
    [PXUIField(DisplayName = "Print Quote - Summary")]
    public IEnumerable PrintQuoteSummary(PXAdapter adapter)
    {
        Dictionary<string, string> parameters = new Dictionary<string, string>();
        string actualReportID = "CR604510";

        foreach (CRQuote item in adapter.Get<CRQuote>())
        {
            parameters[nameof(CRQuote.OpportunityID)] = item.OpportunityID;
            parameters[nameof(CRQuote.QuoteNbr)] = item.QuoteNbr;

            throw new PXReportRequiredException(parameters, actualReportID, "Report " + actualReportID);
        }
        return adapter.Get();
    }

    public override void Initialize()
    {
        base.Initialize();
        Base.actionsFolder.AddMenuAction(printQuoteSummary);
        Base.Actions.Move("PrintQuote", "printQuoteSummary");
        printQuoteSummary.SetEnabled(Base.Quote.Current?.Status == CRQuoteStatusAttribute.Approved || Base.Quote.Current?.Status == CRQuoteStatusAttribute.Sent);
    }

    protected virtual void CRQuote_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
    {
        CRQuote quote = e.Row as CRQuote;
        if (quote == null) return;

        using (new PXConnectionScope())
        {
            CalcTotals(quote);
        }

        printQuoteSummary.SetEnabled(quote.Status == CRQuoteStatusAttribute.Approved || quote.Status == CRQuoteStatusAttribute.Sent);
    }

Upvotes: 3

Views: 380

Answers (1)

Joshua Van Hoesen
Joshua Van Hoesen

Reputation: 1732

Adding the additional argument for the event delegate resolved the issue in testing, please find sample below.

    protected virtual void CRQuote_RowSelected(PXCache cache, PXRowSelectedEventArgs e, PXRowSelected del)
    {
        del?.Invoke(cache, e);
        CRQuote quote = e.Row as CRQuote;
        if (quote == null) return;

        using (new PXConnectionScope())
        {
            CalcTotals(quote);
        }
        PrintQuoteSummary.SetEnabled(quote.Status == CRQuoteStatusAttribute.Approved || quote.Status == CRQuoteStatusAttribute.Sent);
    }

With this you may also remove reference to enable/disable in your initialize method as such it would be as follows.

    public override void Initialize()
    {
        base.Initialize();
        Base.actionsFolder.AddMenuAction(PrintQuoteSummary);
        Base.Actions.Move("PrintQuote", "printQuoteSummary");
    }

Upvotes: 1

Related Questions