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>
我遇到这样一种情况,我需要能够在弹出窗口、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>