Добавление полей в новую цитату из копии цитаты - PullRequest
0 голосов
/ 30 октября 2019

Привет всем и заранее спасибо. Я добавил бизнес-аккаунт в диалог фильтра Копировать цитату. Когда пользователь нажимает Действия> Копировать цитату, я хочу, чтобы он мог выбрать бизнес-аккаунт. Когда они нажимают Ok, чтобы скопировать, это обновит эту бизнес-учетную запись в новой цитате. Когда я пытаюсь обновить новую цитату в обработчике событий, редирект никогда не перемещается в скопированную цитату. Я пробовал много разных вещей, но вот последняя, ​​которую я пробовал:

    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);
    }

Бизнес-аккаунт без проблем переходит на экран копирования цитаты, и я могу получить выбранноебизнес-аккаунт и новая цитата просто отлично. Но он никогда не перенаправляет на новую цитату, а просто возвращает меня к оригинальной цитате. Любая помощь будет принята с благодарностью. Спасибо!

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

В конце концов, некоторые объекты ЦАП мешали друг другу. Это было мое последнее расширение графика, которое сработало.

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);
    }

Спасибо за вашу помощь!

0 голосов
/ 30 октября 2019

Вы можете попробовать обернуть вызов базового метода в блок try catch finally, чтобы перехватить потенциальное перенаправление базового метода. В блоке finally вы можете вручную перенаправить на целевую кавычку с помощью метода PXRedirectHelper.

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);

Это кажется маловероятным, но также возможно, что метод CopyToQuote не вызывается из обработчика события действия. В платформе Acumatica вы не можете перенаправить из всех обработчиков событий, это должно быть инициировано вызовом действия.

...