1

Rally で、"Feature" という単語を含むツリー内のアイテムをクエリしようとしました。(Parent.Parent.Parent.Parent.Parent.Name contains "Feature") などのクエリを、親名に「Feature」という単語が含まれているかどうかを確認してみました。私のアプローチはうまくいきません。これを行うより良い方法はありますか?ありがとう。

4

1 に答える 1

2

Charles が指摘しているように、単一の Rally Query で親階層をトラバースすることはできません。最終的には、(現在アルファ版の) ルックバック API と、この記事で説明されているのと同様のクエリを使用して、階層全体をプルし、ネーミングやその他の基準でフィルター処理することが可能になります。

Lookback API: 既知の親の下にあるすべてのリーフ ノード ストーリーを検索します

それまでは、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>

次のようなストーリー階層をトラバースします。

ストーリー階層

そして、ストーリー名に「Parent」を含むストーリーをフィルター処理し、次の出力を生成します。

アプリからのフィルタリングされたストーリー階層出力

サンプルはラフカットであり、あまりきれいではなく、単一のクエリほどエレガントでも簡単でもありませんが、ツリーをトラバースし、探している結果をフィルター処理する方法を示しています。

于 2012-06-26T19:19:08.677 に答える