打开GI按钮点击

问题描述:

我已经创建了一个按钮,放置在采购订单项目网格和新的GI上。我需要打开这些GI并自动将PO订单号作为参数传递给GI。打开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); 
 
     }

enter image description here

请建议。

我想(通过@Brendan建议之一,最初由@Krunal另一个)2种方法之间最大的区别就是URL是如何构成的:

  • @Brendan表明相对URL

  • @Krunal由绝对URL

我有完全相同的结果作为@Krunal与绝对URL。然而与由任一下面的代码段由相对URL,任务被成功实现:

  • 使用GI名称(查询名称):使用通用查询ID

    string inqName = "InvoicedItems"; 
    var url = new StringBuilder(PXGenericInqGrph.INQUIRY_URL).Append("?name=").Append(inqName).ToString(); 
    throw new PXRedirectToUrlException(url, PXBaseRedirectException.WindowMode.New, true, null); 
    
  • (的一个GUID从数据库GI):

    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); 
    

另外值得一检查使用通用查询ID(GUID一个GI的从数据库)

string inqName = "SalespersonSales&SalespersonID=SP0003"; 
throw new PXRedirectToGIRequiredException(inqName, PXBaseRedirectException.WindowMode.New, true); 
  • :0:

    • 使用GI名称(查询名称)用的参数(SalespersonID)

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

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

  • +0

    很好知道有一个常量,我们可以使用GenericInquiry(PXGenericInqGrph.INQUIRY_URL)。感谢分享Ruslan – Brendan

    +0

    不客气,布伦丹!如上面更新的答案所示,切换到'PXRedirectToGIRequiredException'也是值得的。 – RuslanDev

    +0

    啊,是更好。再次感谢杰迪大师。查看PXRedirectToGIRequiredException,但它不包含传递参数的选项?为此,我们需要坚持使用PXRedirectToUrlException – Brendan

    改变你的窗口模式。我想你想使用InlineWindow。你也可以使用这样的网址...

    throw new PXRedirectToUrlException(
        string.Format(@"~/GenericInquiry/GenericInquiry.aspx?ID=47842ccc-aa5d-4840-9d4a-7642cbf34cbe&POOrderNumber={0}", poOrderNbr.Trim()), 
        BaseRedirectException.WindowMode.InlineWindow, 
        string.Empty); 
    

    测试并加载在当前窗口中没有菜单额外。

    我通常使用GI的guid“ID”与屏幕ID调用通用查询,因为屏幕ID可能在Acumatica实例之间不同。您可以从GI的导出中获取ID作为XML中的“DesignID”值。将示例中的ID值替换为您的GI DesignID值。

    +0

    我已经试过了。它在新窗口中打开。但是,我想在同一个窗口中打开。 – Krunal

    +0

    运行快速测试后,我更新了我的答案。使用InlineWindow并调用,如我的答案中所示。 – Brendan

    +0

    它仍然是一样的,在内部框架中加载,如截图所示。请注意,加载GI的自定义按钮位于采购订单行项目网格上。 – Krunal