我已经在PO订单项网格和新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);
}
请建议。
答案 0 :(得分:4)
我猜两种方法之间的最大区别(@Brendan和@Krunal最初使用的另一种方法)是如何组成URL:
@Brendan建议使用相对网址
@Krunal撰写了绝对网址
与绝对网址的@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);
使用通用查询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);
还值得查看PXRedirectToGIRequiredException
:
使用带有参数(SalespersonID)的GI名称(查询标题):
string inqName = "SalespersonSales&SalespersonID=SP0003";
throw new PXRedirectToGIRequiredException(inqName, PXBaseRedirectException.WindowMode.New, true);
使用通用查询ID(来自数据库的GI的Guid):
Guid inqID = Guid.Parse("6b267dbb-0ff2-49b2-b005-355c544daba3");
throw new PXRedirectToGIRequiredException(inqID, PXBaseRedirectException.WindowMode.New, true);
PXRedirectToGIRequiredException
的两个样本都可以绝对为GI参数赋值。
答案 1 :(得分:0)
更改您的窗口模式。我想你想使用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调用通用查询,因为Acumatica实例之间的屏幕ID可能不同。您可以从GI的导出中获取ID作为XML中的“DesignID”行。将示例中的ID值替换为GI DesignID值。