Acumatica ERP在页面加载后按条件重定向
在打开第一页时出现某些情况时,是否有任何方法可以从一个自定义页重定向到另一个自定义页 我已尝试将Acumatica ERP在页面加载后按条件重定向,acumatica,acumatica-kb,Acumatica,Acumatica Kb,在打开第一页时出现某些情况时,是否有任何方法可以从一个自定义页重定向到另一个自定义页 我已尝试将pxrirectbyscreenidexception与RowSelected事件一起使用,但未处理异常,重定向不起作用 protected void PrimaryView_RowSelected(PXCache sender,PXRowSelectedEventArgs e) { if(some_expression) { throw new PXRedir
pxrirectbyscreenidexception
与RowSelected
事件一起使用,但未处理异常,重定向不起作用
protected void PrimaryView_RowSelected(PXCache sender,PXRowSelectedEventArgs e)
{
if(some_expression)
{
throw new PXRedirectByScreenIDException("II999999", PXBaseRedirectException.WindowMode.Base, true);
}
}
许多针灸特征只在狭窄的范围内起作用。我注意到
重定向异常
在操作事件处理程序的上下文中执行时始终有效。大概在执行这些处理程序时,框架会围绕一个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();
}
}
最后一步是在页面加载时调用JavaScript方法。我使用了CommandPerformed
,因为根据经验,我知道它会被可靠地调用。您可以尝试将初始化
或其他类型的加载
事件作为JavaScript入口点,但我的运气不太好
我测试了这个完整的解决方案,它确实在加载时重定向了。当您的条件不会以重定向结束时,它可能会执行太多回调,您必须对此进行测试,并在必要时选择另一个入口点
如果没有找到合适的入口点,我将使用一个全局JavaScript变量作为标志,以便它只调用一次graph action事件处理程序。重复调用JavaScript函数的开销非常低,重复调用服务器(IIS/ASP.Net)会带来巨大的损失
我们决定将重定向逻辑移动到OnBeforePersist事件处理程序,该事件处理程序将从PXViewExtensionAttribute中添加。原因是为了简化应用这些验证和重定向到自定义屏幕的过程。实际上,我错过了您在一个自定义页面中提到的部分。对于自定义页面,有可能在ASPX.CS文件中包含加载事件,因此与自定义页面相比,挂载更容易:asiablog.acumatica.com/2017/06/redirect-on-page-Load.html
function Redirect_Initialize() { px_alls["ds"].executeCallback("redirect"); }