1

繰り返しに応じて、ユーザー名、表示名、役割、容量などの情報を取得しようとしています。クエリは、指定されたプロジェクトの結果の一部を返しますが、選択した反復のすべてではありません。何が原因なのかわかりません。これまでの私の作品は以下で見つけることができます。

function iterationSelected(dropdown, eventArgs) {

     console.log("Iteration Selected Callback");
     if(table != null){
        table.destroy();
     }


    var queryByUser = {
        key: "teamDataByUser", type: "User", 
        fetch: 'DisplayName,UserName',
        query: '(ObjectID > 0)'
    };
    rallyDataSource.findAll(queryByUser, queryTeamInformation);


}

function queryTeamInformation(results){
    console.log(results.teamDataByUser.length);
    for(var i=0;i<results.teamDataByUser.length;i++){
        console.log(results.teamDataByUser[i].UserName + " " + results.teamDataByUser[i].DisplayName);
    }


    console.log(iterationDropdown.getSelectedName());
    var queryByUserName = {
        key: "teamData", type: "UserIterationCapacity", 
        project: null,
        fetch: "Capacity,User,Role,EmailAddress,DisplayName,UserName",
        query: '((Iteration.Name = ' + '"' + iterationDropdown.getSelectedName() + '") AND (Project = /project/5564891653))'
    };
    rallyDataSource.findAll(queryByUserName, processResults);
    console.log("GH");

}

function processResults(results){
    rally.forEach(results.teamData, 
    function(teamData) {
        console.log(teamData._ref);

    });
    console.log(results.teamData.length);


        var tableDiv = document.getElementById('table');
        var config = { columns: 
             [{key: 'emailaddress', header: 'Team Member Email', width: 200}, 
             {key: 'displayname', header: 'Display name'},
             {key: 'username', header: 'User name'},
             {key: 'role', header: 'Role'},
             {key: 'cap', header: 'Capacity'}] };

        if(table != null){
            console.log("Got here");
            table.destroy();
        }
        table = new rally.sdk.ui.Table(config);
        for(var i=0;i<results.teamData.length;i++){

            var rowInfo = {'emailaddress': results.teamData[i].User.DisplayName, 'displayname': results.teamData[i].User.UserName, 'username': results.teamData[i].User.EmailAddress, 'role' : results.teamData[i].User.Role, 'cap' : results.teamData[i].Capacity}; 
            table.addRow(rowInfo);
        }



        table.display(tableDiv);


}



//========================================================================================================================
/*
 * Initializes all the page elements
 */
function initPage() {

    rallyDataSource = new rally.sdk.data.RallyDataSource('5410787910', '5948174836', 'false', 'true'); 

    var config = { label : "Select an iteration " };
    iterationDropdown = new rally.sdk.ui.IterationDropdown(config, rallyDataSource);
    iterationDropdown.display("aDiv", iterationSelected);
}
 rally.addOnLoad(initPage);
4

1 に答える 1

1

わかりました-私はあなたが行きたい場所にたどり着くために何が必要かを説明すると思う例を書きました。これは、queryConfig配列で2つのクエリを実行することによって行われます。1つはユーザー用で、もう1つは対象の反復用のUserIterationCapacity用です。次に、processResults関数で、コードは3つのハッシュを作成します。

  • teamMembersByTeamName:各プロジェクトのチームメンバーの文字列、ハッシュキー:チーム/プロジェクト名
  • myTeamList:対象のチームに選択されたユーザー(1番目)クエリからのユーザーデータが含まれています。ハッシュキー:UserName
  • userIterationCapacityByUser:2番目のクエリからのUserIterationCapacityデータが含まれています、ハッシュキー:UserName

最後に、コードはUserNameによる横断歩道を実行して、対象のスプリントに容量が定義されていない場合でも、すべてのTeamMemberの容量データを再構築します。この場合、容量は「N/A」と表示されます。

これをご使用の環境で機能させるには、、、および変数workspaceOIDprojectOIDカスタマイズする必要があります。myTeamSlashProjectNameおそらく、カスタマイズして微調整することをお勧めします。これは単なる大まかなコードサンプルです。しかし、うまくいけば、概念を説明するのに十分です。

    <!-- Copyright (c) 2012 Rally Software Development Corp. All rights reserved -->
    <html>
    <head>
       <title>Team Capacity Summary Example</title>
       <meta name="Name" content="App Example: Team Capacity Summary" />
       <meta name="Version" content="1.31" />
       <meta name="Vendor" content="Rally Labs" />

       <script type="text/javascript" src="https://rally1.rallydev.com/apps/1.31/sdk.js"></script>
       <script type="text/javascript">

       var rallyDataSource = null;
       var iterationDropdown = null;
       var selectedIteration = "Iteration 1";
       var workspaceOID = "12345678910";
       var projectOID = "12345678911";
       var myTeamSlashProjectName = "My Project";
       var table;

        function iterationSelected(dropdown, eventArgs) {
              var selectedItem = eventArgs.item;
              selectedIteration = eventArgs.value;
              runMainQuery();
        }

        function runMainQuery() {

            var queryConfig = [];

            var capacityQueryString = '((Iteration.Name = ' + '"' + 
                    selectedIteration + 
                    '") AND (Project.ObjectID = "' + 
                    projectOID +
                     '"))';
            console.log(capacityQueryString);

            queryConfig[0] = {
                key: "usercapacities", 
                type: "UserIterationCapacity", 
                fetch: "Capacity,User,Role,EmailAddress,DisplayName,UserName",
                query: capacityQueryString
            };

            queryConfig[1] = {
                type: "users",
                key:  "userdata",
                fetch: "UserName,EmailAddress,DisplayName,UserName,UserPermissions,Project,Role,Name,TeamMemberships,Project,Name"
            };          

            rallyDataSource.findAll(queryConfig, processResults);

        }

        function processResults(results) {      

            // Populate a hash of team members by team name 
            var teamMembersByTeamName= new Array();

            for (i=0;i<results.userdata.length;i++){
                myUser = results.userdata[i];
                myUserName = myUser.UserName;
                myEmailAddress = myUser.EmailAddress;
                myDisplayName = myUser.DisplayName;
                myRole = "N/A";

                if (myUser.TeamMemberships) {

                    myTeamMemberships = myUser.TeamMemberships;

                    for (j=0;j<myTeamMemberships.length;j++) {
                        thisTeam = myTeamMemberships[j];
                        thisTeamName = thisTeam.Name;

                        if (!(thisTeamName in teamMembersByTeamName)) {
                            teamMembersByTeamName[thisTeamName] = [];
                        }

                        var dataToPush = new Array();
                        dataToPush["UserName"] = myUserName;
                        dataToPush["EmailAddress"] = myEmailAddress;
                        dataToPush["DisplayName"] = myDisplayName;
                        dataToPush["Role"] = myRole;
                        dataToPush["Capacity"] = "N/A";

                        teamMembersByTeamName[thisTeamName].push(dataToPush);
                    }
                }
            }

            // Now populate a hash of User Capacities

            var userIterationCapacityByUser = new Array();

            for (i=0;i<results.usercapacities.length;i++) {
                thisCapacityObject = results.usercapacities[i];
                thisUserName = thisCapacityObject.User.UserName;
                if (!(thisUserName in userIterationCapacityByUser)) {

                    thisUser = thisCapacityObject.User;
                    thisCapacity = thisCapacityObject.Capacity;

                    userIterationCapacityByUser[thisUserName] = [];

                    var dataToPush = new Array();
                    dataToPush["UserName"] = thisUser.UserName;
                    dataToPush["EmailAddress"] = thisUser.EmailAddress;
                    dataToPush["DisplayName"] = thisUser.DisplayName;
                    dataToPush["Role"] = thisUser.Role;
                    dataToPush["Capacity"] = thisCapacity;

                    userIterationCapacityByUser[thisUserName].push(dataToPush);             
                }
            }

            // Setup and configure the table
            var tableDiv = document.getElementById('tableDiv');
            var tableConfig = { columns: 
                 [{key: 'emailaddress', header: 'Team Member Email', width: 200}, 
                 {key: 'displayname', header: 'Display name'},
                 {key: 'username', header: 'User name'},
                 {key: 'role', header: 'Role'},
                 {key: 'cap', header: 'Capacity'}] };

            if(table != null){
                table.destroy();
            }

            table = new rally.sdk.ui.Table(tableConfig);        

            // Finally cross-walk team membership by correlating the data from the two hashes
            // Grab team list of interest
            myTeamList = teamMembersByTeamName[myTeamSlashProjectName];

            for(i=0;i<myTeamList.length;i++) {

                myTeamMemberData = myTeamList[i];
                myUserNameFromTeamList = myTeamMemberData["UserName"];

                // User has capacity information - populate data from that result set
                if (myUserNameFromTeamList in userIterationCapacityByUser) {                
                    myUserDataArray = userIterationCapacityByUser[myUserNameFromTeamList];
                    myUserData = myUserDataArray[0];            
                } // User doesn't have capacity information - populate data from user query
                else {
                    myUserData = myTeamMemberData;
                }

                var myUserName = myUserData["UserName"];
                var myEmailAddress = myUserData["EmailAddress"];
                var myDisplayName = myUserData["DisplayName"];
                var myRole = myUserData["Role"];
                var myCapacity = myUserData["Capacity"];

                if (myDisplayName) { 
                    thisDisplayName = myDisplayName;
                } else {
                    thisDisplayName = "N/A";
                }

                var rowInfo = {
                    'emailaddress': myEmailAddress, 
                    'displayname': thisDisplayName, 
                    'username': myUserName,
                    'role' : myRole, 
                    'cap' : myCapacity};
                table.addRow(rowInfo);
            }

            var tableDiv = document.getElementById("tableDiv");     
            table.display(tableDiv);
        }


        function onLoad() {
          rallyDataSource = new rally.sdk.data.RallyDataSource('__WORKSPACE_OID__',
                                                       '__PROJECT_OID__',
                                                       '__PROJECT_SCOPING_UP__',
                                                       '__PROJECT_SCOPING_DOWN__');
          var config = {
                label : "Select an iteration ",
                defaultDisplayValue: selectedIteration
          };
          var iterationDropdown = new rally.sdk.ui.IterationDropdown(config, rallyDataSource);
          iterationDropdown.display("aDiv", iterationSelected);
        }

           rally.addOnLoad(onLoad);

        </script>
    </head>
      <body>
        <div id="aDiv"></div>
        <div id="tableDiv"></div>
    </body>
    </html> 
于 2012-07-14T01:08:43.290 に答える