数据源查询回调问题(调用顺序,改变全局变量的能力)

Data source query callback problems (call order, ability to change global variables)

本文关键字:全局变量 改变 能力 顺序 回调 查询 问题 调用 数据源      更新时间:2023-09-26

我将代码简化为以下简短的示例。在其中,我想查询一组迭代,然后在回调中,循环遍历迭代并对资源求和。有一个全局变量,我想在其中存储总和…但我做不到

具体的问题是查询(和相关的回调)是在其他处理之后运行的。

<html><!-- COMMENT -->
    <meta name="Name"    content="YOUR APP NAME HERE" /> 
    <meta name="Version" content="0.1" /> 
    <meta name="Vendor"  content="YOUR COMPANY NAME HERE" /> 
<!-- Rally SDK --> <script type="text/javascript" src="/apps/1.25/sdk.js"></script>
<!-- App script -->  <script> 
var rallyDataSource; var resourceSum = -1; 
function ProcessIterations(results) {
    alert("In ProcessIterations");  
    var resourceSum = 0; 
    for (iIter = 0; iIter < results.iterations.length; iIter++) {
      var iteration = results.iterations[iIter] ;
      resourceSum += iteration.Resources; 
    }
    alert("In ProcessIterations, resourceSum="+resourceSum);   }
function queryError () {
    alert("A query error occurred");   }
function runMainQuery() {   var today = dojo.date.stamp.toISOString(new Date(), {milliseconds: true, zulu: true});
  var queryObject = {
    key: "iterations",
    type: "Iteration",
    fetch: "Name,ObjectID,Resources,Project",
    order: "EndDate asc",
    query: "(Project.ObjectID != '"__PROJECT_OID__'")"
    };
  rallyDataSource.findAll(queryObject, ProcessIterations, queryError); }

function Main() {   rallyDataSource = new rally.sdk.data.RallyDataSource("__WORKSPACE_OID__", "__PROJECT_OID__",
                "__PROJECT_SCOPING_UP__", "__PROJECT_SCOPING_DOWN__");
  runMainQuery() ;
  var tableConfig = {
      'columnKeys'   : ['planEst'],
      'columnHeaders': ['Plan Estimate']   };   var table = new rally.sdk.ui.Table(tableConfig);   table.setCell(0,0,resourceSum) ;   table.display("app_div");  
}
rally.addOnLoad(Main);
</script> <body>
    <div id="app_div"></div> 
    <div id="error_div"></div>  </body> </html>

要掌握异步回调的窍门可能有点棘手,但你真的很接近了。基本上,如果你只是把你的表的创建从Main移动到ProcessIterations回调中,你应该很好:

function ProcessIterations(results) {
    alert("In ProcessIterations");  
    var resourceSum = 0; 
    for (iIter = 0; iIter < results.iterations.length; iIter++) {
      var iteration = results.iterations[iIter] ;
      resourceSum += iteration.Resources; 
    }
    alert("In ProcessIterations, resourceSum="+resourceSum);   }
    var tableConfig = {
      'columnKeys'   : ['planEst'],
      'columnHeaders': ['Plan Estimate']   };   
      var table = new rally.sdk.ui.Table(tableConfig);   
      table.setCell(0,0,resourceSum) ;   
      table.display("app_div"); 
}
function Main() {   
    rallyDataSource = new rally.sdk.data.RallyDataSource("__WORKSPACE_OID__", "__PROJECT_OID__",
            "__PROJECT_SCOPING_UP__", "__PROJECT_SCOPING_DOWN__");
    runMainQuery() ;
}

这样,在从rallyDataSource获得数据之前不会显示表。

作为一个额外的资源,检查我们的帮助文档中使用RallyDataSource和异步回调的一些例子:http://developer.rallydev.com/help/rally-data-source