0

当我在查询 lbapi 时遇到问题时,我退后一步,创建了一个非常基本的应用程序,其中只包含记录结果的查询。

它看起来像这样:

Deft.Chain.pipeline([
    function() {
        var dd = Ext.create('Deft.Deferred');
        Ext.create('Rally.data.lookback.SnapshotStore', {
            fetch    : ['Parent', 'Feature'],
            filters  : [{
                property : '__At',
                value    : 'current'
            },{
                property : '_TypeHierarchy',
                value    : 'HierarchicalRequirement'
            }]
        }).load({
            params : {
                compress : true,
                removeUnauthorizedSnapshots : true
            },
            callback : function(store) {
                console.log('store',store);                     
                dd.resolve(store);
            }
        });
        return dd.promise;
    }
]).then({
    success: function(records) {
        console.log('records', records);
    }
});

奇怪的是,如果我添加了这样的过滤器:

{
      property : 'Parent',
      operator : '!=',
      value    : null
}

我得到了更多的结果。我得出结论,removeUnauthorizedSnapshots 必须在将结果全部收集到 20000 个结果的页面中之后过滤结果,因此这是可能的。谁能证实这一点?希望以后可以避免这样的混乱

4

1 回答 1

0

你是对的。

removeUnauthorizedSnapshots过滤当前页面大小的结果集,这意味着在极端情况下,当所有结果都或曾经与不允许用户访问的项目相关联时,它实际上可能会返回一个结果为 0 的页面。

当您获得更多结果时,我不确定结果。额外的过滤器应该只会进一步限制结果的数量,当我使用类似的代码时,我会看到进一步的减少。

但我想建议对 Parent 属性上的过滤器进行语法更改。在 Lookback API 中根本不存储 Null,因此任何 != null 或 == null 查询都有点误导。在您的代码中它可以工作,但在 Parent == null 的情况下,它将返回没有 Parent 属性的快照,而不仅仅是那些 Parent 属性为 null 的快照。您可以使用exists true而不是!= null

filters  : [
     {
           property : 'Parent',
           operator : 'exists',
           value : true

    },{
           property : '__At',
           value    : 'current'
     },{
           property : '_TypeHierarchy',
           value    : 'HierarchicalRequirement'
}]
于 2013-09-11T14:52:04.890 回答