HarePoint Explorer for SharePoint
 

Работа с хранимыми объектами

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 предоставляет целых три способа работы с ними:

  1. Доступ к родительскому объекту посредством свойства SPPersistedObject.Parent.
  2. Доступ к дочерним объектам посредством специального узла в дереве объектов – Persisted Children.
  3. Создание сценария для прямого доступа к хранимому объекту.

Поскольку первый и второй способы не нуждаются в особых комментариях, обратим внимание на третий способ. Он особенно важен ввиду того, что, как правило, именно он используется при разработке решений для 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 будет показан в новом окне браузера.