通过2.0 API获取缺陷

时间:2013-06-28 13:04:58

标签: rally

有问题从看板上的故事中拉出缺陷。我们在自定义电路板上的一个功能是列出卡片中与故事相关的缺陷。

我在2.0p2中工作,但在将代码移植到2.0rc1时,我似乎无法找回缺陷数组。

我以前称之为:

var defectArray = this.card.getRecord().get("Defects");

然后在典型的for循环中迭代它们:

for (var i = 0; i < defectArray.length; i++) {
  var defect = defectArray[i];
  ...
}

旧的API用于返回.get(“缺陷”)上的对象数组,现在它没有。

我确信我错过了什么,任何帮助都会很棒!

2 个答案:

答案 0 :(得分:1)

默认情况下,2.0rc1使用新的WSAPI v2.0。出于性能原因,不再可能在2.x版本的WSAPI中执行此操作。现在每个对象集合都有自己独特的引用。 这意味着现在可以单独查询,分页,排序和过滤这些集合。

获取故事中的缺陷现在将返回一个包含计数的对象和从中检索集合数据的uri。 引用通常是格式/类型/ oid /集合(例如/ hierarchicalrequirement / 12345 / defect)。

现在所有记录都有getCollection方法来检索子集合数据。 此方法将返回Rally.data.CollectionStore的实例以处理子集合。

以下示例显示如何在SDK 2.0rc1 / WSAPI 2.x中检索故事的相关缺陷信息:

var defectInfo = story.get('Defects');
var defectCount = defectInfo.Count;

story.getCollection('Defects').load({
    fetch: ['FormattedID', 'Name', 'State'],
    callback: function(records, operation, success) {
        Ext.Array.each(records, function(defect) {
            //each record is an instance of the defect model
            console.log(defect.get('FormattedID') + ' - ' +
                defect.get('Name') + ': ' + defect.get('State'));
        });
    }
});

答案 1 :(得分:1)

您可能会收回这样的缺陷:

var defects = story.getCollection('Defects');

这是一个使用2.0rc1的完整代码,并访问用户故事中的缺陷集合。在代码中我构建了一个网格,但访问该集合的部分将有希望提供帮助。

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

launch: function() {
    Ext.create('Rally.data.WsapiDataStore', {
        model: 'UserStory',
        fetch: ['FormattedID','Name','Defects'],
        pageSize: 100,
        autoLoad: true,
        listeners: {
            load: this._onDataLoaded,
            scope: this
        }
    });
},

_createGrid: function(stories) {
     this.add({
        xtype: 'rallygrid',
        store: Ext.create('Rally.data.custom.Store', {
            data: stories,
            pageSize: 100
        }),

        columnCfgs: [
            {
               text: 'Formatted ID', dataIndex: 'FormattedID'
            },
            {
                text: 'Name', dataIndex: 'Name'
            },
            {
                text: 'Defect Count', dataIndex: 'DefectCount'
            },
            {
                text: 'Defects', dataIndex: 'Defects', flex: 1, emptyCellText: 'zero',
                renderer: function(value) {
                    if (value) {
                        return value.join(',');
                    }
                }
            }
        ]

    });
},
_onDataLoaded: function(store, data){
            var stories = [];
            var pendingDefects = data.length;

            Ext.Array.each(data, function(story) {
                        var s  = {
                            FormattedID: story.get('FormattedID'),
                            Name: story.get('Name'),
                            DefectCount: story.get('Defects').Count,
                            Defects: []
                        };

                        var defects = story.getCollection('Defects');
                        defects.load({
                            fetch: ['FormattedID'],
                            callback: function(records, operation, success){
                                Ext.Array.each(records, function(defect){
                                    s.Defects.push(defect.get('FormattedID'));    
                                }, this);

                                --pendingDefects;
                                if (pendingDefects === 0) {
                                    this._createGrid(stories);
                                }
                            },
                            scope: this
                        });
                        stories.push(s);
            }, this);
}             

});