2014-10-03 75 views
1

我有下面的代碼可以工作。它按狀態和嚴重性總結了缺陷。我有一個下拉按照Release進行過濾。這一切工作,但我需要有一個自定義字段的下拉菜單。如果我更新代碼並用c_ReleaseFound替換Release,它不起作用。我也嘗試用「rally.sdk.ui.ObjectDropdown」更新「rally.sdk.ui.ReleaseDropdown」。我如何修改此代碼以使用自定義過濾器?謝謝你的幫助。矩陣的自定義字段的拉力過濾器下拉列表

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<!-- Copyright (c) 2012 Rally Software Development Corp. All rights reserved --> 
<html> 
<head> 
    <title>DefectSummaryMatrix</title> 
    <meta name="Name" content="App: DefectSummaryMatrix" /> 
    <meta name="Version" content="2012.11.21" /> 
    <meta name="Vendor" content="Rally Software" /> 

    <script type ="text/javascript" src="/apps/1.32/sdk.js"></script> 
    <script type ="text/javascript"> 
    function DefectSummaryMatrix() { 
    var defectData; 
    var table; 
    var total = "Total"; 
    var rallyDataSource = new rally.sdk.data.RallyDataSource('14433308115', 
    '14451834527', 
    'false', 
    'true'); 
    var header = rally.sdk.ui.AppHeader; 
    header.showPageTools(true); 
    header.removePageTool("print"); 
    header.addPageTool({ 
    key:"Previous Version", 
    label:"Previous Version", 
    onClick: function() { 
    if (parent && parent.window && parent.window.location) { 
    parent.window.location = "http://agilecommons.org/posts/4d4d00c953"; 
    } 
    else { 
    window.location = "http://agilecommons.org/posts/4d4d00c953"; 
    } 
    } 
    }); 

    function initialize3DArray(rows, cols) { 
      defectData = [cols]; 
      for (var c = 0; c <= cols; c++) { 
       defectData[c] = []; 
       for (var r = 0; r <= rows; r++) { 
        defectData[c][r] = []; 
       } 
      } 
     } 

     function addDefect(column, row, defect) { 
      defectData[column][row].push(defect); 
     } 

     function setOwner(defect) { 
      if (defect.Owner !== null) { 
       if (defect.Owner.DisplayName !== "") { 
        defect.Owner = defect.Owner.DisplayName; 
       } else { 
        defect.Owner = defect.Owner.LoginName; 
       } 
      } else { 
       defect.Owner = ""; 
      } 
     } 

     function findIndex(value, listOfValues) { 
      for (var i = 0; i < listOfValues.length; i++) { 
       if (listOfValues[i] == value) { 
        return i; 
       } 
      } 
      return 0; 
      /* Returning 0 to accommodate having null values in the Severity field even though the object has "None" in WSAPI */ 
     } 

    // return 3D array by Severity, state and list of defects 
     function countBySeverityAndState(defectResults) { 
      var maxRow = defectResults.defectPriorities.length; 
      var maxCol = defectResults.defectStates.length; 

      initialize3DArray(maxRow, maxCol); 

      // cycle through defects and increment the appropriate state/Severity combo in the array 
      var row, column; 

      for (var i = 0; i < defectResults.defects.length; i++) { 
       column = findIndex(defectResults.defects[i].State, defectResults.defectStates); 
       row = findIndex(defectResults.defects[i].Severity, defectResults.defectPriorities); 
       var defect = defectResults.defects[i]; 
       addDefect(column, row, defect); 
       addDefect(column, maxRow, defect); 
       addDefect(maxCol, row, defect); 
       addDefect(maxCol, maxRow, defect); 
       setOwner(defect); 
      } 
     } 

     var defectQuery = function() { 
      var selected = releaseDropdown.getSelectedName(); 
      var releaseQuery = '(Release.Name = "' + selected + '")'; 
      var queryObject = []; 
      queryObject[0] = { key: 'defectStates', type: 'Defect', attribute: 'State' }; 
      queryObject[1] = { key: 'defectPriorities', type: 'Defect', attribute: 'Severity' }; 
      queryObject[2] = { 
       key: 'defects', 
       type: 'Defect', 
       query: releaseQuery, 
       fetch: 'FormattedID,Name,Environment,State,Severity,ScheduleState,ObjectID,Description,owner,DisplayName,LoginName' 
      }; 
      rallyDataSource.findAll(queryObject, populateTable); 
     }; 

     var destroyDefectList = function() { 
      if (defectList) { 
       defectList.destroy(); 
       defectList = null; 
       var displayHeader = dojo.byId('displayHeader'); 

       if(displayHeader) { 
        displayHeader.innerHTML = ''; 
       } 
      } 
     }; 

     var populateTable = function (results) { 
      var tableDiv = document.getElementById('defects'); 
      var states = []; 
      states[0] = "&nbsp"; 
      for (var i = 0; i < results.defectStates.length; i++) { 
       states[i + 1] = results.defectStates[i]; 
      } 
      states[results.defectStates.length + 1] = total; 

      var config = { 'columnKeys': states, 'sortingEnabled' : false }; 

      if (table) { 
       table.destroy(); 
      } 
      table = new rally.sdk.ui.Table(config); 

      var priorities = []; 
      for (var j = 0; j < results.defectPriorities.length; j++) { 
       priorities[j] = results.defectPriorities[j]; 
       table.setCell(j, 0, priorities[j]); 
      } 
      table.setCell(results.defectPriorities.length, 0, total); 

      countBySeverityAndState(results); 

      var onTableClick = function(obj, args) { 
       var col = args.columnIndex - 1; 
       if (col < 0) { 
        return; 
       } 
       var row = args.rowIndex; 
       var displayHeaderDiv = dojo.byId('displayHeader'); 
       var columnText = args.columnHeader + " "; 
       var rowText = obj.getCell(row, 0) + " "; 
       var preface = ""; 
       var postface = ""; 
       if (columnText === total + " ") { 
        columnText = ""; 
        preface = "All "; 
       } 
       if (rowText === " ") { 
        rowText = ""; 
        postface = " Without a Severity"; 
       } 
       if (rowText === total + " ") { 
        // rowText = ""; 
        preface = "All "; 
       } 

       destroyDefectList(); 

       displayHeaderDiv.innerHTML = preface + columnText + rowText + "Defects " + postface; 

       var displayDiv = dojo.byId('display'); 
       var defectConfig = { 
        'columnKeys': ['FormattedID','Name','Environment','State','Severity', 'Owner'] 
       }; 

       defectList = new rally.sdk.ui.Table(defectConfig); 
       defectList.addRows(defectData[col][row]); 
       for (var i = 0; i < defectData[col][row].length; i++) { 
        var target = rally.sdk.util.Ref.createRallyDetailUrl(defectData[col][row][i]._ref); 
        defectList.setCell(i, 0, "<a href=" + target + " target=_blank>" + defectData[col][row][i].FormattedID + "</a>"); 
       } 

       defectList.display(displayDiv); 
      }; 

      table.addEventListener("onCellClick", onTableClick); 
      // make formattedID link to work products 
      for (var col = 0; col < defectData.length; col++) { 
       for (var row = 0; row < defectData[col].length; row++) { 
        table.setCell(row, col + 1, "<a href='#' onclick='return false;'>" + defectData[col][row].length + "</a>"); 
       } 
      } 
      table.display(tableDiv); 
     }; 

     var releaseDiv = dojo.byId('release'); 
     var releaseDropdown = new rally.sdk.ui.ReleaseDropdown({}, rallyDataSource); 
     var defectList = null; 
     var releaseDropdownWrapper = function(obj, args) { 
      destroyDefectList(); 
      defectQuery(obj, args); 
     }; 
     releaseDropdown.display(releaseDiv, releaseDropdownWrapper); 
    } 

    </script> 

    <style type="text/css"> 
     #release { 
    margin-bottom: 15px; 
    } 

    #displayHeader { 
    font-weight: bold; 
    width: 100%; 
    text-align: center; 
    } 
    </style> 

    <script type="text/javascript"> 
    function onLoad() { 
     var appCustom = new DefectSummaryMatrix(); 
    } 

    rally.addOnLoad(onLoad); 
    </script> 
</head> 

<body> 
    <div id="release"></div> 
    <div id="defects"></div> 
    <br/> 
    <br/> 

    <div id="displayHeader"></div> 
    <div id="display"></div> 
</body> 
</html> 

回答

0

這是傳統AppSDK1的代碼。最新版本的AppSDK1對應WS API 1.32,不再支持每this schedule。請參閱「我可以使用多長時間1.43」post

自定義字段名稱中的c_前綴只能在WS API的最新v2.0中有效。 c_ReleaseFound將無法​​使用此應用程序。檢查以前版本的API如何在對象模型中引用此字段。

此外,對於自定義字段,請嘗試使用AttributeDropdown而不是爲此重新使用ReleaseDropdown