【问题标题】:Displaying GI in tab on any screen在任何屏幕上的选项卡中显示 GI
【发布时间】:2017-10-05 15:47:07
【问题描述】:

我想在任何屏幕的一个选项卡上显示 GI。

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

OrderMargin 是简单的 GI,具有 SOOrder、SOLine 和 InventoryItem 表连接,并且少数列需要具有边际计算的列。

有人可以推荐吗?

【问题讨论】:

    标签: acumatica acumatica-kb


    【解决方案1】:

    假设您创建了一个名为 SalesOrderMargin 的 GI,其中包含 2 个隐藏参数:

    要将此 GI 嵌入到销售订单页面,您应该按照以下步骤操作:

    1. 为 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. 在“销售订单”屏幕上,添加新选项卡,其中 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>
      
    3. 将步骤 1 中声明的自定义 SOOrder 未绑定字段的输入控件放置在销售订单的顶级 PXFormView 容器中的某处(输入控件将始终对用户隐藏,只需要为 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 代码为 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>
      
    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 在销售订单屏幕上的显示方式:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-14
      相关资源
      最近更新 更多