Rally:如何查找包含特定关键字的父级?

时间:2012-06-22 14:31:16

标签: javascript rally

在Rally中,我试图查询树中包含“功能”一词的项目。我尝试通过检查是否有任何父名称中包含“功能”一词来查询(Parent.Parent.Parent.Parent.Parent.Name包含“功能”)等。我的方法不起作用。有一个更好的方法吗?感谢。

1 个答案:

答案 0 :(得分:2)

正如Charles所说,无法通过单个Rally Query遍历父层次结构。最终,可以使用(当前alpha)Lookback API和类似于本文所述的查询来提取整个层次结构并过滤命名和其他条件:

Lookback API: Find all leaf node stories under a known parent

在此之前,您可以使用AppSDK遍历父项的层次结构,并对rallyDataSource的find()方法进行递归调用。我已经包含了一个简单的方法:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
   <meta name="Name" content="App Example: Parent Name Contains Story Hierarchy"/>
   <title>Parent Name Contains Story Hierarchy</title>
   <script type="text/javascript" src="/apps/1.27/sdk.js"></script>
   <script>

     var rallyDataSource;

     function parentNameRecursionExample() {
       var parentStoryHierarchy = function(results) {

         var storyInfo = "";
         var story = "";
         var parentFormattedID = "";
         for (i=0 ; i < results.stories.length ; i++) {
           story = results.stories[i];
           if (story.Parent != null) {
               parentName = story.Parent.Name;

               var testContains = "Parent";
               if (parentName.indexOf(testContains) != -1) {

                   storyInfo += story.FormattedID +
                           ', ' + story.Name +
                           ', Parent:' + story.Parent.FormattedID +
                           ': ' + story.Parent.Name + '<br>';
                   aDiv.innerHTML += storyInfo;
               }

               parentFormattedID = story.Parent.FormattedID;

               var queryConfig = {
                 type : 'HierarchicalRequirement',
                 key : 'stories',
                 fetch: 'FormattedID,Name,Parent',
                 query: '(FormattedID = \"' + parentFormattedID + '\")'
               };

               rallyDataSource.findAll(queryConfig, parentStoryHierarchy);
           } else {
               storyInfo += story.FormattedID +
                   ', ' + story.Name +
                   ', Parent: No Parent';
               aDiv.innerHTML += storyInfo;

           }
         }
       };

       var queryConfig = { 
          type : 'HierarchicalRequirement',
          key : 'stories',
          fetch: 'FormattedID,Name,Parent',//,
          query: '(FormattedID = \"US130\")'
       };

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

     rally.addOnLoad(parentNameRecursionExample);
  </script>
</head>
<body>
  <div id="aDiv"></div>
</body>
</html>

它遍历一个如下所示的故事层次结构:

Story Hierarchy

并过滤故事名称中包含“父”的故事,产生以下输出:

Filtered Story Hierarchy output from App

理解样本是粗略的并且不是很漂亮,不像单个查询那样优雅或简单,但它说明了如何遍历树并过滤您正在寻找的结果。