Продолжая серию статей о новых возможностях компонента Business Connectivity Services (BCS), доступных в SharePoint 2013, я хочу рассказать о такой возможности, как использование клиентской объектной модели для взаимодействия со службой Business Connectivity Services (BCS). В этой статье на примере мы рассмотрим, как с помощью клиентской объектной модели получить данные из внешней системы посредством вызова операции “Read List” (Finder метод) у внешнего типа контента (External Content Types). В качестве клиента будем использовать 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.
- На клиентской машине запустите Visual Studio
- Создайте новый проект
- В дереве типов проектов раскройте узел “Visual C#/Windows” и выберете проект “WPF Application”
- Введите имя проекта, например “ClientObjectModelBCSDemo” и нажмите “OK”.
- Убедитесь в том, что вы используете .NET Framework 4.0
- Для того чтобы иметь возможность использовать клиентскую объектную модель в нашем проекте, необходимо добавить ссылки на сборки: Microsoft.SharePoint.Client.dll и Microsoft.SharePoint.Client.Runtime.dll. Перед добавлением ссылок необходимо скопировать эти сборки на клиентскую машину с сервера SharePoint из папки :
%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\15\ISAPI. - У себя я скопировал сборки в папку проекта “D:\Work\!\ClientObjectModelBCSDemo\ClientObjectModelBCSDemo\dll” на клиентской машине и после этого добавил ссылки на них в Visual Studio.
- Для отображения данных из внешней системы, полученных через внешний тип контента, мы в клиентском WPF приложении добавим элемент управления ListBox. После добавления именуем его, например, externalDataListBox..
- Так же задайте следующие свойства для добавленного элемента управления ListBox в xaml файле:
<ListBox Margin="12" Name="externalDataListBox" FontFamily="Courier New" FontSize="14" ItemsSource="{Binding ExternalData}"/>
- Для работы с клиентской объектной моделью в код класса MainWindow добавьте следующие “using” директивы:
using Microsoft.SharePoint.Client; using Microsoft.BusinessData.MetadataModel; using Microsoft.BusinessData.MetadataModel.Collections;
- Добавьте следующие переменные в код класса MainWindow и корректно инициализируйте их:
private string userName = "<your user name>"; private string pwd = "<your password>"; private string domain = "<your domain>"; private string siteUrl = "<your site URL>"; private string entityName = "<Entity name>"; private string entityNamespace = "<Entity namespace>"; private string readListInstanceName = "<Instance name of Finder method>";
- Добавьте реализацию следующего метода, который будет вызывать операцию “Read List” (Finder метод) у внешнего типа контента и, таким образом, получать данные из внешней системы:
private void ExecuteFinderMethod() { // get client context ClientContext clientContext = new ClientContext(siteUrl); clientContext.Credentials = new System.Net.NetworkCredential(userName, pwd, domain); // retrieve a specified data source entity Entity entity = clientContext.Web.GetEntity(entityNamespace, entityName); LobSystem lobSystem = entity.GetLobSystem(); LobSystemInstanceCollection lobSystemInstanceCollection = lobSystem.GetLobSystemInstances(); clientContext.Load(lobSystemInstanceCollection); clientContext.ExecuteQuery(); LobSystemInstance lobSystemInstance = lobSystemInstanceCollection[0]; // get the filters for given name of method instance FilterCollection fCollection = entity.GetFilters(readListInstanceName); // get the Line of Business data EntityInstanceCollection result = entity.FindFiltered(fCollection, readListInstanceName, lobSystemInstance); clientContext.Load(result); clientContext.ExecuteQuery(); foreach (var r in result) { externalData.Add(string.Join(",", r.FieldValues.Values.Select(v => v.ToString().Trim().PadRight(20)))); } }
- Для того, чтобы отобразить полученные данные из внешней системы в элементе управления ListBox, добавьте такой код:
public MainWindow() { InitializeComponent(); DataContext = this; externalData = new List<string>(); ExecuteFinderMethod(); } private List<string> externalData; public List<string> ExternalData { get { return externalData; } }
- Полностью код в файле MainWindow.xaml.cs должен выглядеть примерно так:
- Запустите WPF приложение. “Вуаля!” – перед нами данные, полученные из внешней системы путем обращения к внешнему типу контента“Territory”.
- Теперь создайте внешний список на странице SharePoint, привязанный к тому же типу контента.
- Вы можете видеть, что во внешним списке отображены те же самые данные, что были получены путем использования клиентской объектной модели:
Целиком код WPF приложения-примера можно скачать здесь.
0 коммент.