1

「コミットされた」イテレーションにあり、現在のプロジェクトまたは子プロジェクトに属しているすべてのユーザー ストーリーを表示するために、カスタムの段ボール マッシュアップを作成しました。これはうまく機能します。次に、所有者のドロップダウン ボックス (チーム メンバーのみに限定) を追加して、段ボールのストーリーをフィルター処理しました。結果のクエリ値は適切にフォーマットされているように見えますが、ストーリーは表示されません。アラートを使用してクエリ文字列をコピーし、それをカスタム グリッドに貼り付けたところ、予想される記事のリストが返されました。

以下は私のコードです。任意の支援をいただければ幸いです。

        var rallyDataSource;
        var cardboard;
        var ownerDropdown;

        function refreshCardboard() {

            var cardboardConfig = {
                types: ["Defect", "HierarchicalRequirement"],
                attribute: "ScheduleState",
                fetch: "Name,FormattedID,Owner,ObjectID"
            };

            var query = rally.sdk.util.Query.and(['Iteration.Name != ""', 'Iteration.State = "Committed"']);

            if (ownerDropdown) {
                var ownerQuery = ownerDropdown.getValue();
                if (ownerQuery != 'ALL') {
                    query = '(' + query + ' AND Owner.Name = "' + ownerQuery + '")';
                }
            }

            cardboardConfig.query = query;
            if (!cardboard) {
                cardboard = new rally.sdk.ui.CardBoard(cardboardConfig, rallyDataSource);
                cardboard.display("cardboardDiv");
            } else {
                cardboard.refresh(cardboardConfig);
            }
        }

        function buildOwnerDropdown() {

            var teamMembersQuery = {
                key: "teamMembers",
                type: "User",
                fetch: "UserName,DisplayName",
                query: '(TeamMemberships = /project/__PROJECT_OID__)'
            };

            rallyDataSource.findAll(teamMembersQuery, function (results) {

                var ownerItems = [{ label: "-- ALL --", value: "ALL"}];
                rally.forEach(results.teamMembers, function (teamMember) {
                    ownerItems.push({ label: teamMember.DisplayName, value: teamMember.UserName });
                });

                ownerItems.sort();

                var ownerDropdownConfig = {
                    showLabel: true,
                    label: "Owner:",
                    items: ownerItems
                };

                ownerDropdown = new rally.sdk.ui.basic.Dropdown(ownerDropdownConfig);
                ownerDropdown.display("ownerDropdownDiv");
            });
        }

        function onLoad() {

            rallyDataSource = new rally.sdk.data.RallyDataSource(
                '__WORKSPACE_OID__',
                '__PROJECT_OID__',
                '__PROJECT_SCOPING_UP__',
                '__PROJECT_SCOPING_DOWN__');

            buildOwnerDropdown();

            refreshCardboard();
        }

        rally.addOnLoad(onLoad);

    </script>

</head>
<body>
    <div id="ownerDropdownDiv"></div>
    <input id="refreshButton" type="button" value="Filter" onclick="refreshCardboard()"/>
    <div id="cardboardDiv"></div>
</body>
4

1 に答える 1

0

あなたは本当に目標に近づいています - 問題はここにあります:

        var query = rally.sdk.util.Query.and(['Iteration.Name != ""', 'Iteration.State = "Committed"']);

        if (ownerDropdown) {
            var ownerQuery = ownerDropdown.getValue();
            if (ownerQuery != 'ALL') {
                query = '(' + query + ' AND Owner.Name = "' + ownerQuery + '")';
            }
        }

Rally のクエリ構文では、別の AND 条件を追加するときに、ネストされた別の括弧のセットが必要です。したがって、3 番目の条件で連結すると、次のようなクエリ句になります。

((Iteration.Name != "") AND (Iteration.State = "Committed")) AND (Owner.Name = "user@company.com")

次のようにする必要がある場合:

(((Iteration.Name != "") AND (Iteration.State = "Committed")) AND (Owner.Name = "user@company.com"))

次のように、refreshCardboard() 関数のクエリ ロジックを少し変更しましたが、コードが機能するようになりました。

    ....        
    var queryArray = new Array('Iteration.Name != ""', 'Iteration.State = "Committed"');                                       
    var query;

    var selectedOwner = ownerDropdown.getValue();

    if (ownerDropdown) {
       if (selectedOwner != 'ALL') {
          var ownerClause = 'Owner.Name = "' + selectedOwner + '"';
          queryArray.push(ownerClause);
       }
    }

    query = rally.sdk.util.Query.and(queryArray);

    cardboardConfig.query = query;
    ....
于 2013-02-06T00:48:03.087 に答える