Axapta 过滤器字段不工作

Axapta 过滤器字段不工作,axapta,dynamics-ax-2009,Axapta,Dynamics Ax 2009,我创建了一个查找字段,用于过滤表单上的数据,但在我进行第一次选择后,它会过滤网格上的数据,然后该字段将变为不可编辑 我已经尝试了clearRanges,在修改方法的executeQuery调用之后,我已经完成了研究和刷新 我有2个QueryBuilder数据源: public void executeQuery() { QueryBuildDataSource qbds1 = this.query().dataSourceTable(tableNum(SalesLine));

我创建了一个查找字段,用于过滤表单上的数据,但在我进行第一次选择后,它会过滤网格上的数据,然后该字段将变为不可编辑

我已经尝试了clearRanges,在修改方法的executeQuery调用之后,我已经完成了研究和刷新

我有2个QueryBuilder数据源:

public void executeQuery() 
{ 
     QueryBuildDataSource qbds1 = this.query().dataSourceTable(tableNum(SalesLine)); 
     QueryBuildDataSource qbds2 = qbds1.addDataSource(tableNum(InventTable));  
     qbds2.fetchMode(JoinMode::InnerJoin); 
     qbds2.relations(TRUE); 
     qbds2.clearRange(fieldNum(InventTable, field1)); 
     if (field.valueStr())                     
         qbds2.addRange(fieldNum(InventTable,field1)).value(queryvalue(field.valueStr()))‌​;
     super();
}

它不起作用,为什么不起作用?

您的代码不起作用,因为每次表单调用
executeQuery时都添加了关系

要使其发挥作用,应如下所示:

public void init() 
{ 
     QueryBuildDataSource qbds2;
     super();
     qbds2 = this.query().dataSourceTable(tableNum(SalesLine)).addDataSource(tableNum(InventTable));  
     qbds2.fetchMode(JoinMode::ExistsJoin); 
     qbds2.relations(true); 
}

public void executeQuery() 
{ 
     QueryBuildDataSource qbds2 = qbds1.dataSourceTable(tableNum(InventTable));  
     SysQuery::findOrCreateRange(qbds2, fieldNum(InventTable,field1)).value(queryvalue(field.text()))‌​;
     qbds2.enabled(field.text() != '');
     super();
}
InventTable
关系只添加一次:在
SalesLine
init
方法中
此外,连接模式应该是
ExistsJoin
,因为您不需要
InventTable
中的任何字段


范围仅添加一次(使用
findOrCreateRange
),并且只有在字段控件具有数据时才启用
InventTable
exist联接。

是否有可供调试的示例代码?是否可以编辑答案并格式化?
public void executeQuery(){QueryBuildDataSource qbds1;QueryBuildDataSource qbds2;qbds1=this.query().dataSourceTable(tableNum(SalesLine));qbds2=qbds1.addDataSource(tableNum(InventTable));qbds2.fetchMode(JoinMode::InnerJoin);qbds2.relations(TRUE);qbds2.clearRange(fieldNum(InventTable,field1));if(field.valueStr()){qbds2.addRange(fieldNum(InventTable,field1)).value(queryvalue(field.valueStr());super()
查询很好,但我知道没有调用字符串编辑的修改方法,我也不明白为什么。此字符串编辑的查找方法也是正确的。查找字段是否链接到数据源的任何字段?表单中是否有启用/禁用控件、数据源或字段的代码?尝试删除尽可能多的func尽可能从表单中删除可选性、数据源和控件(或使用副本进行测试)。如果这没有给您任何提示,请尝试为您的表单构建一个.xpo,您可以将其链接到此处。