2011-02-10 42 views
4

我在Sharepoint 2010中有一種奇特的分類過濾功能,但我可以在所有3臺服務器上覆制它。Sharepoint 2010分類標準沒有正確過濾

下面是這種情況如何發揮出來:

  1. 有許多子節點(約4500)完全填充termSet。
  2. 添加1個自定義列表,其中包含2個字段(標題和託管元數據字段,此鏈接指向termSet) - 所有這些都是使用GUI完成的。
  3. 手動添加一個列表項目(或一對),並選擇一個術語來填充元數據字段(樹結構中的深度約爲4個節點向下)
  4. 根據此術語測試列表上的過濾 - 奇蹟般有效。

現在在這一點上我運行我的導入作業,將項目添加到另一個列表。第二個列表還有一個託管元數據字段,指向termSet。

  1. 添加1000個項目,沒問題。像一個魅力
  2. 添加另一個1000,沒問題。
  3. 地方約2000和4500項出事了,因爲程序運行結束後,我現在留在以下情形:

列表1過濾不起作用。列表2過濾,絕對不行。

到底發生了什麼。我選擇一個頂級的術語,它應該包括所有的子項目。它在大量插入使用術語集中的術語的列表項之前完成了此操作。插入後,當我選擇最高級別的術語時,我得到一個空集,並且沒有包含子孫的按鈕。

我正在研究這個隱藏的列表,它與我已經注意到的過濾有很大關係。過濾主要檢查這(不完全確定如何/爲什麼)。

其他人有這個問題嗎?關於此的唯一文檔來源是Microsoft Sharepoint Evangelical Blogs(市場營銷),沒有詳細解釋爲什麼這不起作用。

請協助。

回答

5

規則1:處理Sharepoint時,永遠不要相信它的工作。

if (fRecursive && (numArray.Length > 300)) 
    { 
     int[] numArray2 = numArray; 
     object[] data = new object[] { termSetId.ToString(), termId.ToString(), numArray2.Length.ToString(CultureInfo.InvariantCulture) }; 
     ULS.SendTraceTag(0x66367766, ULSCat.msoulscat_DLC_DM, ULSTraceLevel.Medium, "Disable recursive term clause: Too many descendent IDs for term. Termset[{0}]Term[{1}] Descendent ID count[{2}]", data); 
     numArray = TaxonomyField.GetWssIdsOfTerm(SPContext.Current.Site, termStoreId, termSetId, termId, false, 500); 
     MetadataNavigationContext current = MetadataNavigationContext.Current; 
     if (current != null) 
     { 
      current.ForceTreeDescendentsOff(); 
     } 
    } 
(numArray.Length > 300) 

從Sharepoint.Taxonomy反映出來,注意current.ForceTreeDescendentsOff();

因此,如果您有一種情況需要從Taxonomy過濾器返回超過300條記錄,則似乎無法執行此操作。非常適合企業解決方案。

+0

我可以知道它在SP2013和2016中是否有所改進? – Mark 2016-05-31 07:30:00