Axapta 按物料名称筛选-库存管理/查询/现有
据我所知,ProductName列是通过显示方法显示的。至少对于我在此处的实现,此方法位于InventSum表中:Axapta 按物料名称筛选-库存管理/查询/现有,axapta,microsoft-dynamics,dynamics-ax-2012,dynamics-ax-2012-r3,Axapta,Microsoft Dynamics,Dynamics Ax 2012,Dynamics Ax 2012 R3,据我所知,ProductName列是通过显示方法显示的。至少对于我在此处的实现,此方法位于InventSum表中: display public ItemNameDisplay itemName() { // Fields might not have been selected on the specified buffers, or might have been updated since selection this.checkInvalidFieldAccess(fal
display public ItemNameDisplay itemName()
{
// Fields might not have been selected on the specified buffers, or might have been updated since selection
this.checkInvalidFieldAccess(false);
if (this.InventDimId)
{
return this.inventTable().itemName(InventDim::find(this.InventDimId));
}
return this.inventTable().itemName();
}
当我点击Ctrl+G并尝试过滤数据时,上述列的此选项被禁用,我认为这是由于该显示方法造成的。我有没有办法实现这个功能
我是否应该尝试(右键单击)在那里添加另一个菜单项,并在一个新对话框的帮助下进行过滤(在该对话框中我将写下项目名称),然后在表单上刷新
更新1:
我为我的特殊情况找到并编辑了此方法:
public void context()
{
InventTable inventTable;
int selectedMenu;
real test;
formrun fr;
Args ag;
Itemname strtext;
querybuilddataSource qb1;
queryrun qr;
query q;
PopupMenu menu = new PopupMenu(element.hWnd());
int a = menu.insertItem('Find');
int c = menu.insertItem('Remove Filter');
selectedMenu = menu.draw();
switch (selectedMenu)
{
case -1:
break;
case a:
ag = new args('SysformSearch');
fr = new formrun(ag);
fr.run();
fr.wait();
strtext = fr.design().controlName('FindEdit').valueStr();
if(strtext)
{
select ItemId from inventTable
where inventTable.NameAlias == strtext;
InventSum_DS.filter(FieldNum(InventSum,ItemId),Sysquery::value(inventTable.ItemId));
}
break;
case c :
InventSum_DS.removeFilter();
break;
Default:
break;
}
}
我仍然认为仅仅显示一个新的弹出菜单是不正确的。我想钩到通常的菜单,并添加新的查找和删除过滤器就在那里。和。。删除过滤器需要一段时间,我应该以某种方式发出信号,这样用户就不会惊慌失措。使用上下文菜单不是实现这一点的方法,不过这是对想法的补充 您需要做的是使用所需字段的数据源扩展表单。 在这种情况下,它需要
InventTable
内部连接到InventSum
,EcoResProduct
内部连接到InventTable
和EcoresProductTranslation
内部连接到EcoResProduct
。将字段EcoresProductTranslation.Name
添加为网格中的字段
你必须在首选语言上做一个范围。如果不存在对该语言的翻译,将不会有输出
由于查询是分组查询,您需要在EcoresProductTranslation.Name
上按分组。
表单的代码相当复杂,因此让它工作起来可能会很痛苦。使用上下文菜单不是一种方法,但它是对想法的补充 您需要做的是使用所需字段的数据源扩展表单。 在这种情况下,它需要
InventTable
内部连接到InventSum
,EcoResProduct
内部连接到InventTable
和EcoresProductTranslation
内部连接到EcoResProduct
。将字段EcoresProductTranslation.Name
添加为网格中的字段
你必须在首选语言上做一个范围。如果不存在对该语言的翻译,将不会有输出
由于查询是分组查询,您需要在EcoresProductTranslation.Name
上按分组。
表单的代码相当复杂,因此让它工作起来可能很痛苦。我发现这篇文章: 基本上,我们基于InventTable、EcoResProduct和EcoResProductTranslation创建一个查询,以便从InventTable中的product字段开始获取产品名称 InventSum上添加了一个新关系: 在InventOnHandItem>DataSources>InventSum>Methods>executeQuery上,我添加了新的ds:
element.inventDimSetupObject().modifyQuery(inventSum_DS,inventDim_DS, InventLookupView_ds);
在课堂上:
InventDimCtrl\u Frm\u OnHand>modifyQuery,我添加了以下参数:
FormDataSource _inventLookup = null
现在我有了这个:
public void modifyQuery(
FormDataSource _inventSum_DS,
FormDataSource _inventDim_DS,
FormDataSource _inventLookup = null
)
查询生成数据源实例:
QueryBuildDataSource qbsInventLookup;
本节代码:
if(_inventLookup)
{
qbsInventLookup = query.dataSourceName(_inventLookup.name());
//filter current company language
//qbr = SysQuery::findOrCreateRange(qbsInventLookup, fieldnum(InventLookupView, LanguageId));
//qbr.value(queryValue(CompanyInfo::languageId()));
qbsInventLookup.addGroupByField(fieldNum(InventLookupView, Name));
//qbsInventLookup.addGroupByField(fieldNum(InventLookupView,NameAlias));
}
新创建的视图将作为数据源添加到InventSum中:
并将名称字段从此数据源拖动到网格中。这对我来说很好 我发现了这篇文章: 基本上,我们基于InventTable、EcoResProduct和EcoResProductTranslation创建一个查询,以便从InventTable中的product字段开始获取产品名称 InventSum上添加了一个新关系: 在InventOnHandItem>DataSources>InventSum>Methods>executeQuery上,我添加了新的ds:
element.inventDimSetupObject().modifyQuery(inventSum_DS,inventDim_DS, InventLookupView_ds);
在课堂上:
InventDimCtrl\u Frm\u OnHand>modifyQuery,我添加了以下参数:
FormDataSource _inventLookup = null
现在我有了这个:
public void modifyQuery(
FormDataSource _inventSum_DS,
FormDataSource _inventDim_DS,
FormDataSource _inventLookup = null
)
查询生成数据源实例:
QueryBuildDataSource qbsInventLookup;
本节代码:
if(_inventLookup)
{
qbsInventLookup = query.dataSourceName(_inventLookup.name());
//filter current company language
//qbr = SysQuery::findOrCreateRange(qbsInventLookup, fieldnum(InventLookupView, LanguageId));
//qbr.value(queryValue(CompanyInfo::languageId()));
qbsInventLookup.addGroupByField(fieldNum(InventLookupView, Name));
//qbsInventLookup.addGroupByField(fieldNum(InventLookupView,NameAlias));
}
新创建的视图将作为数据源添加到InventSum中:
并将名称字段从此数据源拖动到网格中。这对我来说很好 是否要按项目名称(如问题中所述)或名称别名(如更新1中所实现)进行筛选?对于这两个字段,可能的解决方案是完全不同的。@FH顺便说一句,我想按项目名称进行筛选。我似乎无法用这种方式控制事情。如果用户想要得到许多结果,我必须添加许多范围,并以某种方式执行strScan来检查包含所需字符串的所有值,可能字符串包含*或!等我哪儿也不去..您想按项目名称(如问题中所述)或名称别名(如更新1中所实现)进行筛选吗?对于这两个字段,可能的解决方案是完全不同的。@FH顺便说一句,我想按项目名称进行筛选。我似乎无法用这种方式控制事情。如果用户想要得到许多结果,我必须添加许多范围,并以某种方式执行strScan来检查包含所需字符串的所有值,可能字符串包含*或!等我哪儿也不去。非常感谢你一月的回复。星期五晚上我已经安排好了。。没有这个就不能开始周末了。。我想我这边少了点什么。。为了让它工作,我把语言部分注释掉了。非常感谢你1月份的回复。我已经在周五晚上让它工作了。。没有这个就不能开始周末了。。我想我这边少了点什么。。我注释掉了语言部分,以便它工作。