Я разрабатываю 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 отвечает за значение "Включено в индекс", но у меня не работает!
У вас есть идея сделать это? А что я делаю неправильно?
Заранее спасибо.