В этой статье на примере мы рассмотрим, как получить данные из внешнего списка и отобразить их в WPF приложении.
- Для успешного выполнения данного примера вам потребуется:
- Сервер с предустановленным Microsoft SharePoint 2013
- Клиент с предустановленной Microsoft Visual Studio Professional 2010 или 2012 (на клиенте нет необходимости иметь установленный SharePoint)
- Для начала создайте внешний тип контента (это можно сделать, например, как описано в этих примерах Creating an External Content Type with SharePoint Designer 2013 , How to: Create external content types for SQL Server in SharePoint 2013) на SharePoint сервере. Я создал внешний тип контента с именем Territory.
- В Central Administration щелкните на созданный внешний тип контента и запомните имена полей, которые нам понадобятся в дальнейшем. У меня поля называются "RegionID", "TerritoryDescription", "TerritoryID".
- Создайте внешний список на странице SharePoint, привязанный к этому внешнему типу контента.
- На странице во внешнем списке отобразятся данные из внешней системы.
- Для доступа к элементам внешнего списка через RESTful сервис мы будем использовать такой URL, который можно проверить в браузере http://<your site>/_api/web/lists/getbytitle('<имя внешнего списка>')/items (в моём случае URL выглядит так http://lyra/_api/web/lists/getbytitle('Territory')/items)
- Теперь давайте создадим WPF приложение, которое отобразит данные из внешнего списка используя сервис REST. Для этого на клиентской машине запустите Visual Studio
- Создайте новый проект
- В дереве типов проектов раскройте узел “Visual C#/Windows” и выберете проект “WPF Application”
- Введите имя проекта, например “RESTfulBCSDemo” и нажмите “OK”.
- Для отображения данных из внешней системы, полученных через внешний тип контента, мы в клиентском WPF приложении добавим элемент управления ListBox. После добавления именуем его, например, externalDataListBox.
- Так же задайте следующие свойства для добавленного элемента управления ListBox в xaml файле:
<ListBox Margin="12" Name="externalDataListBox" FontFamily="Courier New" FontSize="14" ItemsSource="{Binding ExternalData}"/>
- Для работы с клиентской объектной моделью в код класса MainWindow добавьте следующие “using” директивы:
using System.Net; using System.Xml.Linq;
- Добавьте следующие переменные в код класса 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>" });
- Добавьте реализацию следующего метода, который будет получать данные из внешнего списка
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); } } }
- Для того, чтобы отобразить полученные данные из внешней системы в элементе управления ListBox, добавьте такой код:
public MainWindow() { InitializeComponent(); DataContext = this; externalData = new List<string>(); PullDataFromExternalList(); } private List<string> externalData; public List<string> ExternalData { get { return externalData; } }
- Полностью код в файле MainWindow.xaml.cs должен выглядеть примерно так:
- Запустите WPF приложение. “Вуаля!” – перед нами данные, полученные из внешнего списка путем обращения к нему через REST сервис в WPF клиенте.
Целиком код WPF приложения-примера можно скачать здесь.
0 коммент.