Слишком большой объект запроса ралли

Из-за ограничений lbapi, описанных здесь, мои запросы к lbapi резко увеличились в размерах (я передаю массив "видимых" проектов в LBAPI, который будет возвращать рабочие элементы только из проектов, к которым у меня есть доступ к представлению) до точки, где я получаю ошибку "Запрос сущности слишком большой".

Я знаю, что мне нужно разбивать свои запросы, используя только некоторые из видимых проектов одновременно. Я хотел сделать это программно - для каждых 100 видимых проектов сделайте запрос, возьмите записи, которые возвращаются, и бросьте их в массив.

Тем не менее, это становится немного грязно, когда я пытаюсь определить, когда продолжить - все ли запросы возвращаются и заполняют массив итогов? Кто-нибудь может придумать, как сделать это?

for (var i = 0; i < Math.ceil(App.visibleTeams.length / 100); i++) {
    console.log('i',i);
    var tempProj = [];
    for (var j = i * 100; j < Math.min((i + 1) * 100, App.visibleTeams.length); j++) {
        tempProj.push(App.visibleTeams[j]);
    }
    console.log('tempProj.length',tempProj.length);
    // query
    App.completeRecords = [];
    Ext.create('Rally.data.lookback.SnapshotStore', {
        pageSize : 10000,
        fetch    : ['Parent','Name','_UnformattedID','PortfolioItemType','PercentDoneByStoryPlanEstimate','ObjectID','PlannedStartDate','PlannedEndDate','ActualStartDate','ActualEndDate','LeafStoryPlanEstimateTotal'],
        filters  : [{
            property : '__At',
            value    : 'current'
        },{
            property : '_TypeHierarchy',
            value    : 'PortfolioItem'
        },{
            property : '_ItemHierarchy',
            operator : 'in',
            value    : node.ObjectID
        },{
            property : 'Project',
            operator : 'in',
            value    : tempProj
        },{
            property : 'LeafStoryPlanEstimateTotal',
            operator : '>',
            value    : 0
        }]
    }).load({
        callback: function(records, operation, success) {
            if (!success) {
                Ext.getBody().unmask();
                Ext.Msg.alert('Error ' + operation.error.status + ': ' + operation.error.statusText, operation.error.errors[0]);
            } else {
                App.completeRecords.push.apply(App.completeRecords, records);
                // if done, callback(), else, do nothing
            }
        }
    });
}

1 ответ

Решение

Мы добавили некоторые новые функции, которые помогут решить эту проблему. Я добавил более подробный ответ на другой вопрос, на который вы ссылались.

Другие вопросы по тегам