Acumatica ERP перенаправление по условию после загрузки страницы - PullRequest
0 голосов
/ 21 февраля 2019

Есть ли способ перенаправить с одной пользовательской страницы на другую в случае возникновения каких-либо условий при открытии первой страницы?

Я пытался использовать PXRedirectByScreenIDException с событиями RowSelected, но исключение не составляетобрабатывается и перенаправление не работает.

protected void PrimaryView_RowSelected(PXCache sender,PXRowSelectedEventArgs e)
{
     if(some_expression)
     {
          throw new PXRedirectByScreenIDException("II999999", PXBaseRedirectException.WindowMode.Base, true);
     }
}

1 Ответ

0 голосов
/ 21 февраля 2019

Многие функции 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"); }

enter image description here

Последний шаг - вызов метода JavaScript при загрузке страницы.,Я использовал CommandPerformed, потому что я знаю по опыту, что он будет надежно назван.Вы можете попробовать Initialize или другие типы Load событий в качестве точки входа JavaScript, но мне повезло меньше.

Я протестировал это законченное решение, и оно действительно перенаправило при загрузке.Возможно, он может выполнить слишком много обратных вызовов, когда ваше условие не будет заканчиваться перенаправлением, вам придется проверить это и выбрать другую точку входа, если это необходимо.

Если подходящей точки входа не найдено, я бы использовал глобальную переменную JavaScript в качестве флага, чтобы он вызывал обработчик событий действия графа только один раз.Повторный вызов функции JavaScript требует очень мало времени, а повторный вызов сервера (IIS / ASP.Net) влечет за собой огромные штрафы.

enter image description here

...