使用拉力赛应用程序sdk创建/更新用户故事

时间:2014-02-03 22:32:55

标签: extjs rally

到目前为止,我一直在使用Rally App SDK查询数据存储,但是,这次我必须使用js sdk更新故事。我尝试查找一些示例代码示例,演示如何使用App SDK在Rally中更新/添加值。我一直在使用Ruby Rally API进行CRUD操作,但从未真正使用应用程序sdk。

任何人都可以提供一些示例代码或任何我可以查看的链接吗?

由于

1 个答案:

答案 0 :(得分:1)

有关更新和创建reocrds的信息,请参阅this help document。以下是示例 - 一个更新故事,另一个创建故事。在UI方面没有太多进展:请启用DevTools控制台以查看console.log输出。

以下是更新用户素材的缺陷集合的示例:

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

    launch: function() {
        console.log("launch");
       Rally.data.ModelFactory.getModel({
            type: 'User Story',
            success: this._onModelRetrieved,
            scope: this
        });
    },
    _onModelRetrieved: function(model) {
        console.log("_onModelRetrieved");
        this.model = model;
        this._readRecord(model);
    },

     _readRecord: function(model) {
        var id = 13888228557;
        console.log("_readRecord");
        this.model.load(id, {
            fetch: ['Name', 'Defects'],
            callback: this._onRecordRead,
            scope: this
        });
    },

    _onRecordRead: function(record, operation) {
        console.log('name...', record.get('Name'));
        console.log('defects...', record.get('Defects'));
        if(operation.wasSuccessful()) {
            //load store first by passing additional config to getCollection method
             var defectStore = record.getCollection('Defects', {
                autoLoad: true,
                listeners: { load: function() {
                    //once loaded now do the add and sync
                    defectStore.add({'_ref':'/defect/13303315495'});
                    defectStore.sync({
                        callback: function() {
                            console.log('success');
                        }
                    });
                }}
            });
        }

    }, 
});

以下是创建用户素材,设置项目和安排迭代的示例:

Ext.define('CustomApp', {
    extend: 'Rally.app.TimeboxScopedApp',
    componentCls: 'app',
    scopeType: 'iteration',
    comboboxConfig: {
        fieldLabel: 'Select an Iteration:',
        labelWidth: 100,
        width: 300
    },

    addContent: function() {   
        this._getIteration();
    },

    onScopeChange: function() {
        this._getIteration();
    },


    _getIteration: function() {
            var iteration = this.getContext().getTimeboxScope().record.get('_ref');
            console.log('iteration',iteration);

            if (!this.down('#b2')) {
                 var that = this;
                 var cb = Ext.create('Ext.Container', {

                items: [
                    {
                        xtype  : 'rallybutton',
                        text      : 'create',
                        id: 'b2',
                        handler: function() {
                            that._getModel(iteration); 
                        }
                    }

                    ]
                });
            this.add(cb);
            }
        },


    _getModel: function(iteration){
            var that = this;
            Rally.data.ModelFactory.getModel({
                type: 'UserStory',
                context: {
                    workspace: '/workspace/12352608129'
                },
                success: function(model) {  //success on model retrieved
                    that._model = model;
                    var story = Ext.create(model, {
                        Name: 'story 777',
                        Description: 'created via appsdk2'
                    });
                    story.save({
                        callback: function(result, operation) {
                            if(operation.wasSuccessful()) {
                                console.log("_ref",result.get('_ref'), ' ', result.get('Name'));
                                that._record = result;
                                that._readAndUpdate(iteration);
                            }
                            else{
                                console.log("?");
                            }
                        }
                    });
                }
            });
        },

        _readAndUpdate:function(iteration){
            var id = this._record.get('ObjectID');
            console.log('OID', id);
            this._model.load(id,{
                fetch: ['Name', 'FormattedID', 'ScheduleState', 'Iteration'],
                callback: function(record, operation){
                    console.log('ScheduleState prior to update:', record.get('ScheduleState'));
                    console.log('Iteration prior to update:', record.get('Iteration'));
                    record.set('ScheduleState','In-Progress');
                    record.set('Iteration', iteration);
                    record.set('Project', '/project/12352608219')
                    record.save({
                        callback: function(record, operation) {
                            if(operation.wasSuccessful()) {
                                console.log('ScheduleState after update..', record.get('ScheduleState'));
                                console.log('Iteration after update..', record.get('Iteration'));
                            }
                            else{
                                console.log("?");
                            }
                        }
                    });
                }
            })
        }
});