通过链接的数据源过滤表单的主数据源

时间:2018-05-29 16:30:26

标签: axapta x++ dynamics-ax-2012

我有一个自定义表单,有两个数据表。让我们说使我的表单具有Salestable和SalesLines数据源更容易。

例如,我可以说我有一个与ItemGroup edt绑定的过滤器。

我想通过此过滤器过滤SalesTable数据源,以便在与SalesOrders数据连接的网格中“显示”:

''所有SalesOrders都有'saleslines的营业额.ItemGroup == somethingfromFilter ''。

无论我尝试什么都是假的。有人能帮助我吗?

仅供参考:我认为正确链接的数据源属性: SalesLine.JoinSource = SalesTable 我的所有尝试都是在过滤器的修改方法中。

4 个答案:

答案 0 :(得分:3)

我假设您在ItemGroupId表格中有一个SalesLine字段。 这不是标准的 另外,我假设您在名为ItemGroupIdCtrl的表单中有一个过滤字段。

添加帮助程序数据源SalesLineEx

  • 名称:SalesLineEx
  • 表:SalesLine
  • 允许......:否
  • JoinSource:SalesTable
  • LinkType:ExistJoin

SalesTable数据源executeQuery modthod:

public void executeQuery()
{
    SysQuery::findOrCreateRange(salesLineEx_ds.queryBuildDataSource(), fieldNum(SalesLine,ItemGroupId)).value(ItemGroupIdCtrl.text());
    salesLineEx_ds.queryBuildDataSource().enabled(ItemGroupIdCtrl.text() != '');
    super();
}

如果过滤器字段具有值,则将检查具有匹配字段的销售行是否存在。如果未输入任何值,则禁用过滤数据源。

最有可能的是,您希望在更改过滤器值后进行研究:

public boolean modified()
{
    boolean ret = super();
    salesTable_ds.executeQuery();
    return ret;
}

答案 1 :(得分:1)

我可能会误解你的问题,但如果你问如何过滤范围,这是一项非常基本的任务。

查看\Forms\PurchTable\Data Sources\PurchLine\Methods\init,了解它们如何排除"已删除"。

如果您想加入SalesLinesInventTable以获取商品分组,您可以在此处查看如何修改表单的查询:

\Forms\PurchTable\Data Sources\PurchTable\Methods\linkActive

答案 2 :(得分:0)

Disclimer :我现在没有AX2012。我已经发布了AX2009的截图。功能是相同的

先决条件:您应该有一个交叉引用来使用此功能。

Repro步骤:

  1. 打开表单
  2. 点击工具栏按钮Advanced Filter/SortCtrl+F3
  3. 鼠标右键单击Sales order树中的Structure表。
  4. 选择并点击1:n而不是Order Lines以在过滤器中添加其他表格(您应该有交叉引用)
  5. 鼠标右键单击Order line树中的Structure表。
  6. 选择并点击n:1Items (Item number)以在过滤器中添加其他表格(您应该有交叉引用)
  7. 点击Add按钮,在范围网格中选择talble Items和field Item groups。指定criteria = somethingfromFilter
  8. 请参阅下面的屏幕截图。

    注意:Axapta仅在查询中使用其他表。您需要在AOT中更改表单业务逻辑以在表单上显示其他表/字段。

    Add tables with Advanced filter

    Add criteria with added tables

答案 3 :(得分:0)

过滤代码:

  

我有一个自定义表单,有两个数据表。

     

表单包含Salestable和SalesLines数据源。

     

我想过滤

     

'所有SalesOrders'都有'saleslines的营业额.ItemGroup == somethingfromFilter''

先决条件:自定义表单使用两个已加入数据源。 Join type是以下之一:延迟,InnerJoin。

解决方案

需要在SalesLine数据源中修改方法Init。

this.query().datasource(tablenum(salesLine)).addDatasource(...)
...

使用init-method和addDatasource文本查看任何形式的示例)

Init-Methods with AddDatasource text