通过链接数据源过滤表单的主数据源
Filter form's main datasource through the linked datasource
我有一个包含两个数据源的自定义表单。让我们说我的表单具有 Salestable 和 SalesLines 数据源更容易。
例如,我可以说我有一个与 ItemGroup edt 绑定的过滤器。
我想通过此过滤器过滤 SalesTable 数据源,以便 'show' 在与 SalesOrders 数据源连接的网格中:
'''have' 销售线的所有销售订单 saleslines.ItemGroup == somethingfromFilter''。
无论我尝试什么都失败了。有人可以帮助我吗?
仅供参考:我认为正确链接的数据源属性:
SalesLine.JoinSource = 销售表
我所有的尝试都是在过滤器的修改方法中进行的。
Disclimer: 我现在没有AX2012。我已经发布了 AX2009 的屏幕截图。功能相同
先决条件:您应该有交叉引用才能使用此功能。
重现步骤:
- 打开表格
- 单击工具栏按钮
Advanced Filter/Sort
或 Ctrl+F3
- 鼠标右键单击
Structure
树中的 Sales order
table。
- 选择并单击
1:n
,然后 Order Lines
在过滤器中添加额外的 table(您应该有交叉引用)
- 鼠标右键单击
Order line
table 在 Structure
树中。
- 选择并单击
n:1
和 Items (Item number)
以在过滤器中添加其他 table(您应该有交叉引用)
- 单击
Add
按钮并在范围网格中选择表格 Items
和字段 Item groups
。指定一个 criteria
= somethingfromFilter
请参阅下面的屏幕截图。
注意:Axapta 仅在查询中使用额外的 table。您需要更改 AOT 中的表单业务逻辑以在表单上显示额外的 tables/fields。
我可能误解了你的问题,但如果你问的是如何使用范围进行过滤,这是一项非常基本的任务。
查看 \Forms\PurchTable\Data Sources\PurchLine\Methods\init
以了解它们如何排除 "Deleted".
的行
如果您想加入 SalesLines
到 InventTable
以获得项目组,您可以在此处的另一个示例中查看如何修改表单的查询:
\Forms\PurchTable\Data Sources\PurchTable\Methods\linkActive
过滤代码:
I have a custom form which has two datasouces.
form has the Salestable and SalesLines datasources.
I want to filter
'all SalesOrders which 'have' saleslines with saleslines.ItemGroup == somethingfromFilter''
先决条件:自定义表单使用两个 joined 数据源。 Join type
是以下之一:Delayed、InnerJoin。
解决方案
需要修改SalesLine数据源中的Init方法
this.query().datasource(tablenum(salesLine)).addDatasource(...)
...
查看带有 init-method 和 addDatasource 文本的任何形式的示例)
我假设您在 SalesLine
table 中有一个 ItemGroupId
字段。
这不标准。
此外,我假设您有一个名为 ItemGroupIdCtrl
.
的过滤字段
添加辅助数据源SalesLineEx
:
- 姓名:SalesLineEx
- Table:销售专线
- 允许...:否
- 加入来源:销售Table
- 链接类型:存在加入
在 SalesTable
数据源中 executeQuery
模式:
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;
}
我有一个包含两个数据源的自定义表单。让我们说我的表单具有 Salestable 和 SalesLines 数据源更容易。
例如,我可以说我有一个与 ItemGroup edt 绑定的过滤器。
我想通过此过滤器过滤 SalesTable 数据源,以便 'show' 在与 SalesOrders 数据源连接的网格中:
'''have' 销售线的所有销售订单 saleslines.ItemGroup == somethingfromFilter''。
无论我尝试什么都失败了。有人可以帮助我吗?
仅供参考:我认为正确链接的数据源属性: SalesLine.JoinSource = 销售表 我所有的尝试都是在过滤器的修改方法中进行的。
Disclimer: 我现在没有AX2012。我已经发布了 AX2009 的屏幕截图。功能相同
先决条件:您应该有交叉引用才能使用此功能。
重现步骤:
- 打开表格
- 单击工具栏按钮
Advanced Filter/Sort
或Ctrl+F3
- 鼠标右键单击
Structure
树中的Sales order
table。 - 选择并单击
1:n
,然后Order Lines
在过滤器中添加额外的 table(您应该有交叉引用) - 鼠标右键单击
Order line
table 在Structure
树中。 - 选择并单击
n:1
和Items (Item number)
以在过滤器中添加其他 table(您应该有交叉引用) - 单击
Add
按钮并在范围网格中选择表格Items
和字段Item groups
。指定一个criteria
=somethingfromFilter
请参阅下面的屏幕截图。
注意:Axapta 仅在查询中使用额外的 table。您需要更改 AOT 中的表单业务逻辑以在表单上显示额外的 tables/fields。
我可能误解了你的问题,但如果你问的是如何使用范围进行过滤,这是一项非常基本的任务。
查看 \Forms\PurchTable\Data Sources\PurchLine\Methods\init
以了解它们如何排除 "Deleted".
如果您想加入 SalesLines
到 InventTable
以获得项目组,您可以在此处的另一个示例中查看如何修改表单的查询:
\Forms\PurchTable\Data Sources\PurchTable\Methods\linkActive
过滤代码:
I have a custom form which has two datasouces.
form has the Salestable and SalesLines datasources.
I want to filter
'all SalesOrders which 'have' saleslines with saleslines.ItemGroup == somethingfromFilter''
先决条件:自定义表单使用两个 joined 数据源。 Join type
是以下之一:Delayed、InnerJoin。
解决方案
需要修改SalesLine数据源中的Init方法
this.query().datasource(tablenum(salesLine)).addDatasource(...)
...
查看带有 init-method 和 addDatasource 文本的任何形式的示例)
我假设您在 SalesLine
table 中有一个 ItemGroupId
字段。
这不标准。
此外,我假设您有一个名为 ItemGroupIdCtrl
.
添加辅助数据源SalesLineEx
:
- 姓名:SalesLineEx
- Table:销售专线
- 允许...:否
- 加入来源:销售Table
- 链接类型:存在加入
在 SalesTable
数据源中 executeQuery
模式:
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;
}