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