2015-09-08 2 views
0

Я пишу приложение, которое должно загружать принятые истории, задачи с целыми числами в поле «Время потрачено».Получение принятых историй, которые имеют задачи с TimeSpent

Как я могу видеть в некоторых тестах, я создал поля задачи, доступные через UserStory: 'Tasks', 'TaskActualTotal', 'TaskEstimateTotal', 'TaskRemainingTotal' and 'TaskStatus'.

Tasks имеет атрибут _ref со ссылкой на JSON со всеми задачами для этой истории. Как я могу исследовать это, так как я использую Rally API? Или есть лучший способ сделать это?

UPDATE:

Так что это в значительной степени я есть сейчас.

var storiesCall = Ext.create('Rally.data.WsapiDataStore', { 
       model: 'UserStory', 
       fetch: ['Tasks'] 
      }); 
storiesCall.load().then({ 
       success: this.loadTasks, 
       scope: this 
      }); 


loadTasks: function(stories) { 
     storiesCall = _.flatten(stories); 
     console.log(stories.length); 

     _.each(stories, function(story) { 
      var tasks = story.get('Tasks'); 

      if(tasks.Count > 0) { 
       tasks.store = story.getCollection('Tasks', {fetch: ['Name','FormattedID','Workproduct','Estimate','TimeSpent']}); 
       console.log(tasks.store.load().deferred); 
      } 
      else{ 
       console.log('no tasks'); 
      } 
     }); 
} 

tasks.store.load().deferred возвращается следующий объект:

enter image description here

Обратите внимание, что мы можем увидеть данные задачи на value[0], но когда я пытаюсь обернуть его с tasks.store.load().deferred.value[0] его сбою.

Любые мысли?

ответ

1

Кроме того, объект UserStory (называемый HierarchicalRequirement в WS API) не имеет поля, где дочерние задачи TimeSpent сворачиваются к истории, подобной тому, как дочерние задачи «Оценка» сворачиваются до TaskEstimateTotal в истории.

можно получить TimeSpent для каждой задачи, а затем добавить их путем доступа к коллекции Tasks рассказ как сделано в этом приложении:

Ext.define('CustomApp', { 
    extend: 'Rally.app.App', 
    componentCls: 'app', 
    launch: function() { 
     var initiatives = Ext.create('Rally.data.wsapi.Store', { 
      model: 'PortfolioItem/Initiative', 
      fetch: ['Children'] 
     }); 
     initiatives.load().then({ 
      success: this.loadFeatures, 
      scope: this 
     }).then({       
      success: this.loadParentStories, 
      scope: this 
     }).then({       
      success: this.loadChildStories, 
      scope: this 
     }).then({       
      success: this.loadTasks, 
      failure: this.onFailure, 
      scope: this 
     }).then({ 
      success: function(results) { 
       results = _.flatten(results); 
       _.each(results, function(result){ 
        console.log(result.data.FormattedID, 'Estimate: ', result.data.Estimate, 'WorkProduct:', result.data.WorkProduct.FormattedID, 'TimeSpent', result.data.TimeSpent); 
       }); 
       this.makeGrid(results); 
      }, 
      failure: function(error) { 
       console.log('oh, noes!'); 
      }, 
      scope: this 
     }); 
    }, 

    loadFeatures: function(initiatives) { 
     var promises = []; 
     _.each(initiatives, function(initiative) { 
      var features = initiative.get('Children'); 
      if(features.Count > 0) { 
       features.store = initiative.getCollection('Children',{fetch: ['Name','FormattedID','UserStories']}); 
       promises.push(features.store.load()); 
      } 
     }); 
     return Deft.Promise.all(promises); 
    }, 
    loadParentStories: function(features) { 
     features = _.flatten(features); 
     var promises = []; 
     _.each(features, function(feature) { 
      var stories = feature.get('UserStories'); 
      if(stories.Count > 0) { 
       stories.store = feature.getCollection('UserStories', {fetch: ['Name','FormattedID','Children']}); 
       promises.push(stories.store.load()); 
      } 
     }); 
     return Deft.Promise.all(promises); 
    }, 
    loadChildStories: function(parentStories) { 
     parentStories = _.flatten(parentStories); 
     var promises = []; 
     _.each(parentStories, function(parentStory) { 
      var children = parentStory.get('Children'); 
      if(children.Count > 0) { 
       children.store = parentStory.getCollection('Children', {fetch: ['Name','FormattedID','Tasks']}); 
       promises.push(children.store.load()); 
      } 
     }); 
     return Deft.Promise.all(promises); 
    }, 
    loadTasks: function(stories) { 
     stories = _.flatten(stories); 
     var promises = []; 
     _.each(stories, function(story) { 
      var tasks = story.get('Tasks'); 
      if(tasks.Count > 0) { 
       tasks.store = story.getCollection('Tasks', {fetch: ['Name','FormattedID','Workproduct','Estimate','TimeSpent']}); 
       promises.push(tasks.store.load()); 
      } 
      else{ 
       console.log('no tasks'); 
      } 
     }); 
     return Deft.Promise.all(promises); 
    }, 
    makeGrid:function(tasks){ 
     var data = []; 
     _.each(tasks, function(task){ 
      data.push(task.data); 
     }); 

     _.each(data, function(record){ 
      record.Story = record.WorkProduct.FormattedID + " " + record.WorkProduct.Name; 
     }); 

     this.add({ 
      xtype: 'rallygrid', 
      showPagingToolbar: true, 
      showRowActionsColumn: true, 
      editable: false, 
      store: Ext.create('Rally.data.custom.Store', { 
       data: data, 
       groupField: 'Story' 
      }), 
      features: [{ftype:'groupingsummary'}], 
      columnCfgs: [ 
       { 
        xtype: 'templatecolumn',text: 'ID',dataIndex: 'FormattedID',width: 100, 
        tpl: Ext.create('Rally.ui.renderer.template.FormattedIDTemplate'), 
        summaryRenderer: function() { 
         return "Totals"; 
        } 
       }, 
       { 
        text: 'Name',dataIndex: 'Name' 
       }, 
       { 
        text: 'TimeSpent',dataIndex: 'TimeSpent', 
        summaryType: 'sum' 
       }, 
       { 
        text: 'Estimate',dataIndex: 'Estimate', 
        summaryType: 'sum' 
       } 
      ] 
     }); 

    } 
}); 
+0

этот пример только возвращает максимум 200 результатов. И если попытаться установить «limit: Infinity», на Ext.create он сработает. Есть идеи? – adolfosrs

+0

только что сделал некоторые уточнения на вопросе также. – adolfosrs

Смежные вопросы