Axapta 当使用视图作为数据源时,如何添加窗体范围值?

Axapta 当使用视图作为数据源时,如何添加窗体范围值?,axapta,x++,dynamics-ax-2012,Axapta,X++,Dynamics Ax 2012,我希望能够在一个新的表单数据源上创建一个自定义过滤器,这个表单数据源是我创建的自定义视图 我创建了一个自定义视图ABCPURCHLINEEBUSUNITVIEW(来自一个将PurchLine表连接到DefaultDimension视图的自定义查询),以附加到现有表单的数据源(PurchLineOpenOrder)。表单主网格中的DisplayValue列将返回所有Purchline的业务单元维度值 定制表格:- 在新数据源的init()方法中,我将视图加入到现有PurchLine数据源中,如下所

我希望能够在一个新的表单数据源上创建一个自定义过滤器,这个表单数据源是我创建的自定义视图

我创建了一个自定义视图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