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

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

Archive for Февраль 12th, 2010

SharePoint 2010 и SilverLight: Client API

14 комментариев

В завершении темы по интеграции Silverlight и SharePoint 2010, рассмотрим возможность использования Client API, поставляемого с SharePoint.

В отличие от служб REST, Client API позволяет делать практически все: взаимодействовать с любыми объектами, создавать сайты, управлять процессами.

Чтобы использовать Client API для Silverlight, необходимо подключить две сборки: Microsoft.SharePoint.Client.SilverLight.dll и Microsoft.SharePoint.Client.SilverLight.Runtime.dll. Первая сборка отвечает за классы, описывающие объекты SharePoint, а вторая сборка берет на себя задачи, связанные с коммуникациями. Обе сборки находятся в папке C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\ClientBin.

Замечание. В Visual Studio 2010 beta 2 существует странная ошибка. Если Вы попытаетесь добавить описанные сборки по указанному пути, то Visual Studio сгенерирует ошибку. Поэтому скопируйте данные сборки в директорию Вашего проекта.

Модифицируем код нашего примера так, чтобы он использовал Client API. Приведу сразу готовый код:

ListItemCollection items=null;
 
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
    ClientContext context = new ClientContext("http://sbaydach64");
 
    Web myWeb=context.Web;
 
    List myListSP = myWeb.Lists.GetByTitle(curList);
 
    items = myListSP.GetItems(
        CamlQuery.CreateAllItemsQuery());
 
    context.Load(items);
    context.ExecuteQueryAsync(client_Completed, null);
}
 
private void client_Completed(object sender, 
    ClientRequestSucceededEventArgs e)
{
    System.Windows.Deployment.Current.Dispatcher.BeginInvoke(
    delegate() 
    {
        foreach (ListItem item in items)
        {
            myList.Items.Add(item.FieldValues["FileLeafRef"]);
        }
 
        myList.SelectedIndex = 0;
    }
    );
}

Основной класс, в коде выше, это ClientContext, который является единственным механизмом для получения доступа ко всем объектам SharePoint. Создав объект этого класса, разработчику требуется сформировать запрос. При формировании запроса, Вы можете ссылаться на любые свойства объектов, при условии, что не собираетесь их явно использовать. На этом этапе реальные свойства объектов еще не доступны.

Сформировав запрос, необходимо подготовить его к исполнению. Для этого и служит метод Load. Этот метод подготавливает контекст, к чтению всех необходимых объектов, которые используются для получения желаемого результата.

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

В отличие от OpenReadAsync, класса WebClient, метод ExecuteQueryAsync инициирует вызов метода, обрабатывающего результаты асинхронного вызова, НЕ в интерфейсном потоке. Поэтому, чтобы обновить интерфейс, необходимо инициировать вызов еще одного метода, но в интерфейсном потоке, предварительно получив и обработав данные. Этим и занимается объект Dispatcher.

Даже на первый взгляд, использование Client API значительно проще, чем работа с REST. Использование клиентских библиотек обладает гибкостью и универсальностью. При этом нужно помнить, что размер Вашего приложения увеличится примерно на 400 килобайт – таков размер дополнительных сборок.

Заключение

Как видно, Microsoft делает на Silverlight достаточно большую ставку. Это позволило привлечь достаточно ресурсов, чтобы позволить Silverlight использоваться не только на новых сайтах, но и в корпоративных Web-приложениях. А раз мы говорим о корпоративном секторе, то стоит вспомнить о возможности работы Silverlight-приложений вне браузера (с повышением полномочий). Эта возможность позволяет не просто устанавливать Silverlight-приложения на сторону клиента, но и обеспечить доступ к кэшу с данными, даже в отключенном режиме, что совсем не реализовано в SharePoint.

Нужно отметить, что в SharePoint 2007 также можно было интегрировать Silverlight-приложения, но для этого нужно было затратить больше усилий. Конечно, ни о каком клиентском API для SharePoint 2007 нельзя было и мечтать.

Реклама

Written by Sergiy Baydachnyy

12.02.2010 at 15:36

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

Tagged with ,