Axapta 当使用视图作为数据源时,如何添加窗体范围值?
我希望能够在一个新的表单数据源上创建一个自定义过滤器,这个表单数据源是我创建的自定义视图 我创建了一个自定义视图ABCPURCHLINEEBUSUNITVIEW(来自一个将PurchLine表连接到DefaultDimension视图的自定义查询),以附加到现有表单的数据源(PurchLineOpenOrder)。表单主网格中的DisplayValue列将返回所有Purchline的业务单元维度值 定制表格:- 在新数据源的init()方法中,我将视图加入到现有PurchLine数据源中,如下所示:Axapta 当使用视图作为数据源时,如何添加窗体范围值?,axapta,x++,dynamics-ax-2012,Axapta,X++,Dynamics Ax 2012,我希望能够在一个新的表单数据源上创建一个自定义过滤器,这个表单数据源是我创建的自定义视图 我创建了一个自定义视图ABCPURCHLINEEBUSUNITVIEW(来自一个将PurchLine表连接到DefaultDimension视图的自定义查询),以附加到现有表单的数据源(PurchLineOpenOrder)。表单主网格中的DisplayValue列将返回所有Purchline的业务单元维度值 定制表格:- 在新数据源的init()方法中,我将视图加入到现有PurchLine数据源中,如下所
public void init()
{
#DEFINE.DataSourceBusUnit(7)
QueryBuildDataSource qbds;
super();
qbds = this.query().dataSourceNo(#DataSourceBusUnit);
qbds.clearLinks();
qbds.joinMode(JoinMode::InnerJoin);
qbds.relations(true);
qbds.addLink(fieldNum(PurchLine,RecId),fieldNum(ABCPurchLineBusUnitView,RecId));
qbrBusinessUnit = qbds.addRange(fieldNum(ABCPurchLineBusUnitView, DisplayValue));
}
在同一数据源的executeQuery()方法中,我设置了一个硬编码的范围值,以仅返回与特定业务单元相关的采购线
public void executeQuery()
{
qbrBusinessUnit.value(queryValue('Business unit name here'));
super();
}
显示的列工作正常。
但是,使用CTRL+G查看用户筛选器时,很明显筛选器值不存在且尚未应用
在同一个表单上,当我在现有数据源上应用过滤器时,使用上面的技术可以很好地工作,这是令人困惑的
此外,我希望这能在外部连接的数据源上工作,并尝试使用QueryFilter,但使用相同的数据源方法也没有成功。您应该使用根数据源(
PurchLine
)的executeQuery
)因为ABCPurchLineBusUnitView
是使用InnerJoin
连接的,所以在那里不调用executeQuery
除此之外,还有一些观察:
- 而不是使用
您可以使用qbds=this.query().dataSourceNo(#DataSourceBusUnit)
,我相信您已经知道它是qbds=this.query().dataSourceTable(tableNum(ABCPurchLineBusUnitView))
中的标准代码\Forms\PurchLineOpenOrder\Data Sources\PurchLine\Methods\init
- 如果数据源
的属性ABCPurchLineBusUnitView
已设置为LinkType
,则行InnerJoin
qbds.joinMode(joinMode::InnerJoin)代码>不需要,可以删除
- 您不应该同时使用
和qbds.relations(true)
qbds.addLink(fieldNum(PurchLine,RecId),fieldNum(ABCPurchLineBusUnitView,RecId))代码>。尝试替换
qbds.关系(true)代码>与
qbds.关系(假)代码>如果需要使用
addLink
PurchLine
)的executeQuery
),因为abcpurchlinebusunitiew
是使用InnerJoin
连接的,所以那里不调用executeQuery
除此之外,还有一些观察:
- 而不是使用
您可以使用qbds=this.query().dataSourceNo(#DataSourceBusUnit)
,我相信您已经知道它是qbds=this.query().dataSourceTable(tableNum(ABCPurchLineBusUnitView))
中的标准代码\Forms\PurchLineOpenOrder\Data Sources\PurchLine\Methods\init
- 如果数据源
的属性ABCPurchLineBusUnitView
已设置为LinkType
,则行InnerJoin
qbds.joinMode(joinMode::InnerJoin)代码>不需要,可以删除
- 您不应该同时使用
和qbds.relations(true)
qbds.addLink(fieldNum(PurchLine,RecId),fieldNum(ABCPurchLineBusUnitView,RecId))代码>。尝试替换
qbds.关系(true)代码>与
qbds.关系(假)代码>如果需要使用
addLink