Acumatica 操作按钮未在屏幕上更新

Acumatica 操作按钮未在屏幕上更新,acumatica,Acumatica,我在QuoteMain图上有一个操作按钮。此操作位于“操作”文件夹中。我根据报价状态设置按钮是否启用。当用户提交报价时,应启用“操作”按钮。我逐步浏览了代码,它运行例程以启用按钮,但在屏幕上它没有启用。当我刷新屏幕时,它已启用,没有任何问题。代码如下,谢谢您的帮助 public PXAction<CRQuote> printQuoteSummary; [PXButton(CommitChanges = true, SpecialType = PXSpecialBut

我在QuoteMain图上有一个操作按钮。此操作位于“操作”文件夹中。我根据报价状态设置按钮是否启用。当用户提交报价时,应启用“操作”按钮。我逐步浏览了代码,它运行例程以启用按钮,但在屏幕上它没有启用。当我刷新屏幕时,它已启用,没有任何问题。代码如下,谢谢您的帮助

    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);
    }
public PXAction printquotes摘要;
[PXButton(CommitChanges=true,SpecialType=PXSpecialButtonType.Report)]
[PXUIField(DisplayName=“打印报价-摘要”)]
公共IEnumerable PrintQuotesSummary(PXAdapter)
{
字典参数=新字典();
字符串actualReportID=“CR604510”;
foreach(适配器.Get()中的CRQuote项)
{
参数[名称(CRQuote.OpportunityID)]=item.OpportunityID;
参数[名称(CRQuote.QuoteNbr)]=项.QuoteNbr;
抛出新的PXReportRequiredException(参数、actualReportID、“Report”+actualReportID);
}
返回适配器Get();
}
公共覆盖无效初始化()
{
base.Initialize();
Base.actions文件夹.AddMenuAction(PrintQuotesSummary);
Base.Actions.Move(“PrintQuote”、“printQuoteSummary”);
PrintQuotesSummary.SetEnabled(Base.Quote.Current?.Status==CRQuoteStatusAttribute.Approved | | Base.Quote.Current?.Status==CRQuoteStatusAttribute.Sent);
}
已选择受保护的虚拟无效CRQuote(PXCache缓存,PXRowSelectedEventArgs e)
{
CRQuote quote=e.行作为CRQuote;
if(quote==null)返回;
使用(新的PXConnectionScope())
{
CalcTotals(报价);
}
PrintQuotesSummary.SetEnabled(quote.Status==CRQuoteStatusAttribute.Approved | | quote.Status==CRQuoteStatusAttribute.Sent);
}

为事件委托添加附加参数解决了测试中的问题,请查看下面的示例

    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);
    }
这样,您还可以删除初始化方法中启用/禁用的引用,如下所示

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

谢谢你,乔舒亚,这很好!我也从initialize方法中删除了该行。我以前想把它拿出来,但没意识到我把它忘在里面了。再次感谢您的帮助!您的
CalcTotals
方法是否对数据库执行请求?如果是,则需要将此逻辑移动到FieldSelecting事件处理程序。Acumatica不允许向RowSelected事件处理程序中的数据库发送请求。Hi Samvel-它不针对数据库执行事务。它用于设置非持久性字段。在思考这个问题时。。。我不知道为什么我需要一个新的PXConnectionScope()。。。我刚才把它放进去了,所以我可能需要调查一下。谢谢