PXRedirectToUrlExcption - 控制 window 模式 (Acumatica 4.2)

PXRedirectToUrlExcption - controlling window mode (Acumatica 4.2)

我遇到这样一种情况,我需要能够在弹出窗口、iframe 中显示来自另一个站点的页面,当前 window(我可以开始工作)。

在我的流程(机会)的某个时刻需要这样做,我需要调用一个外部应用程序来管理一些特定的配置,然后通过 WebAPI 将其保存回数据库。

目前我有一个方法可以构建我的 url 并将其传递给 PXRedirectToUrlException 以进行调用。这是在服务器端完成的,因为我需要根据当前机会提取特定数据以构建正确的 URL 以通过。

我发现,如果重定向 url 与我的开发服务器位于相同的基域中,它会按预期与 WindowMode 一起工作,但是如果重定向 url 是在不同的域中,它总是以新 window/tab.

打开新页面

调试调用我看到当它在同一页面上时,调用 returns 一条 "Redirect0" 消息但是在不同的域上它调用 "Redirect4"

有没有办法通过重定向例外来做到这一点(在 popup/iframe/current window 中的单独域中打开页面)?

我想到的另一个选择是创建一个虚拟页面,调用该页面,然后通过 javascript 或标准 aspx 调用处理重定向。

任何ideas/suggestions将不胜感激。

我之前有样品,你可以试试。在此,我们创建一个带有过滤器 DAC 和一个虚拟过滤器的虚拟图,稍后我们在表单视图中创建一个带有过滤器的 aspx wch 有助于根据需要使用一些 javascript 附加 URL 并显示智能面板中的外部页面..代码如下

C#

 [Serializable]
    public class UrlFilter : IBqlTable
    {
        #region FilterParam
        public class filterParam : IBqlField { }
        [PXString(50, IsUnicode = true)]
        [PXUIField(DisplayName = "Parameter")]
        public string FilterParam { get; set; }
        #endregion
    }

    [Serializable]
    public class DummyClass : IBqlTable
    {
    }

    public class UrlGraph : PXGraph<UrlGraph>
    {
        public PXFilter<UrlFilter> Filter;

        public PXFilter<DummyClass> DummyRecord;

        public PXAction<UrlFilter> Action;
        [PXButton(CommitChanges = true)]
        protected void action()
        {
        }
    }

JAVA脚本

<script type="text/javascript" language="javascript">
        function commandResult(ds, context) {
            var paramIdCtrl, smartpanel, param;
            for (var key in ds.px_context.px_all) {
                if (key.indexOf("_edFilterParam") > 0) {
                    paramIdCtrl = ds.px_context.px_all[key];
                }
                if (key.indexOf("_ExternalWebsitePanel") > 0) {
                    smartpanel = ds.px_context.px_all[key];
                }
            }
            if (paramIdCtrl || smartpanel) {
                param = paramIdCtrl.getValue();

                var newUrl = 'http://testsite.com/search.shtml?q=' + param;

                smartpanel.setPageUrl(newUrl);
                smartpanel.repaint();
            }
        }
    </script>

表单和智能面板

           <px:PXFormView ID="form" runat="server" DataSourceID="ds" Style="z-index: 100" Width="100%" DataMember="Filter" TabIndex="6500">
                <Template>
                    <px:PXLayoutRule ID="PXLayoutRule1" runat="server" StartRow="True" ControlSize="M" LabelsWidth="XS" />
                    <px:PXTextEdit ID="edFilterParam" runat="server" DataField="FilterParam" CommitChanges="True">
                        <AutoCallBack Command="Action" Target="ds" />
                    </px:PXTextEdit>
                </Template>
                <AutoSize Container="Parent" Enabled="True" />
            </px:PXFormView>


            <px:PXSmartPanel runat="server" AllowMove="False" AllowResize="False" ID="ExternalWebsitePanel" RenderVisible="True"
                RenderIFrame="True" AutoSize-Enabled="true" SkinID="Frame" LoadOnDemand="True" InnerPageUrl="http://testsite.com/" Position="Original">
            </px:PXSmartPanel>