Многие функции Acumatica работают только в узком контексте.Я заметил, что Redirection Exception
всегда работает, когда выполняется в контексте Action Event Handler
.Предположительно при выполнении этих обработчиков инфраструктура оборачивает вызов вокруг блока catch, который специально перехватывает эти типы исключений перенаправления и выполняет перенаправление.В других контекстах он, вероятно, не улавливает этот конкретный тип, и это приводит к частично необработанному исключению.
Так что моя идея перенаправить при загрузке страницы - создать исключение перенаправления внутри обработчика события действия.Действие необходимо вызывать из контекста пользовательского интерфейса, хотя в противном случае оно все равно останется необработанным.Поэтому я буду использовать JavaScript для вызова действия из пользовательского интерфейса при загрузке страницы.
Расширение графика, которое вызывает исключение перенаправления в контексте обработчика события действия:
public class SOOrderEntry_Extension : PXGraphExtension<SOOrderEntry>
{
public PXAction<SOOrder> Redirect;
[PXButton]
public virtual IEnumerable redirect(PXAdapter adapter)
{
throw new PXRedirectByScreenIDException("SO302000", PXBaseRedirectException.WindowMode.Base, true);
return adapter.Get();
}
}
Я использовал Add Controls
чтобы добавить элемент управления JavaScript.Для новых страниц (без настройки существующих страниц), как правило, проще использовать Edit ASPX
для добавления JavaScript.Функция JavaScript вызывает обработчик события действия перенаправления в расширении графа.
function Redirect_Initialize() { px_alls["ds"].executeCallback("redirect"); }
Последний шаг - вызов метода JavaScript при загрузке страницы.,Я использовал CommandPerformed
, потому что я знаю по опыту, что он будет надежно назван.Вы можете попробовать Initialize
или другие типы Load
событий в качестве точки входа JavaScript, но мне повезло меньше.
Я протестировал это законченное решение, и оно действительно перенаправило при загрузке.Возможно, он может выполнить слишком много обратных вызовов, когда ваше условие не будет заканчиваться перенаправлением, вам придется проверить это и выбрать другую точку входа, если это необходимо.
Если подходящей точки входа не найдено, я бы использовал глобальную переменную JavaScript в качестве флага, чтобы он вызывал обработчик событий действия графа только один раз.Повторный вызов функции JavaScript требует очень мало времени, а повторный вызов сервера (IIS / ASP.Net) влечет за собой огромные штрафы.