понедельник, 31 марта 2014 г.

Где хранить пользовательские данные или установки в SharePoint?

В SharePoint есть несколько вариантов хранения пользовательских данных, разной степени "правильности" и удобства.

Самый просто вариант - это, конечно, куки, которые в SharePoint, к и в любом веб-сайте никто не отменял. На всякий случай напомню как работать с куками в ASP.NET:

      //Записываем данные
      HttpCookie myCookie = new HttpCookie("MyKey");
      myCookie.Value = someData;
      myCookie.Expires = DateTime.Now.AddDays(1000);
      Response.Cookies.Add(myCookie);


      //Читаем данные
      if (Request.Cookies["MyKey"] != null)
      {
                    string someData = Request.Cookies["MyKey"].Value.ToString();
      }

      //Удаляем куку устанавливая куку с просроченным временем истечения. Данные нам в этом случае неважны, поэтому просто ""
      HttpCookie myCookie = new HttpCookie("MyKey");
      myCookie.Value = "";
      myCookie.Expires = DateTime.Now.AddDays(-1000);
      Response.Cookies.Add(myCookie);


Второй вариант - использования свойства Properties объекта SPWeb. Если решите использовать этот способ имейте ввиду, что все, что вы добавляете в Properties автоматически дублируется в свойстве AllProperties, но с ключом состоящим только из маленьких букв.
   // Добавляем свойство
   web.Properties["MyKey"] = value;
   web.Update();
   web.Properties.Update();
 
   // Читаем свойство

   var value = web.Properties["MyKey"];

   // Удаляем свойство
   web.AllProperties.Remove("mykey");
   web.Properties["MyKey"] = null;
   web.Update();
   web.Properties.Update();





Ни один из этих двух способов не дает вам возможности сохранять большие объекты, и снижает производительность за счет сериализации/десериализации в случае сложных объектов (которую вы должны делать сами) или боксинга/анбоксинга в случае простых типов.

Третий способ (самый, пожалуй, идеологически неправильный из всех) - хранение данных в файле.
     if (File.Exists(@"C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\projectWebPart.txt"))
     {                       
         using (StreamReader configFile = new StreamReader(@"C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\MyConfigFile.config"))
         {
           string[] myData = configFile.ReadLine().Split('=');
           //Если у нас в файле есть строка вида MyKey=blablabla
           //то в myDaya[0] у нас будет MyKey, а в myDaya[1] - blablabla
           //каждую строку можно запихнуть, допустим в List> и потом с эти работать                                       
         }
      }

Ну а самый идеологически правильный способ, хотя, менее удобный - использование SPPersistedObject. Про этот способ с подробно напишу отдельно завтра. :)

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

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