如何使用APP SDK2.0构建图表进行迭代?

时间:2015-10-15 18:42:12

标签: rally code-rally

我正在尝试为拉力赛创建自定义应用。

Iteration defects by severity and below is my code.

var startdate;
var enddate;
var iterationid;
Ext.define('CustomApp', {
    extend: 'Rally.app.App',
    componentCls: 'app',
    launch: function() {
        var that = this;
        that.getCurrentIteration(function(iterations){
             console.log("getting iteration object");
             startdate = _.map(iterations,function(i){return i.get("StartDate")});
             enddate = _.map(iterations,function(i){return i.get("EndDate")});
             iterationid = _.map(iterations,function(i){return i.get("ObjectID")});
             that._load();
        });
    },

     getCurrentIteration:function ( callback ) {
        var today = Rally.util.DateTime.toIsoString(new Date());
        Ext.create('Rally.data.wsapi.Store', {
            model: 'Iteration',
            autoLoad: true,
            context : {
                projectScopeDown : false   
            },
            filters: [
                {
                    property: 'EndDate', operator: '>=', value: today
                },
                {
                    property: 'StartDate', operator: '<=', value: today
                }
            ],
            listeners: {
                load: function(store, data, success) {
                    callback(data);
                }
            },
            fetch: true
        });
    },

    _load:function(){
        this.defineCalculator();
        this.makeChart();
   },    

    defineCalculator: function(){
        var that = this;
        Ext.define("MyDefectCalculator", { 
            extend: "Rally.data.lookback.calculator.TimeSeriesCalculator",
            getMetrics: function () {
                var metrics = [
                   {
                        field: "Severity",
                        as: "Catastrophic",
                        display: "column",
                        f: "filteredCount",
                        filterField: "Severity",
                        filterValues: ["1 - Catastrophic"]
                   },
                    {
                        field: "Severity",
                        as: "Severe",
                        display: "column",
                        f: "filteredCount",
                        filterField: "Severity",
                        filterValues: ["2 - Severe"]
                    },
                     { 
                        field: "Severity",
                        as: "Non - Critical",
                        display: "column",
                        f: "filteredCount",
                        filterField: "Severity",
                        filterValues: ["3 - Non - Critical"]
                     },
                      {
                        field: "Severity",
                        as: "Minor",
                        display: "column",
                        f: "filteredCount",
                        filterField: "Severity",
                        filterValues: ["4 - Minor"]
                      },
                       {
                        field: "Severity",
                        as: "Enhancement",
                        display: "column",
                        f: "filteredCount",
                        filterField: "Severity",
                        filterValues: ["5 - Enhancement"]
                       }
                ];  
                return metrics;
            }
        });
    },

    makeChart: function(){
        if (this.down('#myChart')) {
                this.remove('myChart');
        }
        console.log(enddate[0])
        var timePeriod = new Date(enddate[0] - startdate[0]);
        var dayMilliSeconds = enddate[0].getTime() - 86400000; 
        var adjustedEnddate = new Date(dayMilliSeconds);
        var project = this.getContext().getProject().ObjectID;
        var storeConfig = this.createStoreConfig(project,timePeriod,iterationid);
        this.chartConfig.calculatorConfig.startDate = startdate[0];
        this.chartConfig.calculatorConfig.endDate = adjustedEnddate;
        this.chartConfig.storeConfig = storeConfig;
        this.add(this.chartConfig); 
    },

    createStoreConfig : function(project,validFrom,iterationid1) {
        return {
            listeners : { 
                load : function(store,data) {
                    console.log("data",data.length);
                }
            },

            filters: [
                {
                    property: '_ProjectHierarchy',
                    operator : 'in',
                    value : [project] 
                },
                {
                    property: 'Iteration',
                    operator: 'in',
                    value: iterationid1
                },
                {
                    property: '_TypeHierarchy',
                    operator: 'in',
                    value: ['Defect']
                },
                 {
                    property: '_ValidFrom',
                    operator: '>',
                    value: validFrom
                }
            ],
            autoLoad : true,
            limit: Infinity,
            fetch: ['Severity'],
            hydrate: ['Severity']
        };
    },
     chartConfig: {
        xtype: 'rallychart',
        itemId : 'myChart',
        chartColors: ['Red', 'Green', 'Yellow', 'Balck' , 'Brown'],

        storeConfig: { },
        calculatorType: 'MyDefectCalculator',

        calculatorConfig: {
        },

        chartConfig: {

            plotOptions: {
                column: { stacking: 'normal'}
            },
            chart: { },
            title: { text: 'Iteration Defects by Priority' },
            xAxis: {
                tickInterval: 1,
                labels: {
                    formatter: function() {
                        var d = new Date(this.value);
                        return ""+(d.getMonth()+1)+"/"+d.getDate();
                    }
                },
                title: {
                    text: 'Date'
                }
            },
            yAxis: [
                {
                    tickInterval: 1,
                    title: {
                        text: 'Count'
                    }
                }
            ]
            }
    }   

});

我现在正在获取数据并且我设法在图表上显示它,但问题是数据显示甚至未来日期,即,我当前的迭代是从13到26,理想情况下它应该显示数据今天是13,14和15,但它显示了所有日期..任何人都可以帮助我限制逻辑缺失的地方。

Thanks,
Surender

0 个答案:

没有答案