2

会社用のカスタム アプリを作成しました。フィールドが 2 つしかない限り、クエリは正常に機能します。3 つ目のフィールドが追加されると、レコードは返されません。

参考までに、STORIES と DEFECTS をクエリしています。

    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 = "Accepted"))

クエリ (欠陥): ((Iteration.Name = "25 (10/02 - 10/16)") AND (ScheduleState = "Accepted"))

できます。しかし、 3 番目のフィールドを追加すると、フィールドや順序は関係ありませんが、機能しなくなります。

クエリ (ストーリー): ((Iteration.Name = "25 (10/02 - 10/16)") AND (ScheduleState = "Accepted") AND (Owner = "user@domain.com"))

クエリ (欠陥): ((Iteration.Name = "25 (10/02 - 10/16)") AND (ScheduleState = "Accepted") AND (Owner = "user@domain.com"))

私はドキュメントを調べてきましたが、これはうまくいくはずです。なぜそうではないのかわかりません。誰も手がかりを持っていますか?

ありがとう!

4

1 に答える 1

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 = "user@domain.com"))
于 2012-10-23T13:50:59.847 に答える