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());
}
});
}
}
});
请注意,这会产生大量请求,因此最好通过过滤器限制根存储中的故事总数。
我正在尝试为 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());
}
});
}
}
});
请注意,这会产生大量请求,因此最好通过过滤器限制根存储中的故事总数。