2012-04-03 8 views
1

Ich mag würde damit beginnen, sagen, dass ich Rally Kanban - hiding Epic Stories gelesen habe, aber ich bin immer noch Probleme, meinen Filter auf der Implementierung basierend auf dem Filterprozess vom Estimation Vorstand App. Zur Zeit versuche ich einen Objektfilter zu meinem Abfrageobjekt für meinen Karton hinzuzufügen. Das Abfrageobjekt ruft this._getItems auf, um ein Array von Elementen zurückzugeben, aus denen gefiltert werden soll. So weit ich sagen kann, ruft die Abfrage die Funktion auf, lädt für eine Sekunde oder zwei und zeigt dann keine Ergebnisse an. Irgendwelche Eingaben, Vorschläge oder alternative Lösungen sind willkommen.Filtering Epen von Kanban Board

Hier ist mein Code

$that._redisplayBoard = function() { 


      that._getAndStorePrefData(displayBoard); 

      this._getItems = function(callback) { 

      //Build types based on checkbox selections 
      var queries = []; 

        queries.push({key:"HierarchicalRequirement", 
         type: "HierarchicalRequirement", 
         fetch: "Name,FormattedID,Owner,ObjectID,Rank,PlanEstimate,Children,Ready,Blocked", 
         order: "Rank" 

        }); 



      function bucketItems(results) { 
       var items = []; 

       rally.forEach(queries, function(query) { 
        if (results[query.key]) { 
         rally.forEach(results[query.key], function(item) { 
          //exclude epic stories since estimates cannot be altered 
          if ((item._type !== 'HierarchicalRequirement') || 
            (item._type === 'HierarchicalRequirement' && item.Children.length === 0)) { 
           items = items.concat(item); 

          } 
         }); 
     } 
       }); 


       callback(items); 
       } 

       rallyDataSource.findAll(queries, bucketItems); 

      }; 

      function displayBoard() { 

       artifactTypes = []; 



       var cardboardConfig = { 

        types: [], 

        items: that._getItems, 

        attribute: kanbanField, 

        sortAscending: true, 

        maxCardsPerColumn: 200, 

        order: "Rank", 

        cardRenderer: KanbanCardRenderer, 

        cardOptions: { 

         showTaskCompletion: showTaskCompletion, 

         showAgeAfter: showAgeAfter 

        }, 

        columnRenderer: KanbanColumnRenderer, 

        columns: columns, 

        fetch: "Name,FormattedID,Owner,ObjectID,Rank,Ready,Blocked,LastUpdateDate,Tags,State,Priority,StoryType,Children" 

       }; 



       if (showTaskCompletion) { 

        cardboardConfig.fetch += ",Tasks"; 

       } 



       if (hideLastColumnIfReleased) { 

        cardboardConfig.query = new rally.sdk.util.Query("Release = null").or(kanbanField + " != " + '"' + lastState + '"'); 

       } 



       if (filterByTagsDropdown && filterByTagsDropdown.getDisplayedValue()) { 

        cardboardConfig.cardOptions.filterBy = { field: FILTER_FIELD, value: filterByTagsDropdown.getDisplayedValue() }; 

       } 



       cardboardConfig.types.push("HierarchicalRequirement"); 



       if (cardboard) { 

        cardboard.destroy(); 

       } 



       artifactTypes = cardboardConfig.types; 






       cardboard = new rally.sdk.ui.CardBoard(cardboardConfig, rallyDataSource); 




       cardboard.addEventListener("preUpdate", that._onBeforeItemUpdated); 
       cardboard.addEventListener("onDataRetrieved", function(cardboard,args){ console.log(args.items); }); 

       cardboard.display("kanbanBoard"); 

      } 

     }; 


     that.display = function(element) { 



      //Build app layout 

      this._createLayout(element); 



      //Redisplay the board 

      this._redisplayBoard(); 

     }; 

    }; 

Antwort

0

Mark Antwort verursacht eine obskure Absturz beim cardboard.setItems (filteredItems) genannt wurde. Da der Filtercode jedoch tatsächlich die tatsächlichen Referenzen manipuliert, stellt sich heraus, dass die Methode setItems() tatsächlich nicht benötigt wird. Ich habe es rausgezogen und es filtert nun richtig.

+0

Guter Fang! Ich habe meine Antwort bearbeitet, um deine Feststellung widerzuspiegeln. –

+0

Ich bin mir nicht sicher, ob es die richtige Stack-Überlauf-Etikette ist auch dies als eine Antwort zu markieren, aber ich habe nicht genug rep noch upvote so los gehts. – user1145893

0

nicht sicher, das ist Ihr Problem, aber Ihr Karton Config stellt nicht die ‚query‘ Feld. Der Abruf ist der Typ aller Daten, die abgerufen werden sollen, wenn Sie ihn filtern möchten. Fügen Sie dem Konfigurationsobjekt einen "query:" - Wert hinzu. Etwas wie:

 var cardboardConfig = { 
     types: ["PortfolioItem", "HierarchicalRequirement", "Feature"], 
     attribute: dropdownAttribute, 
     fetch:"Name,FormattedID,Owner,ObjectID,ClassofService", 
     query : fullQuery, 
     cardRenderer: PriorityCardRenderer 
    }; 

Wo fullQuery konstruiert werden kann, die der Rally Abfrage-Objekt. Sie finden es, indem Sie im SDK suchen. Hoffe das hilft vielleicht.

+0

Sollte fullQuery in Anführungszeichen gesetzt werden? Wenn ich die Abfrage so hinzugefügt habe, wie sie ist, wird die Kanbantafel nicht angezeigt. Wenn ich Anführungszeichen hinzufüge, lädt es, aber liefert immer noch keine Antwort. – user1145893

1

Per Charles 'Hinweis in Rally Kanban - hiding Epic Stories

Hier ist, wie ich dieses folgende Charles genähert' Hinweis für die Rally Katalog Kanban. Erstens ändern die Anweisung innerhalb der cardboardConfig holen, damit es die Kinder Sammlung umfasst, so:

 fetch: "Name,FormattedID,Children,Owner,ObjectID,Rank,Ready,Blocked,LastUpdateDate,Tags,State" 

Als nächstes zwischen dieser Aussage:

 cardboard.addEventListener("preUpdate", that._onBeforeItemUpdated); 

Und diese Aussage:

 cardboard.display("kanbanBoard"); 

Fügen Sie den folgenden Ereignis-Listener und Rückruf:

cardboard.addEventListener("onDataRetrieved", 
     function(cardboard, args){ 
      // Grab items hash 
      filteredItems = args.items; 

      // loop through hash keys (states) 
      for (var key in filteredItems) { 

       // Grab the workproducts objects (Stories, defects)     
       workproducts = filteredItems[key]; 
       // Array to hold filtered results, childless work products 
       childlessWorkProducts = new Array(); 
       // loop through 'em and filter for the childless 
       for (i=0;i<workproducts.length;i++) { 
        thisWorkProduct = workproducts[i];      
        // Check first if it's a User Story, since Defects don't have children 
        if (thisWorkProduct._type == "HierarchicalRequirement") { 
         if (thisWorkProduct.Children.length === 0) { 
          childlessWorkProducts.push(thisWorkProduct); 
         } 
        } else { 
         // If it's a Defect, it has no children so push it 
         childlessWorkProducts.push(thisWorkProduct); 
        } 
       } 
       filteredItems[key] = childlessWorkProducts; 
      } 
      // un-necessary call to cardboard.setItems() was here - removed 
     } 
    ); 

sollten Dieser Rückruf für nur Elemente Blattknoten filtern.

+0

Vielen Dank, das hat mich verrückt gemacht! – user1145893