2017-10-05 2 views
1

いずれかの画面のタブの1つにGIを表示したい。任意の画面のタブにGIを表示する

たとえば、OrderMarginの新しいカスタムGIがあります。これは、特定の注文のみの注文マージンを表示する新しいタブでSO画面に表示したいものです。

OrderMarginは、SOOrder、SOLine、InventoryItemのテーブル結合を使用した単純なGIであり、マージン計算に必要な列はほとんどありません。

誰でもお勧めできますか?

答えて

2

あなたは2つの隠されたパラメータでSalesOrderMarginと呼ばれるGIを作成したとしましょう:

  1. 宣言: enter image description here

    は、あなたは以下の手順に従ってください、受注ページにこのGIを埋め込むにはSOOrderのための新たな結合していないフィールドがSalesOrderMargin GIのために絶対URLを返します:

    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. を売却販売注文トップレベルのPXFormViewコンテナ内のどこかのステップ1で宣言されたカスタムSOOrder結合していないフィールドの

    <px:PXTabItem Text="Margins" > 
        <Template> 
         <px:PXSmartPanel runat="server" ID="panelMarginGI" RenderIFrame="True" 
          AutoSize-Enabled="true" SkinID="Frame" LoadOnDemand="true"/> 
        </Template> 
    </px:PXTabItem> 
    
  3. 置き入力コントロール:■オーダー画面には、インラインフレームとしてレンダリングするために設定さPXSmartPanelコンテナで新しいタブを追加します(入力制御は、常にユーザーから隠されるだけPXSmartPanelのソースURLを割り当てるために必要とされる):SO301000.aspxで

    <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. PXSmartPanelのソースURLを割り当てるためにJavaScriptコードを挿入:

    <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. はcommandResult JavaScript関数を呼び出すためにPXDataSourceのCommandPerformedイベント登録:

    <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

関連する問題