Получить имя связанного поставщика общих услуг?
-
09-06-2019 - |
Вопрос
Как программно получить имя поставщика общих служб, связанного с конкретным веб-приложением Sharepoint?
У меня есть индивидуальное решение, которое должно:
- Перечислите все веб-приложения, в которых он развернут.
- Определите поставщика общих служб, с которым связано каждое из веб-приложений.
- Доступ к каталогу бизнес-данных, установленному на SSP, для получения некоторых данных.
- Перебрать все семейства веб-сайтов в этих веб-приложениях.
- Выполнение различных задач внутри семейств сайтов в соответствии с данными.
С пунктами 1, 3, 4 и 5 я разобрался, а вот 2 несколько хлопотно.Я хочу избежать жесткого кодирования имени SSP где-либо и не требовать от администратора фермы ручного редактирования файла конфигурации.Вся необходимая мне информация находится в базе данных конфигурации Sharepoint, мне просто нужно знать, как получить к ней доступ через объектную модель.
Решение
К сожалению, я не знаю поддерживаемого способа, которым это можно сделать.Соответствующий класс — SharedResourceProvider в пространстве имен Microsoft.Office.Server.Administration в библиотеке Microsoft.Office.Server DLL.Он помечен как внутренний, поэтому предварительное размышление:
SharedResourceProvider sharedResourceProvider = ServerContext.GetContext(SPContext.Current.Site).SharedResourceProvider;
string sspName = sharedResourceProvider.Name;
Пост-рефлексия:
ServerContext sc = ServerContext.GetContext(SPContext.Current.Site);
PropertyInfo srpProp = sc.GetType().GetProperty(
"SharedResourceProvider", BindingFlags.NonPublic | BindingFlags.Instance);
object srp = srpProp.GetValue(sc, null);
PropertyInfo srpNameProp = srp.GetType().GetProperty(
"Name", BindingFlags.Public | BindingFlags.Instance);
string sspName = (string)srpNameProp.GetValue(srp, null);
Альтернативой может быть написание SQL-запроса к базе данных конфигурации, что не рекомендуется.