2017-10-05 165 views
1

我想在任何屏幕上的标签之一上显示GI。在任何屏幕上显示标签中的GI

例如,OrderMargin有一个新的自定义GI,我想在一个新选项卡上的SO屏幕上显示,该选项卡仅显示特定订单的订单余量。

OrderMargin是简单的GI,包含SOOrder,SOLine和InventoryItem表连接以及少量列需要的具有边距计算的列。

任何人都可以建议吗?

回答

2

比方说,你已经创建了一个名为SalesOrderMargin GI 2个隐藏的参数: enter image description here

要嵌入这个GI到销售订单页面,您应该遵循以下步骤:

  1. 申报对于SOOrder新绑定字段返回绝对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); 
         } 
        } 
    } 
    
  2. 出售

    <px:PXTabItem Text="Margins" > 
        <Template> 
         <px:PXSmartPanel runat="server" ID="panelMarginGI" RenderIFrame="True" 
          AutoSize-Enabled="true" SkinID="Frame" LoadOnDemand="true"/> 
        </Template> 
    </px:PXTabItem> 
    
  3. 将输入控制自定义SOOrder未绑定字段在销售订单顶级PXFormView容器第1步的地方宣布:■订单屏幕,以成立渲染为一个iframe一个PXSmartPanel容器中添加新标签(输入控制将总是从用户隐藏,并且只需要分配用于PXSmartPanel源URL):

    <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> 
    
  4. 在SO301000.aspx插入JavaScript代码来分配源URL为PXSmartPanel:

    <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> 
    
  5. 订阅PXDataSource的CommandPerformed事件调用commandResult JavaScript函数:

    <px:PXDataSource ID="ds" runat="server" Visible="True" Width="100%" TypeName="PX.Objects.SO.SOOrderEntry" PrimaryView="Document"> 
        <ClientEvents CommandPerformed="commandResult" /> 
        ... 
    </px:PXDataSource> 
    

这是你的SalesOrderMargin GI应该如何出现在销售订单屏幕上: enter image description here