Acumatica 从复制报价向新报价添加字段

Acumatica 从复制报价向新报价添加字段,acumatica,Acumatica,大家好,提前谢谢。我已将业务帐户添加到“复制报价筛选”对话框中。当用户单击Actions>Copy Quote时,我希望能够让他们选择一个业务帐户。当他们单击“确定”进行复制时,将在新报价单上更新此业务帐户。当我尝试在事件处理程序中更新新的引号时,重定向永远不会移动到复制的引号。我尝试了很多不同的方法,但以下是我尝试过的最新方法: public delegate void CopyToQuoteDelegate(CRQuote currentquote, CopyQuoteFilter

大家好,提前谢谢。我已将业务帐户添加到“复制报价筛选”对话框中。当用户单击Actions>Copy Quote时,我希望能够让他们选择一个业务帐户。当他们单击“确定”进行复制时,将在新报价单上更新此业务帐户。当我尝试在事件处理程序中更新新的引号时,重定向永远不会移动到复制的引号。我尝试了很多不同的方法,但以下是我尝试过的最新方法:

    public delegate void CopyToQuoteDelegate(CRQuote currentquote, CopyQuoteFilter param);
    [PXOverride]
    public void CopyToQuote(CRQuote currentquote, CopyQuoteFilter param, CopyToQuoteDelegate baseMethod)
    {
        PXGraph.InstanceCreated.AddHandler<QuoteMaint>(graph =>
        {
            graph.RowInserted.AddHandler<CRQuote>((cache, args) =>
            {
                if (param != null)
                {
                    string bAccountCode = graph.CopyQuoteInfo.GetValueExt<CopyQuoteFilterExt.usrBAccountId>(param).ToString();
                    BAccount bAccount = PXSelect<BAccount, Where<BAccount.acctCD, Equal<Required<BAccount.acctCD>>>>.Select(graph, bAccountCode);

                    if (bAccount != null)
                    {
                        CRQuote quote = graph.Quote.Current;

                        quote.BAccountID = bAccount.BAccountID;
                        quote.LocationID = bAccount.DefLocationID;
                        graph.Quote.Update(quote);
                    }
                }
            });
        });

        baseMethod(currentquote, param);
    }
公共委托无效CopyToQuoteDelegate(CRQuote currentquote,CopyQuoteFilter参数);
[PXOverride]
公共作废CopyToQuote(CRQuote currentquote、CopyQuoteFilter参数、CopyToQuoteDelegate baseMethod)
{
PXGraph.InstanceCreated.AddHandler(图形=>
{
graph.RowInserted.AddHandler((缓存,参数)=>
{
如果(参数!=null)
{
字符串bAccountCode=graph.CopyQuoteInfo.GetValueExt(param.ToString();
BAccount BAccount=PXSelect.Select(图形,bAccountCode);
如果(bAccount!=null)
{
CRQuote=graph.quote.Current;
quote.BAccountID=bAccount.BAccountID;
quote.LocationID=bAccount.DefLocationID;
图.报价.更新(报价);
}
}
});
});
基本方法(currentquote,param);
}

业务帐户进入“复制报价”屏幕时没有任何问题,我可以很好地获取所选业务帐户id和新报价。但它从来没有重定向到新的报价,它只是让我回到原来的报价。任何帮助都将不胜感激。谢谢

您可以尝试在try-catch-finally块中包装基本方法调用,以拦截基本方法的潜在重定向。在finally块中,您可以使用
pxrirecthelper
方法手动重定向到目标报价

QuoteMaint quoteMaint = PXGraph.CreateInstance<QuoteMaint>();
quoteMaint.Quote.Current = quoteMaint.Quote.Search<CRQuote.quoteNbr>([Target Quote Nbr]);

if (quoteMaint.Quote.Current != null)
    PXRedirectHelper.TryRedirect(quoteMaint, PXRedirectHelper.WindowMode.InlineWindow);
QuoteMaint QuoteMaint=PXGraph.CreateInstance();
quoteMaint.Quote.Current=quoteMaint.Quote.Search([Target Quote Nbr]);
if(quoteMaint.Quote.Current!=null)
pxrirecthelper.TryRedirect(quoteMaint,pxrirecthelper.WindowMode.InlineWindow);

这似乎不太可能,但也可能不是从操作事件处理程序调用方法
CopyToQuote
。在Acumatica框架中,您无法从所有事件处理程序重定向,它需要通过操作调用启动。

最后,一些DAC对象相互干扰。这是我最后一个有效的图形扩展

public delegate void CopyToQuoteDelegate(CRQuote currentquote, CopyQuoteFilter param);
    [PXOverride]
    public void CopyToQuote(CRQuote currentquote, CopyQuoteFilter param, CopyToQuoteDelegate baseMethod)
    {
        PXGraph.InstanceCreated.AddHandler<QuoteMaint>(graph =>
        {
            graph.RowUpdated.AddHandler<CRQuote>((cache, args) =>
            {
                if (param != null)
                {
                    var paramExt = param.GetExtension<CopyQuoteFilterExt>();

                    if (paramExt.UsrBAccountId != null)
                    {
                        CRQuote quote = graph.Quote.Current;
                        if (quote != null)
                        {
                            graph.Quote.Cache.SetValue(quote, "BAccountID", paramExt.UsrBAccountId);
                            quote.BAccountID = paramExt.UsrBAccountId;
                            graph.Quote.Cache.SetValue(quote, "LocationID", paramExt.UsrLocationID);
                            quote.LocationID = paramExt.UsrLocationID;
                            //graph.Quote.Update(quote);
                        }
                    }
                }
            });
        });

        baseMethod(currentquote, param);
    }
公共委托无效CopyToQuoteDelegate(CRQuote currentquote,CopyQuoteFilter参数);
[PXOverride]
公共作废CopyToQuote(CRQuote currentquote、CopyQuoteFilter参数、CopyToQuoteDelegate baseMethod)
{
PXGraph.InstanceCreated.AddHandler(图形=>
{
graph.RowUpdated.AddHandler((缓存,参数)=>
{
如果(参数!=null)
{
var parametext=param.GetExtension();
if(parametext.usrbaccounted!=null)
{
CRQuote=graph.quote.Current;
如果(引号!=null)
{
graph.Quote.Cache.SetValue(Quote,“BAccountID”,paramExt.UsrBAccountId);
quote.BAccountID=paramExt.UsrBAccountId;
graph.Quote.Cache.SetValue(Quote,“LocationID”,parametext.UsrLocationID);
quote.LocationID=参数xt.UsrLocationID;
//图.报价.更新(报价);
}
}
}
});
});
基本方法(currentquote,param);
}

谢谢你的帮助

有趣的是,我删除了覆盖,它仍然在发生,但只有当我在Copy To Quote窗口中更改业务帐户时才会发生。我要检查一下DAC。