Как получить Инициативное и общее количество дефектов по инициативе через 2.0p5

Я хочу показать инициативу и общее количество дефектов, поднятых для этой инициативы.

Пробовал со следующим фрагментом, но я не смог соотнести инициативу и дефект.

 _getInitiatives: function () {
                    Ext.create("Rally.data.WsapiDataStore", {
                        model: "PortfolioItem/initiative",
                        fetch: ["Project", "Notes", "Name", "Children", "FormattedID"],
                        limit: 1 / 0,
                        context: {
                            project: "/project/xxx",
                            projectScopeDown: !0,
                            projectScopeUp: !1
                        },
                        autoLoad: !0,
                        listeners: {
                            load:this._onDefectsLoaded,
                            scope: this
                        }
                    })
                },
                _onDefectsLoaded: function(store,data){
                    this.stories = data;
                    Ext.create('Rally.data.WsapiDataStore',{  
                        model: 'User Story',
                        limit: "Infinity",
                        context: {
                            project :'/project/xxx',
                            projectScopeUp: false,
                            projectScopeDown: true
                        },
                        autoLoad: true,
                        fetch:['FormattedID','Name','Defects','Feature'],
                        scope:this,
                        listeners: {
                            //load: this._onAllDefectsLoaded,
                            load: this._onDataLoaded,
                            scope: this
                        }
                    });
                }

Пожалуйста, предоставьте исправление / предложение для вышеупомянутой проблемы

1 ответ

Я обнаружил, что проще использовать API Lookback для запросов, которые ссылаются на RPM, а не на WSAPI. Вот некоторый код, который получает все записи Инициативы из проекта, а затем выбирает количество дефектов для каждой инициативы и применяет этот счет к записи. Надеюсь это поможет!

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

    launch: function() {
        Ext.create('Rally.data.lookback.SnapshotStore', {
            fetch   : ['Name','ObjectID'],
            filters : [{
                property : '__At',
                value    : 'current'
            },{
                property : '_TypeHierarchy',
                value    : 'PortfolioItem/Initiative'
            }]
        }).load({
            params : {
                compress                    : true,
                removeUnauthorizedSnapshots : true
            },
            callback : function(records, operation, success) {
                var me = this;
                Deft.Promise.all(Ext.Array.map(records, function(record) {
                    return me.getInitiativeDefectCount(record.get('ObjectID')).then({
                        success: function(defectCount) {
                            record.set('DefectCount', defectCount);
                        }
                    });
                })).then({
                    success: function() {
                        console.log(records);
                    }
                });
            },
            scope : this
        });
    },

    getInitiativeDefectCount: function(initiativeObjectID) {
        var deferred = Ext.create('Deft.Deferred');
        Ext.create('Rally.data.lookback.SnapshotStore', {
            pageSize : 1,
            filters  : [{
                property : '__At',
                value    : 'current'
            },{
                property : '_TypeHierarchy',
                value    : 'Defect'
            },{
                property : '_ItemHierarchy',
                operator : 'in',
                value    : initiativeObjectID
            }]
        }).load({
            params : {
                compress                    : true,
                removeUnauthorizedSnapshots : true
            },
            callback : function(records, operation, success) {
                deferred.resolve(operation.resultSet.totalRecords);
            }
        });
        return deferred.promise;
    }
});
Другие вопросы по тегам