user2975630
user2975630

Reputation: 11

Custom Rally Grid column together with Rally data columns

I am trying to create an app that will display all test sets in the current project and their states in terms of pass/fail totals. Issues that I face (BTW just started learning ExtJS and Rally SDK yesterday):
- I need to understand how can I use the currently selected project as the one sued in the grid as a filter
- how should a test set pass/fail totals be queried and then displayed in a column in the grid - example : Test set 123 | 45/70

Upvotes: 1

Views: 689

Answers (1)

nickm
nickm

Reputation: 5966

This is an example of an app that uses a project picker and builds a grid of Test Sets by Project. Also see a code example from this post. There is no filed in Web Services API where pass/fail totals are calculated. You will have to iterate over results and calculate totals in your code. I would encourage limiting the number of test case results by some criteria, e.g. CreationDate. In a scenario when test case results are automated the sheer volume of the data can be problematic.

Ext.define('CustomApp', {
    extend: 'Rally.app.App',
    componentCls: 'app',

        launch: function() {
            var c = Ext.create('Ext.Container', {
                items: [
                    {
                    xtype: 'rallyprojectpicker',
                    fieldLabel: 'select project',
                        listeners:{
                            change: function(combobox){
                                if ( this.down('#g')) {
                                    console.log('grid exists');
                                    Ext.getCmp('g').destroy();
                                    console.log('grid deleted');
                                }
                                this.onProjectSelected(combobox.getSelectedRecord());
                            },
                            scope: this
                        }
                    },
                ],
            });
            this.add(c);
        },

        onProjectSelected:function(record){
            var project = record.data['_ref'];
            console.log('project', project);
            var testSetStore = Ext.create('Rally.data.WsapiDataStore', {
            model: 'TestSet',
            fetch: ['FormattedID','Name', 'Project', 'TestCaseStatus'],
            pageSize: 100,
            autoLoad: true,
            filters: [
        {
            property: 'Project',
            value: project
        }
        ],
            listeners: {
                load: this.onTestSetsLoaded,
                scope: this
            }
        }); 


        },

    onTestSetsLoaded:function(store, data){
                var testSets = [];
                Ext.Array.each(data, function(testset) {
                    var ts  = {
                        FormattedID: testset.get('FormattedID'),
                        _ref: testset.get("_ref"),  
                        Name: testset.get('Name'),
            TestCaseStatus: testset.get('TestCaseStatus')
                    };
                    testSets.push(ts);
                 });
                this.updateGrid(testSets);

    },


        updateGrid: function(testSets){
        var store = Ext.create('Rally.data.custom.Store', {
                data: testSets,
                pageSize: 100
            });
        if (!this.down('#g')) {
        this.createGrid(store);
        }
        else{
        this.down('#g').reconfigure(store);
        }
    },

        createGrid: function(store){
    console.log("load grid", store);

    var g = Ext.create('Rally.ui.grid.Grid', {
                id: 'g',
        store: store,

        columnCfgs: [
        {
                   text: 'Formatted ID', dataIndex: 'FormattedID', xtype: 'templatecolumn',
                    tpl: Ext.create('Rally.ui.renderer.template.FormattedIDTemplate')
                },
                {
                    text: 'Name', dataIndex: 'Name'
                },
        {
                    text: 'TestCaseStatus', dataIndex: 'TestCaseStatus'
                }
        ]
    });
    this.add(g);
   },
});

The full html source of this example is available from this repo

Upvotes: 1

Related Questions