2014-02-26 1 views
2

룩백 API에서 가져온 사용자 스토리의 Feature 객체를 가져오고 싶습니다. 하지만 피쳐를 수화하려고하면 형식이 지정되지 않은 피쳐 ID 만 표시됩니다.수화물 객체 필드

룩백 결과 집합에서 User Stories의 실제 피쳐 개체를 가져올 수 있나요? 내가 데이터를 검색하기 위해 사용하는 코드의 예를 아래

:

storeConfig: { 
      find: { 
       "_TypeHierarchy": { '$in' : [-51038] }, 
       "Children": null 
      }, 
      fetch: ["ScheduleState", "PlanEstimate", "ObjectID", "_ValidFrom", "_ValidTo", "c_BaselineDeliveryConfidence", "Name", "Feature"], 
      hydrate: ["ScheduleState", "c_BaselineDeliveryConfidence", "Name", "Feature"], 
      sort: { 
       "_ValidFrom": 1 
      }, 
      compress: true, 
      useHttpPost: true 

답변

0

기능은 사용자 스토리가 (기능 속성을 통해)에 대한 참조를 가지고있는에 전체 개체입니다. 이 쿼리와 유사하다 귀하의 코드 :

https://rally1.rallydev.com/analytics/v2.0/service/rally/workspace/111/artifact/snapshot/query.js?find={"_TypeHierarchy":"HierarchicalRequirement"}&fields=["Name","ScheduleState","PlanEstimate","Feature"]&hydrate=["ScheduleState"] 

이런 식으로 뭔가를 반환합니다 : 12483739639이 기능의 OBJECTID입니다

{ 
Feature: 12483739639, 
Name: "my story", 
ScheduleState: "Defined", 
PlanEstimate: 3 
} 

. 수화물에 "피처 (Feature)"를 추가해도 차이는 없습니다.

코드에서 전체 Feature 객체 또는 일부 속성을 가져 오려면 해당 객체의 OID를 사용하고 별도의 쿼리를 실행할 수 있습니다. 또한 해당 OID를 배열에 넣고 두 번째 쿼리에서 연산자 $in을 사용할 수 있습니다.

2

개체를 LBAPI 밖으로 직접 수화 할 수 없습니다. 그러나 저는 닉이 제안한 것과 비슷한 방법을 사용하여 도우미 클래스를 작성했습니다.

https://github.com/ConnerReeves/RallyHelpers/blob/master/RecordHydrator/RecordHydrator.js

는 여기가 사용되는 방법의 예입니다. 모든 엽서 User Stories (반복 할당이있는)를 모으고 Initiative 필드를 수화하는 중입니다.

launch: function() { 
    var self = this; 
    Ext.create('Rally.data.lookback.SnapshotStore', { 
     limit : Infinity, 
     fetch : ['Name','Iteration'], 
     filters : [{ 
      property : '__At', 
      value : 'current' 
     },{ 
      property : '_TypeHierarchy', 
      value : 'HierarchicalRequirement' 
     },{ 
      property : 'Iteration', 
      operator : '!=', 
      value : null 
     },{ 
      property : 'Children', 
      value : null 
     }] 
    }).load({ 
     params : { 
      compress     : true, 
      removeUnauthorizedSnapshots : true 
     }, 
     callback : function(records, operation, success) { 
      self._hydrateRecords(records); 
     } 
    }); 
}, 

_hydrateRecords: function(records) { 
    Ext.create('CustomApp.RecordHydrator', { 
     fields: [{ 
      name : 'Iteration', 
      hydrate : ['Name','StartDate','EndDate'] 
     }] 
    }).hydrate(records).then({ 
     success: function(hydratedRecords) { 
      console.log(_.groupBy(hydratedRecords, function(record) { 
       return record.get('Iteration') && record.get('Iteration').get('Name'); 
      })); 
     } 
    }); 
}