Acumatica 点击按钮打开GI

Acumatica 点击按钮打开GI,acumatica,Acumatica,我已经创建了一个放置在采购订单行项目网格上的按钮和一个新的GI。我需要打开这些GI并自动将PO订单号作为参数传递给GI 我已经在按钮事件处理程序中编写了以下代码。但是,它是在内部框架(参见屏幕截图)中而不是在主窗口中打开GI public PXAction viewFullSODemandGI; [PXButton()] [PXUIField(DisplayName=“查看全部SO请求”,MapEnableRights=PXCacheRights.Insert,MapViewRights=PX

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

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

public PXAction viewFullSODemandGI;
[PXButton()]
[PXUIField(DisplayName=“查看全部SO请求”,MapEnableRights=PXCacheRights.Insert,MapViewRights=PXCacheRights.Insert)]
受保护的虚拟IEnumerable ViewFullSODemandGI(PXAdapter适配器)
{
var poOrderNbr=string.Empty;
foreach(适配器中的POOrder电流。Get())
{
poOrderNbr=current.OrderNbr;
}
var sURL=PXUrl.ToAbsoluteUrl(HttpUtility.UrlPathEncode(string.Format(“~/?CompanyID=Company&ScreenId=GI000092&POOrderNumber={0}”,poOrderNbr.Trim());
抛出新的PXRedirectTourexception(sURL,PXBaseRedirectException.WindowMode.new,false,null);

}
更改窗口模式。我想你应该使用InlineWindow。你也可以像这样使用url

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”和screen ID调用一般查询,因为Acumatica实例之间的屏幕ID可能不同。您可以从GI的导出中获取ID,作为XML中的行“DesignID”值。将示例中的ID值替换为GI DesignID值。

更改窗口模式。我想你应该使用InlineWindow。你也可以像这样使用url

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”和screen ID调用一般查询,因为Acumatica实例之间的屏幕ID可能不同。您可以从GI的导出中获取ID,作为XML中的行“DesignID”值。将示例中的ID值替换为您的GI DesignID值。

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

  • @Brendan建议使用相对URL

  • @Krunal组成了一个绝对URL

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

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

  • 使用通用查询ID(来自数据库的GI的Guid):

还值得检查
pxrirecttogirerequiredexception

  • 将GI名称(查询标题)与参数(salersonid)一起使用:

  • 使用通用查询ID(来自数据库的GI的Guid):


PXRedirectToGIRequiredException
的两个示例完全可以为GI参数赋值。

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

  • @Brendan建议使用相对URL

  • @Krunal组成了一个绝对URL

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

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

  • 使用通用查询ID(来自数据库的GI的Guid):

还值得检查
pxrirecttogirerequiredexception

  • 将GI名称(查询标题)与参数(salersonid)一起使用:

  • 使用通用查询ID(来自数据库的GI的Guid):



PXRedirectToGIRequiredException的两个示例都绝对可以为GI参数赋值。

我已经尝试过了。它正在一个新窗口中打开。但是,我想在同一个窗口中打开。我在运行快速测试后更新了我的答案。使用InlineWindow并调用,如我的回答所示。它仍然是相同的,加载到内部框架中,如屏幕截图所示。请注意,用于加载GI的自定义按钮位于PO行项目网格上。仍在测试此。。奇怪的是,它是用你的代码和我的代码做的。我还通过ID而不是屏幕ID来调用GI,因为屏幕ID可能因实例而异,使用不同的GI URL调用。我在PO屏幕上使用您的代码(当然是不同的GI)。只要用你的ID替换我例子中的ID值,我已经试过了。它正在一个新窗口中打开。但是,我想在同一个窗口中打开。我在运行快速测试后更新了我的答案。使用InlineWindow并调用,如我的回答所示。它仍然是相同的,加载到内部框架中,如屏幕截图所示。请注意,用于加载GI的自定义按钮位于PO行项目网格上。仍在测试此。。奇怪的是,它是用你的代码和我的代码做的。我还通过ID而不是屏幕ID来调用GI,因为屏幕ID可能因实例而异,使用不同的GI URL调用。我在PO屏幕上使用您的代码(当然是不同的GI)。只需将我的示例中的ID值替换为您的ID即可。很高兴知道有一个常量可用于GenericInquiry(PXGenericInqGrph.INQUIRY\u URL)。谢谢分享,不客气,布伦丹!也值得切换到
pxrirecttogirequiredexception
,如上面更新的答案所示。啊,是的,更好。再次感谢绝地大师。查看PXRedirectToGireRequestException,但它不包括传递参数的选项?为此,我们需要坚持使用PXRedirectTourLexPerception。实际上,仍然可以使用PXRedirectToGIRequiredException传递参数-使用上面带有参数(SalesorSoID)示例的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);
string inqName = "SalespersonSales&SalespersonID=SP0003";
throw new PXRedirectToGIRequiredException(inqName, PXBaseRedirectException.WindowMode.New, true);
Guid inqID = Guid.Parse("6b267dbb-0ff2-49b2-b005-355c544daba3");
throw new PXRedirectToGIRequiredException(inqID, PXBaseRedirectException.WindowMode.New, true);