EnterPrise Portal 弹出子页面显示关联数据
之前做过一个AX 2009 企业门户的一个项目(简称EP),其中有一个功能是,客户为了方便,想通过下拉菜单按钮弹出一个子页面显示相关的信息数据,而不是在原页面刷新,因为在原页面刷新的话,客户想在回到之前的页面的话,又要退回到原页面,这样的话,使用起来效力确实是很低。当时因为都刚刚接触EP,毫无经验,又找不到相关的资料,我们就告诉客户这个解决不了。 通过一段时间的摸索和学习,又回想起这个需求,我就试了试,其实,这是一个不是很难完成的事情。下面我讲解该如何完成,
首先,在AX的dataset中写一个过滤方法
void RGD_InitData() { SMAServiceOrderTable serviceOrderTable; Tableid strTableid; real strRecid; QueryBuildRange tableidRange; QueryBuildRange recidRange; ; info(strfmt("%1",this.args().dataset())); if(this.args().dataset() == tablenum(SMAServiceOrderTable)) { serviceOrderTable = this.args().record(); } if(ServiceOrderTable) { strTableid = ServiceOrderTable.TableId; strRecid = ServiceOrderTable.RecId; } info("test"+serviceOrderTable.ServiceOrderId); tableidRange = DocuRef_q.dataSourceTable(tablenum(DocuRef)).addRange(fieldnum(DocuRef, RefTableid)); tableidRange.value(queryValue(strTableid)); tableidRange.status(RangeStatus::Hidden); recidRange = DocuRef_q.dataSourceTable(tablenum(DocuRef)).addRange(fieldnum(DocuRef, RefRecid)); recidRange.value(sysQuery::value(num2str(strRecid,0,0,1,0))); recidRange.status(RangeStatus::Hidden); DocuRef_ds.executeQuery(); }
然后,在我们需要弹出子页面控件里的page_Load调用这个方法
protected void Page_Load(object sender, EventArgs e) { this.dsEPDocuList.GetDataSet().DataSetRun.AxaptaObjectAdapter.Call("RGD_InitData"); }
然后在父页面的用户控件后台写代码
1,控件初始化时
void Page_Init(object sender, EventArgs e) { // Setup event handler for toolbar connected via webpart connections if (this.BaseWebpart != null) { this.BaseWebpart.SetMenuItemProperties += new EventHandler<SetMenuItemPropertiesEventArgs>(BaseWebpart_SetMenuItemProperties); this.BaseWebpart.ActionMenuItemClicking += new EventHandler<ActionMenuItemClickingEventArgs>(BaseWebpart_ActionMenuItemClicking); this.dsNBL_RailReactive.CreatingDataSetRun += new EventHandler<CreatingDataSetRunEventArgs>(dsNBL_RailReactive_CreatingDataSetRun); } }
其中,this.BaseWebpart.SetMenuItemProperties += new EventHandler<SetMenuItemPropertiesEventArgs>(BaseWebpart_SetMenuItemProperties);
void BaseWebpart_SetMenuItemProperties(object sender, SetMenuItemPropertiesEventArgs e)
{
if (String.Compare(e.MenuItem.MenuItemAOTName.ToLower(), "epserviceordercreate", true) == 0 &&
e.MenuItem is AxUrlMenuItem)
{
((AxUrlMenuItem)e.MenuItem).MenuItemContext = null;
}
}
设置弹出页面后,显示效果,比如,哪些下拉菜单该隐藏,哪些菜单该被禁用等等。。。
最重要的,this.BaseWebpart.ActionMenuItemClicking += new EventHandler<ActionMenuItemClickingEventArgs>(BaseWebpart_ActionMenuItemClicking);
void BaseWebpart_ActionMenuItemClicking(object sender, ActionMenuItemClickingEventArgs e)
{
if (e.MenuItem.MenuItemAOTName == "DocuListAction")
{
AxUrlMenuItem menuItem = new AxUrlMenuItem("EPDocuListFromInfo");
menuItem.RemoveNavigation = true;
IAxaptaRecordAdapter recordAdapter = this.dsNBL_RailReactive.GetDataSourceView("smaServiceOrderTable").DataSetView.GetCurrent ().GetRecord();
AxTableContext tableContext = AxTableContext.Create(AxTableDataKey.Create(AxSession,recordAdapter,null)); menuItem.MenuItemContext = tableContext;
this.DocuPopupParent.GetOpenPopupEventReference(menuItem); this.DocuPopupParent.OpenPopup(menuItem);
}
e.RunMenuItem = false;
}
这段代码是,当你点击下拉菜单后,弹出的子页面。
最后还有一些其他的附加代码, 我就不在粘贴了。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂