0

我想创建一个图表,显示在 sprint 期间给定的计划状态中有多少任务。是否可以每天调用 WsapiDataStore?

4

2 回答 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 回答