我想创建一个图表,显示在 sprint 期间给定的计划状态中有多少任务。是否可以每天调用 WsapiDataStore?
问问题
555 次
2 回答
2
您正在寻找的是使用Lookback API的回溯 Snapshot Store - 这允许您指定要查询的日期或时间点。
一个典型的用法如下所示:
Ext.create('Rally.data.lookback.SnapshotStore', {
pageSize : 10000,
fetch : ['fetch'],
filters : [{
property : '__At',
value : 'current'
},{
property : '_ItemHierarchy',
value : 'HierarchicalRequirement'
}]
}).load({
callback : function(records) {
Ext.Array.each(records, function(record) {
// do something with each record
});
}
});
于 2013-08-07T19:00:21.230 回答
0
WsapiDataStore 不适用于历史数据。您需要使用从Lookback API 检索数据的 Rally.data.lookback.SnapshotStore。
Lookback API 允许查看过去的任何工作项或工作项集合的样子。这与直接使用 WS API(或通过 WsapiDataStore)不同,后者可以为您提供对象的当前状态,但没有历史数据。
LBAPI 文档可在此处获得
至于 Rally 发布对象的属性,请参见此处的 WS API 对象模型。但是从您的评论中不清楚您所说的整个版本的数据是什么意思。如果您有兴趣取回分配给特定版本的用户故事,那么您的查询对象应该是分层要求而不是版本,您可以按版本过滤。
这是一个使用发布下拉菜单构建图表的应用程序。根据下拉列表中的选择刷新图表(它被销毁并添加):
Ext.define('CustomApp', {
extend: 'Rally.app.TimeboxScopedApp',
componentCls: 'app',
scopeType: 'release',
comboboxConfig: {
fieldLabel: 'Select a Release:',
labelWidth: 100,
width: 300
},
addContent: function() {
this._makeStore();
},
onScopeChange: function() {
this._makeStore();
},
_makeStore: function() {
Ext.create('Rally.data.WsapiDataStore', {
model: 'UserStory',
autoLoad: true,
filters: [this.getContext().getTimeboxScope().getQueryFilter()],
listeners: {
load: this._onDataLoaded,
scope: this
}
});
},
_onDataLoaded: function(store, data) {
var records = [];
var scheduleStateGroups = ["Defined","In-Progress","Completed","Accepted"]
// State count variables
var definedCount = 0;
var inProgressCount = 0;
var completedCount = 0;
var acceptedCount = 0;
// Loop through returned data and group/count by ScheduleState
Ext.Array.each(data, function(record) {
//Perform custom actions with the data here
//Calculations, etc.
scheduleState = record.get('ScheduleState');
switch(scheduleState)
{
case "Defined":
definedCount++;
break;
case "In-Progress":
inProgressCount++;
break;
case "Completed":
completedCount++;
break;
case "Accepted":
acceptedCount++;
}
});
if (this.down('#myChart')) {
this.remove('myChart');
}
this.add(
{
xtype: 'rallychart',
height: 400,
itemId: 'myChart',
chartConfig: {
chart: {
},
title: {
text: 'User Story Schedule State Counts',
align: 'center'
},
xField : 'ScheduleState',
xAxis: [
{
//categories: scheduleStateGroups,
title: {
text: 'ScheduleState'
}
}
],
yAxis: {
title: {
text: 'Count'
}
},
plotOptions : {
column: {
color: '#F00'
},
series : {
animation : {
duration : 2000,
easing : 'swing'
}
}
}
},
chartData: {
categories: scheduleStateGroups,
series: [
{
type: 'column',
data: [definedCount, inProgressCount, completedCount, acceptedCount]
}
]
}
}
);
this.down('#myChart')._unmask();
}
});
于 2013-08-08T15:38:01.730 回答