SDK 1 中的拉力赛查询与 SDK 2 中的商店

Rally Query in the SDK 1 vs Store in the SDK 2

我正在尝试为 Rally 创建一个可导出为 CSV 的网格应用程序以显示依赖关系。但是我没有得到我期望使用商店的 SDK 2 的结果。我找到了一个旧版 SDK 1 应用程序,它返回了我正在寻找的内容。

我不确定我需要做什么才能让前辈们展示。我得到的只是数据对象中商店的计数。我已经看过很多次文档,但我被卡住了。

 var dependencydata = Ext.create('Rally.data.wsapi.Store', {
    model: 'hierarchicalrequirement',
    autoLoad: true,
    
       listeners: {
        load: function(dependencydata, data, success) {
            //process data
            console.log("Woot Data !",dependencydata, data, success);
           this.loadgrid(dependencydata);
        },
        scope: this
    },
    fetch: ['Rank','FormattedID','Name','Predecessors','Successors','Project','ScheduleState']
});//end Store

结果是

数据

FormatId 12345

废话

前任

计数 2

我需要的是

数据

FormatId 12345

废话

前任

   object 

   Array

    FormatId 45637

我猜在 SDK 1 中应该是这样的

var queryConfig = {
                    type : 'hierarchicalrequirement',
                    key  : 'stories',
                    fetch: 'Rank,FormattedID,Name,Predecessors,Successors,Project,ScheduleState',
                    query: '(Release.Name = "' + relDropdown.getSelectedName() + '")',
                    order: 'Rank'
                };
                rallyDataSource.findAll(queryConfig, showUserStoriesTable);
            }
         

SDK 2 使用的 WSAPI v2.0 不允许像 v1.0 那样在一个请求中加水集合。

幸运的是,文档中有一个指南处理这个确切的主题: https://help.rallydev.com/apps/2.0/doc/#!/guide/collections_in_v2

你的情况稍微复杂一些,因为你需要为每个故事加载 2 个集合(前任和后继)

所以像这样的东西应该可以工作:

//keep track of all the pending collection loads
var promises = [];

Ext.create('Rally.data.wsapi.Store', {
    model: 'UserStory',
    fetch: ['Rank','FormattedID','Name','Predecessors','Successors','Project','ScheduleState'],
    autoLoad: true,
    listeners: {
        load: function(store, records) {              
           _.each(records, function(story) {
               //create the stores to load the collections
               story.predecessorStore = story.getCollection('Predecessors');
               story.successorStore = story.getCollection('Successors');

               //load the stores and keep track of the load operations
               promises.push(predecessorStore.load({fetch: ['FormattedID']}));
               promises.push(successorStore.load({fetch: ['FormattedID']}));
           });

           //wait for all promises to finish
           Deft.Promise.all(promises).then({
               success: function() {
                   //all data loaded.
                   console.log(records[0].predecessorStore.getRange());
                   console.log(records[0].successorStore.getRange());
               }
           });
        }
    }
});

请注意,这会产生大量请求,因此最好通过过滤器限制根存储中的故事总数。