Делая SharePoint доступнее...

четверг, 31 января 2013 г.

Новые возможности Business Connectivity Services в SharePoint 2013 – Доступ ко внешним спискам через RESTful сервис

Одной из новых возможностей компонента Business Connectivity Services (BCS), доступных в SharePoint 2013,  является доступ ко внешним спискам через RESTful (Representational State Transfer) сервис.
RESTful сервис
В этой статье на примере мы рассмотрим, как получить данные из внешнего списка и отобразить их в WPF приложении.
  1. Для успешного выполнения данного примера вам потребуется:
    • Сервер с предустановленным Microsoft SharePoint 2013
    • Клиент с предустановленной Microsoft Visual Studio Professional 2010 или 2012 (на клиенте нет необходимости иметь установленный SharePoint)
  2. Для начала создайте внешний тип контента (это можно сделать, например, как описано в этих примерах Creating an External Content Type with SharePoint Designer 2013 , How to: Create external content types for SQL Server in SharePoint 2013) на SharePoint сервере. Я создал внешний тип контента с именем Territory. Создайте внешний тип контента
  3. В Central Administration щелкните на созданный внешний тип контента и запомните имена полей, которые нам понадобятся в дальнейшем. У меня поля называются "RegionID", "TerritoryDescription", "TerritoryID". Поля внешнего типа контента
  4. Создайте внешний список на странице SharePoint, привязанный к этому внешнему типу контента.
    Создайте внешний список
  5. На странице во внешнем списке отобразятся данные из внешней системы. Данные из внешней системы во внешнем списке
  6. Для доступа к элементам внешнего списка через RESTful сервис мы будем использовать такой URL, который можно проверить в браузере  http://<your site>/_api/web/lists/getbytitle('<имя внешнего списка>')/items (в моём случае URL выглядит так http://lyra/_api/web/lists/getbytitle('Territory')/items)
  7. Теперь давайте создадим WPF приложение, которое отобразит данные из внешнего списка используя сервис REST. Для этого на клиентской машине запустите Visual Studio
  8. Создайте новый проект
  9. В дереве типов проектов раскройте узел “Visual C#/Windows” и выберете проект “WPF Application”
  10. Введите имя проекта, например “RESTfulBCSDemo” и нажмите “OK”. Создайте проект "RESTfulBCSDemo"
  11. Для отображения данных из внешней системы, полученных через внешний тип контента, мы в клиентском WPF приложении добавим элемент управления ListBox. После добавления именуем его, например, externalDataListBox. Добавьте элемент управления ListBox в клиентское WPF приложение
  12. Так же задайте следующие свойства для добавленного элемента управления ListBox в xaml файле:
    <ListBox Margin="12" Name="externalDataListBox" FontFamily="Courier New" FontSize="14" ItemsSource="{Binding ExternalData}"/>
  13. Для работы с клиентской объектной моделью в код класса MainWindow добавьте следующие “using” директивы:
    using System.Net;
    using System.Xml.Linq;
  14. Добавьте следующие переменные в код класса MainWindow и корректно инициализируйте их:
    private string userName = "<your user name>";
    private string pwd = "<your password>";
    private string domain = "<your domain>";
    private string requestUrl = "<URL endpoint to retrieve items within the external list>";
    private List<string> columnNames = new List<string>(new string[] { "<your column1>", "<your column2>", "<etc>" });
  15. Добавьте реализацию следующего метода, который будет получать данные из внешнего списка
    private void PullDataFromExternalList() 
    { 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUrl); 
      request.Credentials = new CredentialCache { { new Uri(requestUrl), "NTLM", new NetworkCredential(userName, pwd, domain) } }; 
      request.Accept = "application/atom+xml"; 
      using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) 
      { 
        if (response.StatusCode != HttpStatusCode.OK) 
          throw new Exception(String.Format(
          "Server error (HTTP {0}: {1}).", 
          response.StatusCode, 
          response.StatusDescription)); 
        XDocument doc = XDocument.Load(response.GetResponseStream()); 
        XNamespace d = "http://schemas.microsoft.com/ado/2007/08/dataservices";
        XNamespace m = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";
        XNamespace atom = "http://www.w3.org/2005/Atom";
        var columnNamesWithNamespace = columnNames.Select(c => d + c);
        foreach (var entity in doc.Descendants(atom + "entry")) 
        { 
          string s = string.Empty; 
          foreach (var property in entity.Element(atom + "content").Element(m + "properties").Elements().Where(p => 
                  columnNamesWithNamespace.Contains(p.Name))) 
          { 
            s += property.Value.Trim().PadRight(20) + "\t"; 
          } 
          externalData.Add(s); 
        } 
      } 
    }
  16. Для того, чтобы отобразить полученные данные из внешней системы в элементе управления ListBox, добавьте такой код:
    public MainWindow() 
    { 
      InitializeComponent(); 
      DataContext = this; 
      externalData = new List<string>(); 
      PullDataFromExternalList(); 
    }
    private List<string> externalData; 
    public List<string> ExternalData
    { 
      get { return externalData; } 
    }
  17. Полностью код в файле MainWindow.xaml.cs должен выглядеть примерно так:
    Код класса MainWindow
  18. Запустите WPF приложение. “Вуаля!” – перед нами данные, полученные из внешнего списка путем обращения к нему через REST сервис в WPF клиенте.
    Данные из внешнего списка, полученные через RESTful сервис
    Целиком код WPF приложения-примера можно скачать здесь.
Поделиться
  • Опубликовать в Facebook
  • Опубликовать в Twitter
  • Share to Google+
  • Написать об этом в блоге
  • Отправить по e-mail
  • More...

0 коммент.

:) :-) :)) =)) :( :-( :(( :d :-d @-) :p :o :>) (o) [-( :-? (p) :-s (m) 8-) :-t :-b b-( :-# =p~ :-$ (b) (f) x-) (k) (h) (c) cheer

 
© 2012 Блог Дмитрия Калошина
Designed by BlogThietKe Cooperated with Duy Pham
Released under Creative Commons 3.0 CC BY-NC 3.0
Posts RSSComments RSS
Back to top