Блог Сергея Байдачного

Мой блог о технологиях

Archive for Февраль 2010

SharePoint 2010: Что нового? (часть 5) – Использование LINQ

3 комментария

Если Вы разрабатывали хотя бы одну простую веб-часть для SharePoint, то наверняка сталкивались с проблемой доступа к данным в списках. Чтобы выбрать данные из списка, приходилось формировать запросы на специальном языке CAML, который, в свою очередь, был слабо документирован и плохо поддавался изучению. В свою очередь, в SharePoint 2010, возможности списков значительно расширены, а значит, усложнились CAML-запросы. Но не стоит пугаться, так как с расширением возможностей списков, разработчикам стал доступен и новый механизм по выбору данных из списков – LINQ (Language Integrated Query).

Если Вы еще не сталкивались с LINQ, то, в двух словах, можно сказать, что LINQ представляет собой специальный механизм доступа к данным в любом хранилище. Данный механизм позволяет создавать запросы на языке, более приемлемом для C# или VB.NET программистов (С# и VB.NET соответственно), чем «родной» язык хранилища.

Работа LINQ технологии обеспечивается специальными провайдерами, которые преобразуют запросы на C# или VB.NET, в запросы на «родном» языке. В теории, этих провайдеров может быть любое количество, но на практике, существовало только три провайдера: LINQ to SQL, LINQ to XML, LINQ to Entity. Эти провайдеры обеспечивали доступ к данным в реляционных хранилищах, XML документах и динамических наборах объектов соответственно. SharePoint 2010 представляет новый провайдер – LINQ to SharePoint.

LINQ to SharePoint позволяет транслировать LINQ запросы в CAML, скрывая все детали от разработчика.

Чтобы использовать LINQ to SharePoint провайдер, Вам необходимо выполнить три шага:

· описать классы, объекты которых Вы будете использовать для хранения выбираемых данных;

· использовать DataContext класс из пространства имен Microsoft.SharePoint.Linq для получения ссылки на список, с которым Вы планируете работать;

· непосредственное использование LINQ для выбора данных из списка.

Рассмотрим последовательность описанных действий более детально.

Итак, первым делом необходимо описать классы, которые будут использоваться для работы с данными из списка. Эти классы должны включать:

· свойства, соответствующие колонкам списка, с которыми Вы собираетесь работать. Тут доступно 9 атрибутов, так каких как Association, Column, Choice, ContentType и др.;

· в зависимости от сложности колонок, могут понадобиться дополнительные типы: перечислимые типы или классы, описывающие списки, с которыми есть связки;

· необходимо предусмотреть механизм обновления данных: поведение при конкурентной работе.

Разработка такого набора классов может стать сложной задачей, а сами классы могут содержать ошибки. Поэтому, чтобы облегчить жизнь программисту, SharePoint 2010 поставляется вместе со специальной утилитой SPMetal. Утилита содержится в директории, подобной этой: C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN, и позволяет генерировать необходимые классы автоматически.

Вот пример использования утилиты:

spmetal /web:http://sbaydach64

    /namespace:sharePoint_Linq /code:SharePoint_Linq.cs

В данном случае, утилита выбирает информацию обо всех списках на сайте http://sbaydach64 и генерирует код на C#, куда включает все классы, необходимые для работы с этими списками.

Все сгенерированные классы помечаются ключевым словом partial, поэтому, если Вы хотите добавить свой код, то можете это сделать в другом файле, не трогая сгенерированный код.

На следующем этапе, Вам необходимо создать экземпляр класса DataContext и получить ссылку на один из списков:

DataContext data = new DataContext(“http://sbaydach64”);
 
EntityList<Contact> Contacts = data.GetList<Contact>("Contacts");
 

Если Вы использовали утилиту SPMetal, могли заметить, что она генерирует также производный класс от DataContext. Вы можете использовать сгенерированный класс для облегчения доступа к списку.

Наконец, остается выбрать данные, сформировав необходимый запрос:

var myContacts = from contact in Contacts
                      where contact.City == "Dnepropetrovsk"
                      select contact;

Я всегда считал LINQ абсолютно бесполезной технологией. В первую очередь это обосновывалось тем, что LINQ «приучал» разработчиков писать запросы в коде (ведь LINQ to SQL применяют наиболее часто). На мой взгляд, это неправильно, так как данный код сложно поддерживать и оптимизировать. Но, кажется, в данном случае, использование LINQ вполне оправдано.

Между тем, Вы можете продолжать использовать CAML, который должен обеспечить максимальную производительность.

Замечание. Использовать LINQ to SharePoint можно лишь на серверной стороне. Несмотря на то, что Silverlight уже поддерживает базовую реализацию LINQ, клиентских библиотек для SharePoint нет.

Реклама

Written by Sergiy Baydachnyy

04.02.2010 at 09:19

Опубликовано в SharePoint

Tagged with

Google Search vs. Bing Search

2 комментария

Проснувшись вечером 1-го января 2010 гола, я решил завести свой личный блог о технологиях. Так получилось, что весь месяц я писал только о Silverlight 4 и SharePoint 2010. Это связано с тем, что в январе я занимался исключительно этими технологиями, поэтому руки до других постов не доходили. Тем не менее, за месяц, мне удалось написать 21 статью и добиться 1500 посетителей.

Сегодня я решил проверить, насколько хорошо проиндексирован мой блог поисковыми машинами и попробовал ввести несколько запросов. Первый запрос, который я ввел, был «Блог Сергея Байдачного». Естественно, я ввел этот запрос в «родной» поисковой системе Bing, а потом попробовал в Google. Выводы делаем сами.

Нужно отметить, что три недели назад, я воспользовался специальной утилитой для Bing, и указал ссылку на мой сайт явно – как-то не очень помогло.

Written by Sergiy Baydachnyy

02.02.2010 at 10:55

Опубликовано в Microsoft

Tagged with ,

SharePoint 2010: еще немного о “песочнице”

with one comment

Если Вы разрабатываете решения для «песочницы» в Visual Studio 2010, то можете заметить, что редактор достаточно хорошо поддерживает систему IntelliSense, скрывая имена классов, которые не поддерживаются в «песочнице». Между тем, если Вы попытаетесь откомпилировать код, содержащий «запрещенные» классы, то код успешно откомпилируется. Это связано с тем, что проверка происходит не на этапе компиляции, а на этапе выполнения (ведь речь идет о Code Access Security, а CAS работает именно на этапе работы приложения).

Учитывая, что разработчик часто копирует уже готовые куски кода, на одну IntelliSense систему полагаться нельзя. Поэтому, чтобы застраховать разработчика от возможных ошибок на этапе кодирования, вместе с SharePoint 2010, поставляется специальная версия сборки Microsoft.SharePoint.dll, расположенная в директории C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\UserCode\assemblies. Отличие этой версии сборки от той, что располагается в папке ISAPI, состоит в том, что она содержит только классы, доступные в «песочнице». Поэтому, во время кодирования, Вы можете заменить ссылку на Microsoft.SharePoint.dll с обычной на специальную версию. Это обеспечит компиляцию кода, который будет гарантировано работать в «песочнице». Между тем, выполняя развертывание решения, ссылку нужно вернуть на обычный вариант сборки.

Written by Sergiy Baydachnyy

01.02.2010 at 12:05

Опубликовано в SharePoint

Tagged with