Как обрабатывать неиспользуемые термины управляемых метаданных без WssId? - PullRequest
1 голос
/ 21 сентября 2010

Проблема

Мы загружаем (большое количество) файлов в SharePoint с помощью FrontPage RPC ( положить документы вызов). Насколько нам удалось выяснить, для установки значений полей таксономии с помощью этого протокола требуется их WssId .

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

Код

Вызов TaxonomyField.GetWssIdsOfTerm в приведенном ниже фрагменте кода просто не возвращает идентификатор для этих терминов.

SPSite site = new SPSite( "http://some.site.com/foo/bar" );
SPWeb web = site.OpenWeb();

TaxonomySession session = new TaxonomySession( site ); 
TermStore termStore = session.TermStores[new Guid( "3ead46e7-6bb2-4a54-8cf5-497fc7229697" )];
TermSet termSet = termStore.GetTermSet( new Guid( "f21ac592-5e51-49d0-88a8-50be7682de55" ) );
Guid termId = new Guid( "a40d53ed-a017-4fcd-a2f3-4c709272eee4" );

int[] wssIds = TaxonomyField.GetWssIdsOfTerm( site, termStore.Id, termSet.Id, termId, false, 1);

foreach( int wssId in wssIds )
{
    Console.WriteLine( wssId );
}

Мы также попытались напрямую запросить скрытый список таксономии с похожими результатами.

Крик о помощи

Буду признателен как за подтверждение, так и за советы о том, как это решить. Я вижу три возможных пути к решению:

  • Измените способ загрузки, либо загрузив термины другим способом, либо переключившись на другой протокол.
  • Запрос метаданных WssIds другим способом. Тот, который работает на неиспользованные термины.
  • Написать / найти инструмент для предварительного разрешения WssIds для всех терминов. Предложения о том, как сделать это элегантно, приветствуются.

1 Ответ

1 голос
/ 25 ноября 2010

установка значения WssID в -1 должна помочь вам.У меня была похожая проблема (копирование документов, содержащих поля метаданных) между двумя разными веб-приложениями.Я потратил много часов на решение странных проблем с метаданными.В конце концов, установка значения -1 решила все мои проблемы.Даже если GetWssIdsOfTerm возвращает значение, я использовал -1, и он работает правильно.Вероятно, есть некоторая базовая логика, которая позаботится о WssId.

Radek

...