Установить значение CrawlProperty «Включено в индекс» программно (Sharepoint 2007) - PullRequest
1 голос
/ 19 января 2012

Я разрабатываю Sharepoint Search с собственным источником контента. И у меня есть свои свойства сканирования и мои управляемые свойства и сопоставление между ними соответственно. Также у меня есть динамические свойства, например пользователь может изменить набор свойств для сканирования, поэтому я делаю это во время выполнения из Центра администрирования Sharepoint. Я использую следующий код для этого:

    private static void CreateProperty(string propertyName, Category category, ManagedPropertyCollection managedProperties)
    {
        var crawledProperty = category.CreateCrawledProperty(propertyName, false, Constants.CategoryId, 31);
        crawledProperty.IsMappedToContents = true;
        SetMapping(crawledProperty, managedProperties);
        crawledProperty.Update();
    }

    private static void SetMapping(CrawledProperty cProp, ManagedPropertyCollection managedProperties)
    {
        ManagedProperty mProp = managedProperties.Create(cProp.Name, ManagedDataType.Text);
        mProp.EnabledForScoping = true;
        Mapping newMapping = new Mapping(cProp.Propset, cProp.Name, cProp.VariantType, mProp.PID);
        MappingCollection mappings = mProp.GetMappings();
        mappings.Add(newMapping);
        mProp.SetMappings(mappings);
        mProp.EnabledForScoping = true;
    }

Статические свойства добавляются при установке, динамические свойства добавляются вручную в центре администрирования. Я использую тот же код для добавления свойств при установке и настройке вручную в центре администрирования.

Проблема в значении флага Sharepoint «Включено в индекс» для свойств сканирования. В случае, когда установка завершена, значение этого флага равно TRUE (да) для всех статических свойств сканирования. В противном случае для динамических свойств этот флаг равен FALSE (нет). Мне нужно всегда проверять флаг «Включено в индекс».

Как я знаю, свойство IsMappedToContents класса CrawlProperty отвечает за значение "Включено в индекс", но у меня не работает!

У вас есть идея сделать это? А что я делаю неправильно?

Заранее спасибо.

1 Ответ

2 голосов
/ 20 января 2012

Я обнаружил проблему.Это глупые трюки sharepoint!Основная проблема в том, что sharepoint имеет кеш экземпляров объектов.Давайте посмотрим, я написал пример, как программно обновить значение свойства IsMappedToContents для сканирования.

foreach (CrawledProperty crawledProperty in category.GetAllCrawledProperties())
{
   crawledProperty.IsMappedToContents = true;
   crawledProperty.Update();
}

Вы ДОЛЖНЫ использовать свежий экземпляр переменной crawledProperty!Если вы напишите что-то вроде этого:

CrawledProperty crawledProperty = category.CreateCrawledProperty(...);
crawledProperty.IsMappedToContents = true;
crawledProperty.Update();

Вы НЕ УКАЗАНЫ!

Итак, всегда используйте category.GetAllCrawledProperties () экземпляры просканированных свойств для изменения этого свойства.1011 *

PS: IsMappedToContents отвечает за флажок «Включено в индекс» в Sharepoint. * PS2: этот материал работает с Sharepoint 2007, так как я знаю, что Sharepoint 2010 не имеет подобных проблемс экземплярами кэширования! *

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