вторник, 1 апреля 2014 г.

Где хранить пользовательские данные часть 2: про SPPersistedObject

Сегодня продолжу рассказ про то. где можно хранить всякие пользовательские установки в SharePoint. Сегодня - самый идеологически правильный вариант, к сожалению, требующий административных прав, SPPersistedObject. Ну, админские права - это не проблема. у нас же есть RunWithElevatedPrivilegies.

Но, вернемся к нашей теме. Что вообще такое этот SPPersistedObject? Вот краткая выдержка из MSDN:

Класс SPPersistedObject предоставляет базовый класс для всех объектов администрирования. 
Все поля с атрибутом Persisted к XML-сериализации и записывает XML blob в базу данных конфигурации. 

Так что, все что нам нужно - это создать свой класс наследующий у SPPersistedObject и содержащий нужные нам Persisted поля. Вот так, например:
       public class MySettingsClass: SPPersistedObject 
       {
            public MySettingsClass() {}

            public MySettingsClass(string name, SPPersistedObject parent, Guid id)  :  base(name, parent, id) { }
   
            [Persisted]
            public string MySomeProperty;

            [Persisted]
            public string MyOtherProperty;
      }

Итак, свой класс мы создали. Надо сказать, это был самый сложный этап. Дальше все делается парой строк кода. Давайте сохраним наши установки. Например, в контексте объекта webApplication:
     MySettingsClass settings = new MySettingsClass("my settings", SPContext.Current.Site.WebApplication, Guid.NewGuid());
     settings.MySomeProperty = "test";
     settings.MyOtherProperty = "test2";
     settings.Update();

Ну и теперь, получив из webApplication объект нашего класса мы можем восстановить наши установки.
     MySettingsClass settings = SPContext.Current.Site.WebApplication.GetChild< mysettingsclass >("my settings");
     string property1 = settings.MySomeProperty; // "test";
     string property2 = settings.MyOtherProperty  // "test2";

Как видите ничего сложного. Единственная проблема - то, что вы собираетесь хранить в своем классе должно поддерживать сериализацию.

Комментариев нет:

Отправить комментарий