2013-09-10 36 views
0

當我遇到了對lbapi查詢的問題時,我退後一步創建了一個非常基本的應用程序,只是在其中查詢了記錄結果的查詢。回看API刪除未經授權的快照

它看起來是這樣的:

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個結果頁面後過濾結果,因此這是可能的。任何人都可以確認嗎?希望將來可以避免這種混淆

回答

0

你是對的。

removeUnauthorizedSnapshots過濾當前頁面大小的結果集,這意味着它可以在極端的情況下以0結果竟返回一個頁面時,所有的結果都是或曾經與用戶不允許訪問項目相關。

當您獲得更多結果時,我不確定結果。額外的過濾器應該進一步限制結果的數量,當我使用類似的代碼時,我會看到進一步的減少。

但我想建議在父屬性上的過濾器的語法更改。根本不在Lookback API中存儲空值,所以任何!= 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' 
}] 
+0

我期望看到的降低爲好,但你說的提供被刪除未經授權的快照之前應用的過濾器,所以我的理論是不完全正確? –

+0

我相信在應用過濾器後會刪除未經授權的快照。我在Parent屬性上的過濾器上添加了一個替代語法的回答。 – nickm