0

如果在打开第一页时出现某些情况,是否有任何方法可以从一个自定义页面重定向到另一个自定义页面?

我尝试使用PXRedirectByScreenIDExceptionwithRowSelected事件,但没有处理异常并且重定向不起作用。

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

1 回答 1

1

许多 Acumatica 功能仅适用于狭窄范围的上下文。我注意到Redirection ExceptionAction Event Handler. 大概在执行这些处理程序时,框架将调用包装在一个 catch 块周围,该块专门捕获那些重定向异常类型并执行重定向。在其他情况下,它可能无法捕获此特定类型,从而导致部分未处理的异常。

所以我在页面加载时重定向的想法是在动作事件处理程序中抛出重定向异常。该操作需要从 UI 上下文中调用,否则仍将无法处理。因此,我将使用 JavaScript 在页面加载时从 UI 调用操作。

在动作事件处理程序的上下文中引发重定向异常的图形扩展:

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) 会带来巨大的损失。

在此处输入图像描述

于 2019-02-21T16:09:19.960 回答