在任何屏幕上的选项卡中显示 GI
Displaying GI in tab on any screen
我想在任何屏幕的选项卡之一上显示 GI。
例如,OrderMargin 有一个新的自定义 GI,我想在新选项卡的 SO 屏幕上显示它,该选项卡将仅显示特定订单的订单保证金。
OrderMargin 是简单的 GI,带有 SOOrder、SOLine 和 InventoryItem table 连接,并且需要的列很少,需要进行边距计算。
谁能推荐一下?
假设您创建了一个名为 SalesOrderMargin 的 GI,其中包含 2 个隐藏参数:
要将此 GI 嵌入销售订单页面,您应该按照以下步骤操作:
将 SOOrder 的新未绑定字段声明为 return 绝对 URL SalesOrderMargin GI:
public class SOOrderExt : PXCacheExtension<SOOrder>
{
public abstract class marginGiUrl : IBqlField { }
[PXString]
[PXUIField(Visible = false)]
public string MarginGiUrl
{
get
{
if (string.IsNullOrEmpty(Base.OrderType) ||
string.IsNullOrEmpty(Base.OrderNbr)) return string.Empty;
string inqName = "SalesOrderMargin";
var url = new StringBuilder(PXGenericInqGrph.INQUIRY_URL)
.Append("?name=").Append(inqName)
.Append("&SOOrderType=").Append(Base.OrderType);
.Append("&SOOrderNbr=").Append(Base.OrderNbr);
.Append("&hidePageTitle=true");
return PX.Common.PXUrl.SiteUrlWithPath().TrimEnd('/') +
url.ToString().Remove(0, 1);
}
}
}
在“销售订单”屏幕上,添加一个新选项卡,其中的 PXSmartPanel 容器设置为呈现为 iframe:
<px:PXTabItem Text="Margins" >
<Template>
<px:PXSmartPanel runat="server" ID="panelMarginGI" RenderIFrame="True"
AutoSize-Enabled="true" SkinID="Frame" LoadOnDemand="true"/>
</Template>
</px:PXTabItem>
将在步骤 1 中声明的自定义 SOOrder 未绑定字段的输入控件放置在销售订单的顶级 PXFormView 容器中的某处(输入控件将始终对用户隐藏并且只需要分配源URL 对于 PXSmartPanel):
<px:PXFormView ID="form" runat="server" DataSourceID="ds" Width="100%"
DataMember="Document" Caption="Order Summary"...>
<Template>
...
<px:PXTextEdit ID="edMarginGiUrl" runat="server" DataField="MarginGiUrl" />
</Template>
</px:PXFormView>
在 SO301000.aspx 中插入 JavaScript 代码为 PXSmartPanel 分配源 URL:
<script type="text/javascript" language="javascript">
function commandResult(ds, context) {
var commands = ["ReloadPage", "Save", "Cancel", "Insert", "First", "Previous", "Next", "Last"];
if (commands.indexOf(context.command) >= 0) {
var marginGiUrl = px_alls["edMarginGiUrl"];
var smartpanel = px_alls["panelMarginGI"];
if (marginGiUrl || smartpanel) {
var url = marginGiUrl.getValue();
smartpanel.setPageUrl(url);
smartpanel.repaint();
}
}
}
</script>
订阅PXDataSource的CommandPerformed事件调用commandResultJavaScript函数:
<px:PXDataSource ID="ds" runat="server" Visible="True" Width="100%" TypeName="PX.Objects.SO.SOOrderEntry" PrimaryView="Document">
<ClientEvents CommandPerformed="commandResult" />
...
</px:PXDataSource>
这就是您的 SalesOrderMargin GI 在销售订单屏幕上的显示方式:
我想在任何屏幕的选项卡之一上显示 GI。
例如,OrderMargin 有一个新的自定义 GI,我想在新选项卡的 SO 屏幕上显示它,该选项卡将仅显示特定订单的订单保证金。
OrderMargin 是简单的 GI,带有 SOOrder、SOLine 和 InventoryItem table 连接,并且需要的列很少,需要进行边距计算。
谁能推荐一下?
假设您创建了一个名为 SalesOrderMargin 的 GI,其中包含 2 个隐藏参数:
要将此 GI 嵌入销售订单页面,您应该按照以下步骤操作:
将 SOOrder 的新未绑定字段声明为 return 绝对 URL SalesOrderMargin GI:
public class SOOrderExt : PXCacheExtension<SOOrder> { public abstract class marginGiUrl : IBqlField { } [PXString] [PXUIField(Visible = false)] public string MarginGiUrl { get { if (string.IsNullOrEmpty(Base.OrderType) || string.IsNullOrEmpty(Base.OrderNbr)) return string.Empty; string inqName = "SalesOrderMargin"; var url = new StringBuilder(PXGenericInqGrph.INQUIRY_URL) .Append("?name=").Append(inqName) .Append("&SOOrderType=").Append(Base.OrderType); .Append("&SOOrderNbr=").Append(Base.OrderNbr); .Append("&hidePageTitle=true"); return PX.Common.PXUrl.SiteUrlWithPath().TrimEnd('/') + url.ToString().Remove(0, 1); } } }
在“销售订单”屏幕上,添加一个新选项卡,其中的 PXSmartPanel 容器设置为呈现为 iframe:
<px:PXTabItem Text="Margins" > <Template> <px:PXSmartPanel runat="server" ID="panelMarginGI" RenderIFrame="True" AutoSize-Enabled="true" SkinID="Frame" LoadOnDemand="true"/> </Template> </px:PXTabItem>
将在步骤 1 中声明的自定义 SOOrder 未绑定字段的输入控件放置在销售订单的顶级 PXFormView 容器中的某处(输入控件将始终对用户隐藏并且只需要分配源URL 对于 PXSmartPanel):
<px:PXFormView ID="form" runat="server" DataSourceID="ds" Width="100%" DataMember="Document" Caption="Order Summary"...> <Template> ... <px:PXTextEdit ID="edMarginGiUrl" runat="server" DataField="MarginGiUrl" /> </Template> </px:PXFormView>
在 SO301000.aspx 中插入 JavaScript 代码为 PXSmartPanel 分配源 URL:
<script type="text/javascript" language="javascript"> function commandResult(ds, context) { var commands = ["ReloadPage", "Save", "Cancel", "Insert", "First", "Previous", "Next", "Last"]; if (commands.indexOf(context.command) >= 0) { var marginGiUrl = px_alls["edMarginGiUrl"]; var smartpanel = px_alls["panelMarginGI"]; if (marginGiUrl || smartpanel) { var url = marginGiUrl.getValue(); smartpanel.setPageUrl(url); smartpanel.repaint(); } } } </script>
订阅PXDataSource的CommandPerformed事件调用commandResultJavaScript函数:
<px:PXDataSource ID="ds" runat="server" Visible="True" Width="100%" TypeName="PX.Objects.SO.SOOrderEntry" PrimaryView="Document"> <ClientEvents CommandPerformed="commandResult" /> ... </px:PXDataSource>
这就是您的 SalesOrderMargin GI 在销售订单屏幕上的显示方式: