单击按钮打开 GI

Kru*_*nal 0 acumatica

我创建了一个放置在采购订单行项目网格上的按钮和一个新的 GI。我需要打开这些 GI 并自动将 PO 订单号作为参数传递给 GI。

我在按钮事件处理程序中编写了以下代码。但是,它是在内部框架内(见截图)而不是在主窗口中打开 GI。

public PXAction<POOrder> viewFullSODemandGI;

        [PXButton()]
        [PXUIField(DisplayName = "View Full SO Demand", MapEnableRights = PXCacheRights.Insert, MapViewRights = PXCacheRights.Insert)]
        protected virtual IEnumerable ViewFullSODemandGI(PXAdapter adapter)
        {
            var poOrderNbr = string.Empty;
            foreach (POOrder current in adapter.Get<POOrder>())
            {
                poOrderNbr = current.OrderNbr;
            }

            var sURL = PXUrl.ToAbsoluteUrl(HttpUtility.UrlPathEncode(string.Format("~/?CompanyID=Company&ScreenId=GI000092&POOrderNumber={0}", poOrderNbr.Trim())));

            throw new PXRedirectToUrlException(sURL, PXBaseRedirectException.WindowMode.New, false, null);
        }
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

请建议。

Rus*_*Dev 6

我想这两种方法(一种由@Brendan 建议,另一种最初由 @Krunal 使用)之间的最大区别在于 URL 的组成方式:

  • @Brendan 建议使用相对 URL

  • @Krunal 组成了一个绝对 URL

我的结果与使用绝对 URL 的 @Krunal 完全相同。但是,使用由以下任一代码片段组成的相对 URL,成功完成了任务:

  • 使用 GI 名称(查询标题):

    string inqName = "InvoicedItems";
    var url = new StringBuilder(PXGenericInqGrph.INQUIRY_URL).Append("?name=").Append(inqName).ToString();
    throw new PXRedirectToUrlException(url, PXBaseRedirectException.WindowMode.New, true, null);
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用通用查询 ID(来自数据库的 GI 的 GUID):

    string inqID = "6b267dbb-0ff2-49b2-b005-355c544daba3";
    var url = new StringBuilder(PXGenericInqGrph.INQUIRY_URL).Append("?id=").Append(inqID).ToString();
    throw new PXRedirectToUrlException(url, PXBaseRedirectException.WindowMode.New, true, null);
    
    Run Code Online (Sandbox Code Playgroud)

还值得检查PXRedirectToGIRequiredException

  • 使用带有参数 (SalespersonID) 的 GI 名称(查询标题):

    string inqName = "SalespersonSales&SalespersonID=SP0003";
    throw new PXRedirectToGIRequiredException(inqName, PXBaseRedirectException.WindowMode.New, true);
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用通用查询 ID(来自数据库的 GI 的 GUID):

    Guid inqID = Guid.Parse("6b267dbb-0ff2-49b2-b005-355c544daba3");
    throw new PXRedirectToGIRequiredException(inqID, PXBaseRedirectException.WindowMode.New, true);
    
    Run Code Online (Sandbox Code Playgroud)

的两个样本PXRedirectToGIRequiredException都可以绝对地为 GI 参数赋值。