打开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);
}
请建议。
答
我想(通过@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参数赋值。
答
改变你的窗口模式。我想你想使用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值。
很好知道有一个常量,我们可以使用GenericInquiry(PXGenericInqGrph.INQUIRY_URL)。感谢分享Ruslan – Brendan
不客气,布伦丹!如上面更新的答案所示,切换到'PXRedirectToGIRequiredException'也是值得的。 – RuslanDev
啊,是更好。再次感谢杰迪大师。查看PXRedirectToGIRequiredException,但它不包含传递参数的选项?为此,我们需要坚持使用PXRedirectToUrlException – Brendan