Windows SharePoint Services 3.0 и Microsoft Office SharePoint Server 2007 содержат массу всевозможных настроек. Сюда входят настройки разнообразных сервисов, строки соединения с базами данных, параметры индексирования, административные настройки - этот список можно продолжать очень долго.
Хранение большинства настроек SharePoint реализовано очень элегантно – разработчики воспользовались тем фактом, что объекты .NET можно очень просто сериализовать и десериализовать. Полученный в результате сериализации массив данных сохраняется в таблицу Objects, конфигурационной базы данные (как правило, ее имя начинается на SharePoint_Config_). При необходимости восстановления состояния сохраненного объекта, сохраненные данные считываются из указанной таблицы и используются для десериализации.
Все типы, сохраняемые в конфигурационной БД, унаследованы от типа Microsoft.SharePoint.Administration.SPPersistedObject. Причем эти типы могут быть разработаны как самой компанией Microsoft, так и любыми другими сторонними разработчиками.
Хранимые объекты образуют иерархию. В основании этой иерархии находится объект типа SPFarm – объект фермы SharePoint. В этом несложно убедиться, выбрать из таблицы Objects объекты, у которых Id = ParentId. По этой причине, иерархию хранимых объектов всегда можно представить аналогично реестру Windows или иерархии объектов Active Directory.
В браузере, все объекты, унаследованные от SPPersistedObject, помечены значком .
В виду особой важности этого типа объектов, HarePoint Explorer for SharePoint предоставляет целых три способа работы с ними:
Поскольку первый и второй способы не нуждаются в особых комментариях, обратим внимание на третий способ. Он особенно важен ввиду того, что, как правило, именно он используется при разработке решений для SharePoint.
Предположим, что нам нужно узнать, какая именно папка используется для хранения log-файлов. Выполнив несложный поиск по документации Windows SharePoint Services 3.0, входящей в состав Windows SharePoint Services 3.0 SDK, мы находим, что путь к папке log-файлов, хранится в свойстве LogLocation класса SPDiagnosticsService. Там же мы обнаруживаем, что класс SPDiagnosticsServices имеет конструктор вида:
SPDiagnosticsService (String, SPFarm)
Конструктор подобного вида имеют все хранимые объекты SharePoint. Поскольку объект SPDiagnosticsServices в ферме SharePoint может быть только один, то параметр name для его создания не нужен – его можно указать равным "". Второй же параметр – parent, является принципиально необходимым – его мы возьмем из браузера объектов, поставив флаг на объекте типа SPFarm.
После установки флага на объекте типа SPFarm и создания нового окна сценариев программа сгенерирует следующий код сценария:
C# using System; using System.Collections.Generic; using System.Diagnostics; using System.Text; using MAPILab.SharePoint.Explorer.CodeForm; using MAPILab.SharePoint.Explorer.Utilities.ScriptRunner; public class Tester { static void Main( Microsoft.SharePoint.Administration.SPFarm sPFarmNameSharePoint1 ,MAPILab.SharePoint.Explorer.CodeForm.MLCodeForm thisForm ,MAPILab.SharePoint.Explorer.Utilities.ScriptRunner.MLBrowser browser ) { // Output browser configuration //browser.Text = "Browser window"; //browser.DisplayMode = MAPILab.SharePoint.Explorer.Utilities.ScriptRunner.DisplayMode.Expanded; browser.ReturnValue = null; } }
Visual Basic Imports System Imports System.Collections.Generic Imports System.Diagnostics Imports System.Text Imports MAPILab.SharePoint.Explorer.CodeForm Imports MAPILab.SharePoint.Explorer.Utilities.ScriptRunner Public Class Tester Shared Sub Main(ByVal sPFarmNameSharePoint1 As Microsoft.SharePoint.Administration.SPFarm, ByVal thisForm As MAPILab.SharePoint.Explorer.CodeForm.MLCodeForm, ByVal browser As MAPILab.SharePoint.Explorer.Utilities.ScriptRunner.MLBrowser) ' Output browser configuration 'browser.Text = "Browser window" 'browser.DisplayMode = MAPILab.SharePoint.Explorer.Utilities.ScriptRunner.DisplayMode.Expanded browser.ReturnValue = Nothing End Sub End Class
Модифицируем его таким образом, чтобы при его выполнении был создан объект SPDiagnosticsServices, значение свойства LogLocation было помещено в поле вывода, а сам метод main вернул созданный объект для дальнейшего изучения:
C# using System; using System.Collections.Generic; using System.Diagnostics; using System.Text; using MAPILab.SharePoint.Explorer.CodeForm; using MAPILab.SharePoint.Explorer.Utilities.ScriptRunner; using Microsoft.SharePoint.Administration; public class Tester { static void Main( Microsoft.SharePoint.Administration.SPFarm sPFarmNameSharePoint1 ,MAPILab.SharePoint.Explorer.CodeForm.MLCodeForm thisForm ,MAPILab.SharePoint.Explorer.Utilities.ScriptRunner.MLBrowser browser ) { // Create new SPDiagnosticsService object SPDiagnosticsService diagService = new SPDiagnosticsService("", sPFarmNameSharePoint1); // Output log-files location Debug.Print("Log-files store: {0}", diagService.LogLocation); // Output browser configuration //browser.Text = "Browser window"; //browser.DisplayMode = MAPILab.SharePoint.Explorer.Utilities.ScriptRunner.DisplayMode.Expanded; browser.ReturnValue = diagService; } }
Visual Basic Imports System Imports System.Collections.Generic Imports System.Diagnostics Imports System.Text Imports MAPILab.SharePoint.Explorer.CodeForm Imports MAPILab.SharePoint.Explorer.Utilities.ScriptRunner Imports Microsoft.SharePoint.Administration Public Class Tester Shared Sub Main(ByVal sPFarmNameSharePoint1 As Microsoft.SharePoint.Administration.SPFarm, ByVal thisForm As MAPILab.SharePoint.Explorer.CodeForm.MLCodeForm, ByVal browser As MAPILab.SharePoint.Explorer.Utilities.ScriptRunner.MLBrowser) ' Create new SPDiagnosticsService object Dim diagService As SPDiagnosticsService = new SPDiagnosticsService("", sPFarmNameSharePoint1) ' Output log-files location Debug.Print("Log-files store: {0}", diagService.LogLocation) ' Output browser configuration 'browser.Text = "Browser window" 'browser.DisplayMode = MAPILab.SharePoint.Explorer.Utilities.ScriptRunner.DisplayMode.Expanded browser.ReturnValue = diagService End Sub End Class
В результате выполнения этого сценария, в поле вывода будет помещена следующая информация
Running method main... Log-files store: C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\LOGS\ Compile complete -- 0 errors, 0 warnings Operation complete!
После этого, сам объект diagService будет показан в новом окне браузера.