2012-10-23 24 views
2

我为我的公司创建了一个自定义应用程序,只要其中只有两个字段,只要添加了第三个字段,查询就可以正常工作,它不返回任何记录:当有两个以上AND子句时,多从句AND查询不起作用

仅供参考,我查询故事和缺陷:

var query = []; 
var queryCriteria = buildQueryFilter(STORIES); 
query[0] = { 
    key : STORIES, 
    type : "HierarchicalRequirement", 
    fetch : "FormattedID,Name,Owner,SubProject,CreationDate,Release,Iteration,ScheduleState,State,Build,Parent", 
    order : "FormattedID", 
    query : queryCriteria 
}; 

var queryCriteria = buildQueryFilter(DEFECTS); 
if (!(showUserStoriesOnly)){ 
    query[1] = { 
     key : DEFECTS, 
     type : "defects", 
     fetch : "FormattedID,Name,Owner,SubProject,CreationDate,Release,Iteration,ScheduleState,State,FixedInBuild,Requirement", 
     order : "FormattedID", 
     query : queryCriteria 
    }; 
} 

rallyDataSource.findAll(query, showResults); 

编辑:下面是一些buildQueryFilter “缩写为” 代码:

returnFilter += returnFilter.length === 0 ? '' : ' AND ' 
returnFilter += '(Iteration.Name = "' + filterIteration + '")'; 

returnFilter += returnFilter.length === 0 ? '' : ' AND ' 
returnFilter += '(ScheduleState = "' + filterScheduleState + '")'; 

returnFilter += returnFilter.length === 0 ? '' : ' AND ' 
returnFilter += '(Owner = \"__USER_NAME__\")'; 


returnFilter = '(' + returnFilter + ')';       

当 “queryCriteria” 是:

查询(故事):((Iteration.Name = “25(10/02 - 10/16)”)AND(ScheduleState = “接受”))

查询(缺陷):((Iteration.Name = “25(10/02 - 10/16)”)AND(ScheduleState = “接受”))

它的工作原理。但是,一旦我添加场 - 它什么并不重要领域,或什么样的顺序 - 那么它不工作了:

查询(故事):((Iteration.Name =“25(10 (缺省值):(Iteration.Name =“25(”))AND(ScheduleState =“Accepted”)AND(Owner =“[email protected]”))

查询(缺陷): 10/02 - 10/16)“)AND(ScheduleState =”Accepted“)AND(Owner =”[email protected]“))

我一直在查看文档,这应该是工作。我不确定它为什么不是。有人有线索吗?

谢谢!

回答

2

使用rally.sdk.util.Query实用程序应该可以帮助您构建有效的查询(在大型查询中,所有嵌套的()语法都会变得很难阅读)。

var queries = [ 
    'Iteration.Name = "' + filterIteration + '"', 
    'ScheduleState = "' + filterScheduleState + '", 
    'Owner = "__USER_NAME__"' 
]; 
var queryFilter = rally.sdk.util.Query.and(queries); 
var queryString = queryFilter.toString(); 

//queryString should be this: 
//(((Iteration.Name = "25 (10/02 - 10/16)") AND (ScheduleState = "Accepted")) AND (Owner = "[email protected]")) 
+0

嗨@kyle,其实buildQueryFilter方法非常简单,我只是从UI中获取值并构建一个字符串,它以我在原始帖子中呈现的方式返回。 –

+0

你错过了一些parens。在我的示例中查看queryFilter.toString()输出中的parens。您的查询应该如下所示:(((Iteration.Name =“25(10/02 - 10/16)”)AND(ScheduleState =“Accepted”))AND(Owner =“[email protected]”)) –

+0

是啊。我试着自己玩那些parens,但没有奏效。我会尝试查询对象,并会让你知道。谢谢! –