Таксономия Sharepoint 2010 не фильтруется правильно - PullRequest
4 голосов
/ 10 февраля 2011

У меня странный пример с фильтрацией таксономии в Sharepoint 2010, но я могу скопировать его на все 3 сервера.

Вот как разыгрывается сценарий:

  1. Иметь полностью заполненный набор терминов со многими дочерними узлами (около 4500).
  2. Добавить 1 пользовательский список с 2 полями (заголовок и поле управляемых метаданных, это ссылка на termSet) - все это делается с помощью графического интерфейса пользователя.
  3. Добавьте элемент списка (или пару) вручную и выберите термин для заполнения поля метаданных (глубина в древовидной структуре составляет около 4 узлов вниз)
  4. Проверка фильтрации наСписок основан на этом термине - работает как шарм.

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

  1. добавьте 1000 предметов, без проблем.Работает как шарм
  2. добавьте еще 1000, без проблем.
  3. где-то около 2000 и 4500 предметов что-то пошло не так, потому что после завершения пробега я остался в следующем сценарии:1022 *

Фильтрация списка 1 не работает.Фильтрация списка 2, определенно не работает.

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

Я исследую этот скрытый список, который, как я заметил, имеет много общего с фильтрацией.Фильтрация в первую очередь проверяет это (пока точно не знаю, как и почему).

У кого-нибудь еще была эта проблема?Единственным источником документации по этому вопросу являются евангелические блоги Microsoft Sharepoint (маркетинг), нет подробных объяснений, почему это не работает.

Пожалуйста, помогите.

1 Ответ

5 голосов
/ 10 февраля 2011

Правило № 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 ();

Таким образом, если у вас есть ситуация, когда вам может понадобиться вернуть более 300 записей из фильтра таксономии, похоже, вы не сможете этого сделать. Довольно хорошо для корпоративного решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...