SharePoint 2010分类系统无法正确过滤。

4
我在Sharepoint 2010中使用分类法过滤时遇到了一个奇怪的问题,但我能够在所有3个服务器上复制它。具体情况如下:
1. 拥有一个完全填充了许多子节点(约4500)的termSet。 2. 添加一个自定义列表,其中包括2个字段(标题和托管元数据字段,该字段链接到termSet),所有这些都是使用GUI完成的。 3. 手动添加一个或多个列表项,并选择一个术语以填充元数据字段(树结构深度约为4个节点)。 4. 基于此术语测试列表上的过滤 - 完美地工作。
现在,在此点上运行导入作业并将项目添加到另一个列表中。第二个列表还具有指向termSet的托管元数据字段。
1. 添加1000个条目没有问题。完美的工作。 2. 再添加1000个,也没有问题。 3. 在2000到4500个条目之间出现了问题,因为运行结束后,我现在处于以下情况: 列表1过滤不起作用。列表2过滤肯定不起作用。
确切地说,我选择一个顶级术语,它应该包含所有子项。在大量插入使用termset中的术语的列表项之前,它完美地实现了这一点。插入后,当我选择顶级术语时,我会得到一个空集,并且没有包含后代的按钮。
我正在调查这个隐藏列表,因为我已经注意到它与过滤有很大关系。过滤主要检查这个(尚不确定如何/为什么)。
还有其他人遇到这个问题吗?关于此问题的唯一文档来源是Microsoft Sharepoint Evangelical Blogs(营销),但没有详细解释为什么不起作用。
请帮忙解决。
1个回答

5

规则一:在处理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反射,注意当前的.ForceTreeDescendentsOff();

如果您需要从分类筛选器返回超过300条记录的情况,似乎无法做到。对于企业解决方案来说,这相当不错。


请问在SP2013和2016中是否有改进? - Mark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接