Is it possible to convert the old Rally Task Board

2019-08-15 04:19发布

问题:

I've been playing around with Rally app customizations for about the past month now and have been impressed with the features that are available. I've been throwing the idea around to develop the legacy "Task Board" app over to the new Cardboard-style app. I've searched on GitHub and all of the documentation for similar endeavours but it always seems like individuals just try to update the legacy app. I would like to know if this is because of existing limitations with the Cardboard functionality or is it because they have potentially replaced the legacy app with a newer process?

Is it reasonable to assume that one could redevelop the Task Board app into a cardboard app to make some of the newer features to be included (e.g. inline-editing, coloring, etc.)? Switching to the newer SDK would also open up a lot better development process for other new features.

The current limitation that I have seen is that there is not an easy way to reproduce the "rows" or tasks grouped by user story.

If anyone has experience or recommendations of how to extend the cardboard app to enable rows, your input is appreciated.

Rally SDK 2 Documentation

回答1:

It's due to the existing limitations with the Cardboard in AppSDK2.

A simple code like the one below will build a basic cardboard of Task objects, but it will not look like the board in the legacy TaskBoard app. It is possible to add fields to the card in addition to the default Name and Owner using a cardConfig:

var myCardConfig = {
               xtype: 'rallycard',
               fields: ['ToDo', 'Estimate', 'WorkProduct'],
               editable: true
        }

but editable: true makes only Name editable.

The fields that can be edited on cards is still very limited.

There is also no easy way to add a Workproduct's (user story) card on the left of the task cards, outside of the vertical swimlanes.

Ext.define('CustomApp', {
    extend: 'Rally.app.TimeboxScopedApp',
    componentCls: 'app',
    scopeType: 'iteration',
    onScopeChange: function(scope) {
        this._iteration = scope.record.get('_ref');

        var myCardConfig = {
               xtype: 'rallycard',
               fields: ['ToDo', 'Estimate', 'WorkProduct'],
               editable: true
        }
        if(!this.board) {
            this.board = this.add({
                xtype: 'rallycardboard',
                types: ['Task'],
                attribute: 'State',
                cardConfig: myCardConfig,
                storeConfig: {
                    filters: [scope.getQueryFilter()]
                }
            });
        } else {
            this.board.refresh({
                storeConfig: {
                    filters: [scope.getQueryFilter()]
                }
            });
        }
        this.iteration = scope.getRecord();
    }
});