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

четверг, 29 ноября 2012 г.

Новые возможности Business Connectivity Services в SharePoint 2013 – Использование клиентской объектной модели (Client Object Model)

Продолжая серию статей о новых возможностях компонента Business Connectivity Services (BCS), доступных в SharePoint 2013, я хочу рассказать о такой возможности, как использование клиентской объектной модели для взаимодействия со службой Business Connectivity Services (BCS). В этой статье на примере мы рассмотрим, как с помощью клиентской объектной модели получить данные из внешней системы посредством вызова операции “Read List” (Finder метод) у внешнего типа контента (External Content Types). В качестве клиента будем использовать 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. На клиентской машине запустите Visual Studio
  4. Создайте новый проект
  5. В дереве типов проектов раскройте узел “Visual C#/Windows” и выберете проект “WPF Application”
  6. Введите имя проекта, например “ClientObjectModelBCSDemo” и нажмите “OK”.

    Создайте проект "ClientObjectModelBCSDemo"

  7. Убедитесь в том, что вы используете .NET Framework 4.0

    Используйте .NET Framework 4.0

  8. Для того чтобы иметь возможность использовать клиентскую объектную модель в нашем проекте, необходимо добавить ссылки на сборки: Microsoft.SharePoint.Client.dll и Microsoft.SharePoint.Client.Runtime.dll. Перед добавлением ссылок необходимо скопировать эти сборки на клиентскую машину с сервера SharePoint из папки :
    %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\15\ISAPI.

    Скопируйте Microsoft.SharePoint.Client.dll и Microsoft.SharePoint.Client.Runtime.dll

  9. У себя я скопировал сборки в папку проекта “D:\Work\!\ClientObjectModelBCSDemo\ClientObjectModelBCSDemo\dll” на клиентской машине и после этого добавил ссылки на них в Visual Studio.

    Добавьте ссылки на сборки клиентской объектной модели

  10. Для отображения данных из внешней системы, полученных через внешний тип контента, мы в клиентском WPF  приложении добавим элемент управления ListBox. После добавления именуем его, например, externalDataListBox..

    Добавьте элемент управления ListBox в клиентское WPF приложение

  11. Так же задайте следующие свойства для добавленного элемента управления ListBox в xaml файле:
    <ListBox Margin="12" Name="externalDataListBox" FontFamily="Courier New" FontSize="14" ItemsSource="{Binding ExternalData}"/>
  12. Для работы с клиентской объектной моделью в код класса MainWindow добавьте следующие “using” директивы:
    using Microsoft.SharePoint.Client;
    using Microsoft.BusinessData.MetadataModel;
    using Microsoft.BusinessData.MetadataModel.Collections;
  13. Добавьте следующие переменные в код класса 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>";
  14. Добавьте реализацию следующего метода, который будет вызывать операцию “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)))); 
      } 
    }
  15. Для того, чтобы отобразить полученные данные из внешней системы в элементе управления ListBox, добавьте такой код:
    public MainWindow() 
    { 
      InitializeComponent(); 
      DataContext = this; 
      externalData = new List<string>(); 
      ExecuteFinderMethod(); 
    }
    private List<string> externalData; 
    public List<string> ExternalData
    { 
      get { return externalData; } 
    }
  16. Полностью код в файле MainWindow.xaml.cs должен выглядеть примерно так:

    Код класса MainWindow

  17. Запустите WPF приложение. “Вуаля!” – перед нами данные, полученные из внешней системы путем обращения к внешнему типу контента“Territory”.

    Данные внешней системы, полученные с использованием клиентской объектной модели

  18. Теперь создайте внешний список на странице SharePoint, привязанный к тому же типу контента.

    Создайте внешний список

  19. Вы можете видеть, что во внешним списке отображены те же самые данные, что были получены путем использования клиентской объектной модели:

    Те же самые данные во внешнем списке

Целиком код 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