tag:blogger.com,1999:blog-72101927784164127192024-03-08T12:47:53.628+03:00Блог Дмитрия КалошинаДелая SharePoint доступнее...Anonymoushttp://www.blogger.com/profile/13880855041238399963noreply@blogger.comBlogger6125tag:blogger.com,1999:blog-7210192778416412719.post-3495296948748166902013-03-31T20:11:00.001+04:002013-04-11T21:16:10.796+04:00Как изменить имена полей внешнего списка и имена полей редактируемого элемента внешнего списка<p><font size="2">Достаточно часто при создании внешнего списка есть необходимость изменить имена его столбцов впредставлении. В этом примере я хочу показать, как это сделать, а так же рассказать об особенностях изменения имени столбца, который связан ассоциацией с другим внешним типом контента.</font></p> <ol> <li><font size="2">Для успешного выполнения данного примера вам потребуется: </font> <ul> <li><font size="2">Microsoft SharePoint 2013 </font></li> <li><font size="2">SharePoint Designer 2013</font> </li> <li><font size="2">Сервер MS SQL с тестовой базой данных(в этом примере я буду использовать вот эту БД </font><a href="http://northwinddatabase.codeplex.com/" target="_blank"><font size="2">NorthWind sample database</font></a><font size="2"> )</font> </li> <li><font size="2">Две связанные таблицы (“one-to-many”) </font></li> </ul> </li> <li><font size="2">Откройте SharePoint Designer и создайте в нем два внешних типа контента со всеми CRUD операциями. У меня это будут Region и Territory, которые соответствуют таблицам из БД MS SQL dbo.Region и dbo.Territories.</font> </li> <li><font size="2">Создайте связь между ними в SharePoint Designer.</font> <p><a href="http://lh5.ggpht.com/-GlH9L20QVP4/UWbtujVMC1I/AAAAAAAAAkw/0iVEO8TE7lA/s1600-h/3%25255B3%25255D.png" target="_blank"><img title="Создайте связь между внешними типами контента" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Создайте связь между внешними типами контента" src="http://lh6.ggpht.com/-O3Lsv83N404/UWbtwts1B3I/AAAAAAAAAk4/DjaXfJKIlOM/3_thumb%25255B1%25255D.png?imgmax=800" width="244" height="100" /></a> </p> </li> <li><font size="2">На странице SharePoint создайте внешний список для внешнего типа контента со связью. В моем случае – это Territory. Вы видите, что имена столбцов внешнего списка такие же, как и имена полей в соответствующей таблице в базе данных.</font> <p> <a href="http://lh5.ggpht.com/-_9xBiG9RsHM/UWbtyzbj2qI/AAAAAAAAAlA/q46uHrUexKY/s1600-h/4%25255B4%25255D.png" target="_blank"><img title="Имена столбцов внешнего списка" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Имена столбцов внешнего списка" src="http://lh6.ggpht.com/-oprxYdfnEqI/UWbt09mAiKI/AAAAAAAAAlI/Lmb_X2Ilj6g/4_thumb%25255B2%25255D.png?imgmax=800" width="216" height="242" /></a> </p> </li> <li><font size="2">Если вы зайдете в просмотр или редактирование элемента внешнего списка, то увидите такие же имена полей, за исключением имени поля, который связан ассоциацией. Имя этого поля отличается от имени столбца в представлении списка. У меня это имя поля Region, а в представлении списка имя столбца RegionID.</font> <p> <a href="http://lh4.ggpht.com/-kevG3frAJaM/UWbt2trLnWI/AAAAAAAAAlQ/cnnx5Jh6Wr0/s1600-h/5%25255B3%25255D.png" target="_blank"><img title="Имена полей элементов внешнего списка" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Имена полей элементов внешнего списка" src="http://lh6.ggpht.com/-fFegaRNXwI0/UWbt34FcX3I/AAAAAAAAAlY/tFUcD9h11i0/5_thumb%25255B1%25255D.png?imgmax=800" width="244" height="150" /></a> </p> </li> <li><font size="2">Для того, чтобы изменить имена столбцов в представлении внешнего списка, нужно открыть в SharePoint Designer у внешнего типа контента Territory операцию “Чтение элементов”. Перейти в закладку “Возвращаемый параметр” и у всех элементов поменять отображаемое имя на то, что вы хотели бы видеть во внешнем списке. Сохраните сделанные изменения.</font> <p><a href="http://lh3.ggpht.com/-Iz6vG63R6oM/UWbt5DW8eKI/AAAAAAAAAlg/dd8IWhFEHEk/s1600-h/6%25255B4%25255D.png" target="_blank"><img title="Возвращаемый параметр операции “Чтение элементов” " style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Возвращаемый параметр операции “Чтение элементов” " src="http://lh3.ggpht.com/-TIQcKGIliKk/UWbt6UPTjrI/AAAAAAAAAlo/1z8i86TXtzE/6_thumb%25255B2%25255D.png?imgmax=800" width="244" height="159" /></a> </p> </li> <li><font size="2">Обновите существующий внешний список. Вы увидите, что имена столбцов изменились.</font> <p> <a href="http://lh3.ggpht.com/-Ow4FVSChUKA/UWbt7WDbdEI/AAAAAAAAAlw/koD-kwvEy-s/s1600-h/7%25255B3%25255D.png" target="_blank"><img title="Изменённые имена столбцов внешнего списка" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Изменённые имена столбцов внешнего списка" src="http://lh5.ggpht.com/-XY3PM3aW_SA/UWbt8kqgcdI/AAAAAAAAAl4/dHYRTttQH-E/7_thumb%25255B1%25255D.png?imgmax=800" width="244" height="213" /></a> </p> </li> <li><font size="2">Но если вы зайдете в просмотр или редактирование элемента, то заметите, что поле, которое связано ассоциацией не изменилось.</font> <p> <a href="http://lh4.ggpht.com/-G28HPxnstk8/UWbt9hXjYqI/AAAAAAAAAmA/ziV6dBUeC80/s1600-h/8%25255B3%25255D.png" target="_blank"><img title="Поле со связью не изменилось в элементе внешнего списка" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Поле со связью не изменилось в элементе внешнего списка" src="http://lh5.ggpht.com/-E4GaBadeMW8/UWbt-9I3GpI/AAAAAAAAAmI/GWYLtE9q_x4/8_thumb%25255B1%25255D.png?imgmax=800" width="244" height="133" /></a> </p> </li> <li><font size="2">Для изменении этого имени надо в SharePoint Designer открыть второй внешний тип контента Region и изменить его отображаемое имя. Сохраните изменения.</font> <p> <a href="http://lh6.ggpht.com/-yY6PED14FSE/UWbt_1e08YI/AAAAAAAAAmQ/n4uW9sDyp9g/s1600-h/9%25255B3%25255D.png" target="_blank"><img title="Внешний тип контента в SharePoint Designer" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Внешний тип контента в SharePoint Designer" src="http://lh4.ggpht.com/-vGdFcKH0VUk/UWbuBIltj3I/AAAAAAAAAmY/uml4iSEqMu0/9_thumb%25255B1%25255D.png?imgmax=800" width="244" height="200" /></a> </p> </li> <li><font size="2">После этого обновите внешний список, откройте элемент на просмотр и вы увидите, что поле изменилось на то, что вы указали.</font> <p> <a href="http://lh5.ggpht.com/-Nm-T9OhtXAg/UWbuCAZ-aiI/AAAAAAAAAmg/vx4HS3MgGT0/s1600-h/10%25255B3%25255D.png" target="_blank"><img title="Изменённые имена полей элементов внешнего списка" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Изменённые имена полей элементов внешнего списка" src="http://lh5.ggpht.com/-B3qyd-cR0iI/UWbuDJ629pI/AAAAAAAAAmo/4twBIIZqSns/10_thumb%25255B1%25255D.png?imgmax=800" width="244" height="145" /></a>> </p> </li> </ol> Anonymoushttp://www.blogger.com/profile/13880855041238399963noreply@blogger.com0tag:blogger.com,1999:blog-7210192778416412719.post-309965390057604722013-02-28T00:08:00.001+04:002013-03-11T00:02:59.145+04:00Новые возможности Business Connectivity Services в SharePoint 2013 – Изолированные Внешние Типы Контента внутри приложений<p>Одной из новых возможностей компонента Business Connectivity Services (службы Подключения к Бизнес-Данным), доступных в SharePoint 2013,  является создание Внешних Типов Контента уровня приложений.  Другими словами область видимости BDC модели может быть ограничена приложением и это избавляет от необходимости разворачивать внешний тип контента на уровне фермы и соответственно вовлекать в этот процесс администратора для доступа к службе подключения к бизнес-данным. Внешние типы контента уровня фермы превосходно справлялись со своими функциями для SharePoint решений уровня фермы, но такой подход абсолютно неприменим для приложений в SharePoint 2013 из-за их изолированности. Таким образом другая причина по которым в SharePoint 2013 били введены внешние типы контента уровня приложений – это предоставить возможность доступа ко внешним источникам данным из автономных приложений. В приложениях SharePoint 2013 BDC модель хранится в библиотеке документов, а не в хранилище метаданных службы подключения к бизнес-данным. Когда приложение запускается SharePoint использует FileBackedMetdataCatalog для того чтобы загрузить модель в среде подключения к бизнес-данным. Затем к этой модели имеют доступ внешние списки, которые находятся внутри приложения. Данная среда подключения к бизнес-данным может работать с внешними типами контента, которые основаны на MS SQL, WCF/Web/OData сервисах. Custom connector (настраиваемый коннектор ) и .net assembly connector (коннектор .net сборки) не поддерживаются данной средой подключения к бизнес-данным и следовательно недоступны в приложениях.</p> <p>Описание примера, как создать, внешний тип контента внутри приложения можно посмотреть вот здесь <a href="http://dkaloshin.blogspot.ru/2012/10/business-connectivity-services.html" target="_blank">Новые возможности Business Connectivity Services в SharePoint 2013 – Создание внешнего типа контента на основе источника OData</a><font color="#0072c6"></font>. После создания приложения откройте файл Element.xml, в котором декларировано создание экземпляра внешнего списка,  и в нем вы сможете увидеть свойство <span><span class="input">MetadataCatalogFileName, через которое задается имя файла BDC модели, содержащей в себе описание внешнего типа контента. </span></span></p> <p><span><span class="input"><a href="http://lh3.ggpht.com/-ohhTpHc7cos/UTzmxIs2njI/AAAAAAAAAeo/d7IiLLYc300/s1600-h/1%25255B3%25255D.png" target="_blank"><img title="Свойство MetadataCatalogFileName" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Свойство MetadataCatalogFileName" src="http://lh3.ggpht.com/-f1a8qiHZeWY/UTzmx3Mb-kI/AAAAAAAAAew/lICNlnVH508/1_thumb%25255B1%25255D.png?imgmax=800" width="244" height="108" /></a></span></span></p> <p><span><span class="input">Путь к файлу BDC модели в  WSP пакете содержится уже в другом файле  Element.xml. Одно важное замечание – одно SharePoint приложение может содержать только одну BDC модель. </span></span></p> <p><span><span class="input"><a href="http://lh6.ggpht.com/-jjcY2gqB608/UTzmyjfL_NI/AAAAAAAAAe4/162bxXJ2lC8/s1600-h/2%25255B4%25255D.png" target="_blank"><img title="Путь к файлу BDC модели" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Путь к файлу BDC модели" src="http://lh6.ggpht.com/-o0BfA_LMEeA/UTzmzhqTRzI/AAAAAAAAAfA/HwQnFHeJz2A/2_thumb%25255B2%25255D.png?imgmax=800" width="244" height="125" /></a></span></span></p> <p><span><span class="input">Если мы установим наше приложение, то созданную в нем BDC модель нельзя будет использовать во внешних списках уровня фермы. К примеру, если попытаться создать такой список, то возможности для выбора этой модели у нас не будет. </span></span></p> <p><span><span class="input"><a href="http://lh4.ggpht.com/-UeYiFLmuK4Q/UTzm0HpPQYI/AAAAAAAAAfI/VSsMMqvCqDo/s1600-h/3%25255B3%25255D.png" target="_blank"><img title="Внешние типы контента уровня фермы отсутствуют" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Внешние типы контента уровня фермы отсутствуют" src="http://lh6.ggpht.com/-k6pCLExW3ok/UTzm09W-puI/AAAAAAAAAfQ/eOUhhigYYeo/3_thumb%25255B1%25255D.png?imgmax=800" width="244" height="68" /></a></span></span></p> <p><span><span class="input">Так же если зайти в службу подключения к бизнес-данным в центре администрирования, то и там мы увидим, что развернутая нами BDC модель уровня приложения не отображается.</span></span></p> <p><span><span class="input"><a href="http://lh3.ggpht.com/-PneWDvr9uSI/UTzm1aJhQMI/AAAAAAAAAfY/njI4j7fE5P8/s1600-h/4%25255B3%25255D.png" target="_blank"><img title="BDC модель в центре администрирования не отображается" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="BDC модель в центре администрирования не отображается" src="http://lh6.ggpht.com/-U4jX66RN3xc/UTzm2fUYdHI/AAAAAAAAAfg/beYXHrjMYfM/4_thumb%25255B1%25255D.png?imgmax=800" width="244" height="66" /></a></span></span></p> <p><span><span class="input">Что же нам делать, если мы хотим созданную модель использовать, к примеру, во внешних списках уровня фермы. Это желание достаточно естественное, так как в настоящее время в SharePoint дизайнере нет поддержки источников OData для внешних типов контента и, так же, в Visual Studio нет инструментария для создания BDC моделей уровня фермы. Поэтому и встает вопрос, как созданную BDC модель уровня приложения для источника OData  превратить в BDC модель уровня фермы. Ответ – очень просто. Для этого для начала правой кнопкой мыши кликните на ваш проект и затем выберете пункт “Publish”. </span></span></p> <p><span><span class="input"><a href="http://lh6.ggpht.com/-gVLUM4hs4Zs/UTzm3Kvp1HI/AAAAAAAAAfo/O5q2CFov1E0/s1600-h/5%25255B6%25255D.png" target="_blank"><img title="Опубликовать SharePoint приложение" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Опубликовать SharePoint приложение" src="http://lh5.ggpht.com/-L6qrMZbsweQ/UTzm31hdtGI/AAAAAAAAAfw/87lZPXd_IJQ/5_thumb%25255B4%25255D.png?imgmax=800" width="244" height="236" /></a></span></span></p> <p><span><span class="input">Найдите сгенерированную BDC модель, которая будет находится в папке pkg. В моем случае файл BDCMetadata.bdcm находится тут “ODataECTDemo\ODataECTDemo\pkg\Debug\ODataECTDemo\ODataECTDemo_Feature1\External Content Types”. Зайдите в центр администрирования, откройте   службу подключения к бизнес-данным  и импортируйте этот файл как есть (в нем не нужно делать какие-либо изменения).</span></span></p> <p><span><span class="input"><a href="http://lh3.ggpht.com/-B8jjMKQb8Hc/UTzm4_h3NpI/AAAAAAAAAf4/8C76dYfZYRI/s1600-h/6%25255B4%25255D.png" target="_blank"><img title="Импортируйте BDC модель в центре администрирования" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Импортируйте BDC модель в центре администрирования" src="http://lh6.ggpht.com/-0_2xIrQj1xA/UTzm5o_bMxI/AAAAAAAAAgA/k53Aov3SJgc/6_thumb%25255B2%25255D.png?imgmax=800" width="244" height="87" /></a></span></span></p> <p><span><span class="input">“Вуаля!” – после этого внешний тип контента можно будет использовать в списках уровня фермы.</span></span></p> <p><span><span class="input"><a href="http://lh6.ggpht.com/-SCqSJwBh1QY/UTzm6N_FfFI/AAAAAAAAAgI/41EtYs6ow4k/s1600-h/7%25255B3%25255D.png" target="_blank"><img title="Внешний тип контента теперь доступен на уровне фермы" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Внешний тип контента теперь доступен на уровне фермы" src="http://lh5.ggpht.com/-voCGVJrtfQc/UTzm68ONUbI/AAAAAAAAAgQ/IxJh2HT-tv8/7_thumb%25255B1%25255D.png?imgmax=800" width="244" height="71" /></a></span></span></p> <p><span><span class="input">Например, можно создать внешний список, в котором будут отражены данные из внешнего источника OData.</span></span></p> <p><span><span class="input"><a href="http://lh4.ggpht.com/-uekTYvvfWY4/UTzm7rOFAyI/AAAAAAAAAgY/gkrOuVsi054/s1600-h/8%25255B3%25255D.png" target="_blank"><img title="Внешний список отображающий данные из источника OData" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Внешний список отображающий данные из источника OData" src="http://lh4.ggpht.com/-s95UYei8j4w/UTzm8UC6N1I/AAAAAAAAAgg/RvSLTqcV9_o/8_thumb%25255B1%25255D.png?imgmax=800" width="244" height="148" /></a></span></span></p> Anonymoushttp://www.blogger.com/profile/13880855041238399963noreply@blogger.com0tag:blogger.com,1999:blog-7210192778416412719.post-11824823691226617342013-01-31T21:07:00.001+04:002013-02-27T00:46:09.838+04:00Новые возможности Business Connectivity Services в SharePoint 2013 – Доступ ко внешним спискам через RESTful сервисОдной из новых возможностей компонента Business Connectivity Services (BCS), доступных в SharePoint 2013, является доступ ко внешним спискам через RESTful (<span lang="en" xml:lang="en"><i>Representational State Transfer</i></span>) сервис. <br />
<a href="http://lh4.ggpht.com/-uxZlIZy62_4/URuFapiqrSI/AAAAAAAAAdw/kcZvhBbDeVk/s1600-h/odatalogo%25255B8%25255D.png" target="_blank"><img alt="RESTful сервис" border="0" src="http://lh6.ggpht.com/-BdHHgVpfn3w/URuFbB16U0I/AAAAAAAAAd4/v4fsNckEsmc/odatalogo_thumb%25255B4%25255D.png?imgmax=800" height="200" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="RESTful сервис" width="200" /></a><br />
В этой статье на примере мы рассмотрим, как получить данные из внешнего списка и отобразить их в WPF приложении.<br />
<ol><li>Для успешного выполнения данного примера вам потребуется: <ul><li>Сервер с предустановленным Microsoft SharePoint 2013 </li>
<li>Клиент с предустановленной Microsoft Visual Studio Professional 2010 или 2012 (на клиенте нет необходимости иметь установленный SharePoint) </li>
</ul></li>
<li>Для начала создайте внешний тип контента (это можно сделать, например, как описано в этих примерах <a href="http://lightningtools.com/bcs/creating-an-external-content-type-with-sharepoint-designer-2013/" target="_blank">Creating an External Content Type with SharePoint Designer 2013</a> , <a href="http://msdn.microsoft.com/en-us/library/jj220063.aspx" target="_blank">How to: Create external content types for SQL Server in SharePoint 2013</a>) на SharePoint сервере. Я создал внешний тип контента с именем Territory. <a href="http://lh3.ggpht.com/-HfVBwl7rixQ/URuDSL5nBzI/AAAAAAAAAbs/n0imuFepE80/s1600-h/2%25255B4%25255D.png" target="_blank"><img alt="Создайте внешний тип контента" border="0" src="http://lh6.ggpht.com/-6yThE12Qxeg/URuDS7df_UI/AAAAAAAAAb0/QGOGh25tllg/2_thumb%25255B2%25255D.png?imgmax=800" height="139" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Создайте внешний тип контента" width="504" /></a></li>
<li>В Central Administration щелкните на созданный внешний тип контента и запомните имена полей, которые нам понадобятся в дальнейшем. У меня поля называются "RegionID", "TerritoryDescription", "TerritoryID". <a href="http://lh5.ggpht.com/-YhMsGbl5nG8/URuDTpFzOJI/AAAAAAAAAb8/58cEq5gFmyE/s1600-h/3%25255B4%25255D.png" target="_blank"><img alt="Поля внешнего типа контента" border="0" src="http://lh3.ggpht.com/-M4UovriytRM/URuDUXkeBdI/AAAAAAAAAcE/4H8kpWeG6oI/3_thumb%25255B2%25255D.png?imgmax=800" height="337" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Поля внешнего типа контента" width="504" /></a></li>
<li>Создайте внешний список на странице SharePoint, привязанный к этому внешнему типу контента. <br><a href="http://lh6.ggpht.com/-80tw_rYRWrw/URuDUxarPsI/AAAAAAAAAcM/LsGFknVdHEc/s1600-h/4%25255B4%25255D.png" target="_blank"><img alt="Создайте внешний список" border="0" src="http://lh3.ggpht.com/-WhcatNJ8Oh8/URuDWKAPosI/AAAAAAAAAcU/DEwe4RZ0L-E/4_thumb%25255B2%25255D.png?imgmax=800" height="223" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Создайте внешний список" width="504" /></a></li>
<li>На странице во внешнем списке отобразятся данные из внешней системы. <a href="http://lh6.ggpht.com/-NZMjasJhRxE/URuDYrhMK7I/AAAAAAAAAcc/7Jduy53iI6o/s1600-h/5%25255B4%25255D.png" target="_blank"><img alt="Данные из внешней системы во внешнем списке" border="0" src="http://lh4.ggpht.com/-iD8mBO4vN4k/URuDZiLyK9I/AAAAAAAAAck/82PQF6fXF58/5_thumb%25255B2%25255D.png?imgmax=800" height="496" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Данные из внешней системы во внешнем списке" width="287" /></a></li>
<li>Для доступа к элементам внешнего списка через RESTful сервис мы будем использовать такой URL, который можно проверить в браузере <a href="http://<your/"><b><span style="color: black;">http://<your</span></b></a><b><span style="color: black;"> site>/_api/web/lists/getbytitle('<имя внешнего списка>')/items</span> </b>(в моём случае URL выглядит так <a href="http://lyra/_api/web/lists/getbytitle(%27Territory%27)/items"><span style="color: black;">http://lyra/_api/web/lists/getbytitle('Territory')/items</span></a>) </li>
<li>Теперь давайте создадим WPF приложение, которое отобразит данные из внешнего списка используя сервис REST. Для этого на клиентской машине запустите Visual Studio </li>
<li>Создайте новый проект </li>
<li>В дереве типов проектов раскройте узел <b>“Visual C#/Windows”</b> и выберете проект <b>“WPF Application”</b> </li>
<li>Введите имя проекта, например <b>“RESTfulBCSDemo” </b>и нажмите <b>“OK”</b>. <a href="http://lh6.ggpht.com/-D8YNO6zMsNg/URuDaUUd3gI/AAAAAAAAAcs/aNTLRJtb1fg/s1600-h/10%25255B5%25255D.png" target="_blank"><img alt="Создайте проект "RESTfulBCSDemo"" border="0" src="http://lh3.ggpht.com/-yypzXJgxds4/URuDbSSeyXI/AAAAAAAAAc0/chAUvAgPNSk/10_thumb%25255B3%25255D.png?imgmax=800" height="357" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Создайте проект "RESTfulBCSDemo"" width="504" /></a></li>
<li>Для отображения данных из внешней системы, полученных через внешний тип контента, мы в клиентском WPF приложении добавим элемент управления <b>ListBox</b>. После добавления именуем его, например, externalDataListBox. <a href="http://lh5.ggpht.com/-f4wbuHqb_c4/URuDoLJ5gwI/AAAAAAAAAc8/pD_H0z8p1Mg/s1600-h/11%25255B5%25255D.png" target="_blank"><img alt="Добавьте элемент управления ListBox в клиентское WPF приложение" border="0" src="http://lh6.ggpht.com/-yDvHT3Lnz-0/URuDpczlLxI/AAAAAAAAAdE/whXJorlg2eI/11_thumb%25255B3%25255D.png?imgmax=800" height="304" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Добавьте элемент управления ListBox в клиентское WPF приложение" width="504" /></a></li>
<li>Так же задайте следующие свойства для добавленного элемента управления <b>ListBox</b> в xaml файле: <pre class="brush: xml"><ListBox Margin="12" Name="externalDataListBox" FontFamily="Courier New" FontSize="14" ItemsSource="{Binding ExternalData}"/></pre></li>
<li>Для работы с клиентской объектной моделью в код класса <b>MainWindow</b> добавьте следующие <b>“using”</b> директивы: <br />
<pre class="brush: csharp">using System.Net;
using System.Xml.Linq;</pre></li>
<li>Добавьте следующие переменные в код класса MainWindow и корректно инициализируйте их: <br />
<pre class="brush: csharp">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>" });</pre></li>
<li>Добавьте реализацию следующего метода, который будет получать данные из внешнего списка <br />
<pre class="brush: csharp">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);
}
}
}</pre></li>
<li>Для того, чтобы отобразить полученные данные из внешней системы в элементе управления <b>ListBox</b>, добавьте такой код: <br />
<pre class="brush: csharp">public MainWindow()
{
InitializeComponent();
DataContext = this;
externalData = new List<string>();
PullDataFromExternalList();
}
private List<string> externalData;
public List<string> ExternalData
{
get { return externalData; }
}</pre></li>
<li>Полностью код в файле <b>MainWindow.xaml.cs</b> должен выглядеть примерно так: <br />
<a href="http://lh5.ggpht.com/-ftXb-NFp-ew/URuDqbEUDrI/AAAAAAAAAdM/DHF4e8--JOQ/s1600-h/17%25255B4%25255D.png" target="_blank"><img alt="Код класса MainWindow" border="0" src="http://lh4.ggpht.com/-7VwzfKe9CFg/URuDrmK2YMI/AAAAAAAAAdU/rJLetcSBAF8/17_thumb%25255B2%25255D.png?imgmax=800" height="441" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Код класса MainWindow" width="504" /></a><br />
</li>
<li>Запустите WPF приложение. “Вуаля!” – перед нами данные, полученные из внешнего списка путем обращения к нему через REST сервис в WPF клиенте. <br />
<a href="http://lh4.ggpht.com/-mXSgObfhcPo/URuDsVRz6sI/AAAAAAAAAdc/UL9lMgzTK9U/s1600-h/18%25255B4%25255D.png" target="_blank"><img alt="Данные из внешнего списка, полученные через RESTful сервис" border="0" src="http://lh3.ggpht.com/-kL4OYihMWVI/URuDtj3ZD_I/AAAAAAAAAdk/NmSbS39jekA/18_thumb%25255B2%25255D.png?imgmax=800" height="390" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Данные из внешнего списка, полученные через RESTful сервис" width="504" /></a><br />
Целиком код WPF приложения-примера можно скачать <a href="https://sites.google.com/site/bloggerfilestorage/RESTfulBCSDemo.zip" target="_blank">здесь</a>.<br />
</li>
</ol>Anonymoushttp://www.blogger.com/profile/13880855041238399963noreply@blogger.com0tag:blogger.com,1999:blog-7210192778416412719.post-71369499716202803612012-12-31T22:38:00.001+04:002013-01-01T17:19:22.005+04:00Новые возможности Business Connectivity Services в SharePoint 2013 – Экспорт внешнего списка в Excel<p><span>Одним из неудобств при работе с внешними списками в SharePoint 2010 было отсутствие возможности экспорта данных в таблицу Excel. В версии SharePoint 2013 этот функционал стал доступен. В этой статье мы рассмотрим, как это можно сделать. </span></p> <ol> <li><span>Для успешного выполнения данного примера вам потребуется: </span> <ul> <li><span>Microsoft SharePoint 2013 </span></li> <li><span>Microsoft Excel 2010 или 2013</span> <p><a href="http://lh4.ggpht.com/-jcUR5n5M18o/UOLcsN5pDAI/AAAAAAAAAX0/wsCP2slraaw/s1600-h/1%25255B8%25255D.png" target="_blank"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Excel 2013" border="0" alt="Excel 2013" src="http://lh3.ggpht.com/-OEu7I_MDqbg/UOLctAiconI/AAAAAAAAAX8/IfAKGsOYL6c/1_thumb%25255B6%25255D.png?imgmax=800" width="132" height="132" /></a></p> </li> </ul> </li> <li>Для начала создайте внешний тип контента (это можно сделать, например, как описано в этих примерах <a href="http://lightningtools.com/bcs/creating-an-external-content-type-with-sharepoint-designer-2013/" target="_blank">Creating an External Content Type with SharePoint Designer 2013</a> , <a href="http://msdn.microsoft.com/en-us/library/jj220063.aspx" target="_blank">How to: Create external content types for SQL Server in SharePoint 2013</a>) на SharePoint сервере. Я создал внешний тип контента с именем Territory. <p><a href="http://lh3.ggpht.com/-mMezL3wdpOQ/UOLgoiPG0fI/AAAAAAAAAaQ/7Bj_RGL1tXQ/s1600-h/2%25255B3%25255D.png" target="_blank"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Создайте внешний тип контента" border="0" alt="Создайте внешний тип контента" src="http://lh4.ggpht.com/-n--rt2LcvxE/UOLgpeuw2SI/AAAAAAAAAaU/gUAYKJs0Paw/2_thumb%25255B1%25255D.png?imgmax=800" width="504" height="168" /></a></p> </li> <li>Создайте внешний список на странице SharePoint, привязанный к этому типу контента. <p><a href="http://lh6.ggpht.com/-CD8TtVpPG5w/UOLgqTsyoII/AAAAAAAAAaY/y5Iluwji8Dk/s1600-h/3%25255B3%25255D.png" target="_blank"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Создайте внешний список " border="0" alt="Создайте внешний список " src="http://lh4.ggpht.com/-MlLZ4h9l3Q4/UOLgrW1sKpI/AAAAAAAAAac/L-Xv3fAIy08/3_thumb%25255B1%25255D.png?imgmax=800" width="386" height="503" /></a></p> </li> <li>Для экспорта внешнего списка в Excel щелкните закладку <strong>“List”</strong>, а затем <strong>“Export to Excel”</strong>. <p><a href="http://lh6.ggpht.com/-sas38-2sVXY/UOLgswrwXmI/AAAAAAAAAag/5DidJL913XI/s1600-h/4%25255B3%25255D.png" target="_blank"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Экспорт внешнего списка в Excel 2013" border="0" alt="Экспорт внешнего списка в Excel 2013" src="http://lh4.ggpht.com/-1K_mH6QA9IM/UOLgtrAXvOI/AAAAAAAAAak/aY5UmYpSyPI/4_thumb%25255B1%25255D.png?imgmax=800" width="504" height="202" /></a></p> </li> <li>“Вуаля!” – внешний список будет экспортирован в таблицу Excel (при необходимости нужно будет ввести логин/пароль для доступа к данным внешнего списка). <p><a href="http://lh5.ggpht.com/-BrVI4wSlVB8/UOLgulV8MiI/AAAAAAAAAao/TCRPZDlnVR0/s1600-h/5%25255B4%25255D.png" target="_blank"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Данные из внешнего списка в таблице Excel" border="0" alt="Данные из внешнего списка в таблице Excel" src="http://lh3.ggpht.com/-spbLs2B8O0c/UOLgvjRuBYI/AAAAAAAAAas/J1jBl9Sg2xk/5_thumb%25255B2%25255D.png?imgmax=800" width="297" height="500" /></a></p> </li> <li>При изменении данных во внешнем списке их можно будет обновить в таблице Excel. Для демонстрации этой возможности давайте создадим новый элемент во внешнем списке. <p><a href="http://lh3.ggpht.com/-6W3PO51_g9k/UOLgwVOHVgI/AAAAAAAAAaw/D2GiQub1f7A/s1600-h/6%25255B4%25255D.png" target="_blank"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Внесите изменения во внешний список" border="0" alt="Внесите изменения во внешний список" src="http://lh6.ggpht.com/-utRPaCoAHzk/UOLgxc5S1zI/AAAAAAAAAa0/6oz4o6Ijbkg/6_thumb%25255B2%25255D.png?imgmax=800" width="504" height="438" /></a></p> </li> <li>Для обновления данных в таблице Excel, щелкните на ячейку таблицы, затем на закладку <strong>“Design”</strong>, а потом нажмите кнопку <strong>“Refresh” </strong>(при необходимости нужно будет ввести логин/пароль для доступа к данным внешнего списка). <p><a href="http://lh3.ggpht.com/-lsDJ2NaXWlM/UOLgy4QdzDI/AAAAAAAAAa4/iNdNlK_Fes0/s1600-h/7%25255B3%25255D.png" target="_blank"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Обновление данных в таблице Excel" border="0" alt="Обновление данных в таблице Excel" src="http://lh6.ggpht.com/-xfJSu27drNM/UOLgzxucvQI/AAAAAAAAAa8/8J-hKgPv5I8/7_thumb%25255B1%25255D.png?imgmax=800" width="504" height="201" /></a></p> </li> <li>Данные из внешнего списка в таблице Excel обновлены. <p><a href="http://lh4.ggpht.com/-g-Arx2vdHMs/UOLg0jA3lBI/AAAAAAAAAbA/z_g1eQgY-YE/s1600-h/8%25255B3%25255D.png" target="_blank"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Данные из внешнего списка в таблице Excel обновлены" border="0" alt="Данные из внешнего списка в таблице Excel обновлены" src="http://lh3.ggpht.com/-ZEAiYaOA2v0/UOLg1t9WXwI/AAAAAAAAAbE/aSjrcvTPDYI/8_thumb%25255B1%25255D.png?imgmax=800" width="307" height="501" /></a></p> </li> </ol> Anonymoushttp://www.blogger.com/profile/13880855041238399963noreply@blogger.com0tag:blogger.com,1999:blog-7210192778416412719.post-89671218208036109532012-11-29T14:46:00.001+04:002013-01-01T17:37:00.155+04:00Новые возможности Business Connectivity Services в SharePoint 2013 – Использование клиентской объектной модели (Client Object Model)<p>Продолжая серию статей о новых возможностях компонента Business Connectivity Services (BCS), доступных в SharePoint 2013, я хочу рассказать о такой возможности, как использование клиентской объектной модели для взаимодействия со службой Business Connectivity Services (BCS). В этой статье на примере мы рассмотрим, как с помощью клиентской объектной модели получить данные из внешней системы посредством вызова операции “Read List” (Finder метод) у внешнего типа контента (External Content Types). В качестве клиента будем использовать WPF приложение. </p><ol><li>Для успешного выполнения данного примера вам потребуется: <ul><li>Сервер с предустановленным Microsoft SharePoint 2013 </li>
<li>Клиент с предустановленной Microsoft Visual Studio Professional 2010 или 2012 (на клиенте нет необходимости иметь установленный SharePoint) </li>
</ul></li>
<li>Для начала создайте внешний тип контента (это можно сделать, например, как описано в этих примерах <a href="http://lightningtools.com/bcs/creating-an-external-content-type-with-sharepoint-designer-2013/" target="_blank">Creating an External Content Type with SharePoint Designer 2013</a> , <a href="http://msdn.microsoft.com/en-us/library/jj220063.aspx" target="_blank">How to: Create external content types for SQL Server in SharePoint 2013</a>) на SharePoint сервере. Я создал внешний тип контента с именем Territory. <p><a href="http://lh5.ggpht.com/-pTw2pDmdzsQ/ULdIZ5nC8HI/AAAAAAAAAVU/gwZLNqjdozc/s1600-h/2%25255B12%25255D.png" target="_blank"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Создайте внешний тип контента" border="0" alt="Создайте внешний тип контента" src="http://lh6.ggpht.com/-SJyL9E5do-g/ULdIayaHjTI/AAAAAAAAAVc/qZmG87bhMv0/2_thumb%25255B9%25255D.png?imgmax=800" width="504" height="165" /></a></p></li>
<li>На клиентской машине запустите Visual Studio </li>
<li>Создайте новый проект </li>
<li>В дереве типов проектов раскройте узел <strong>“Visual C#/Windows”</strong> и выберете проект <strong>“WPF Application”</strong> </li>
<li>Введите имя проекта, например <strong>“ClientObjectModelBCSDemo” </strong>и нажмите <strong>“OK”</strong>. <p><a href="http://lh6.ggpht.com/-QDb5TQmtqo4/ULc8laCtBiI/AAAAAAAAASw/4VTymgF7ydA/s1600-h/63.png" target="_blank"><img style="background-image: none; display: inline" title="Создайте проект "ClientObjectModelBCSDemo"" border="0" alt="Создайте проект "ClientObjectModelBCSDemo"" src="http://lh6.ggpht.com/-tyl1vvXRGpA/ULc8nUIZntI/AAAAAAAAAS4/iyVo_21A-Nw/6_thumb1.png?imgmax=800" width="244" height="199" /></a></p></li>
<li>Убедитесь в том, что вы используете .NET Framework 4.0 <p><a href="http://lh5.ggpht.com/-fFgNbi6jO1U/ULc8pcWIGLI/AAAAAAAAATA/s62eYUEn1yA/s1600-h/73.png" target="_blank"><img style="background-image: none; display: inline" title="Используйте .NET Framework 4.0" border="0" alt="Используйте .NET Framework 4.0" src="http://lh5.ggpht.com/-_dkWStilIy0/ULc8qkubZuI/AAAAAAAAATI/OGkmcCMCk1U/7_thumb1.png?imgmax=800" width="244" height="112" /></a></p></li>
<li>Для того чтобы иметь возможность использовать клиентскую объектную модель в нашем проекте, необходимо добавить ссылки на сборки: <strong>Microsoft.SharePoint.Client.dll</strong> и <strong>Microsoft.SharePoint.Client.Runtime.dll</strong>. Перед добавлением ссылок необходимо скопировать эти сборки на клиентскую машину с сервера SharePoint из папки : <br />
<strong>%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\15\ISAPI</strong>. <p><a href="http://lh3.ggpht.com/-57shV6cxdcg/ULc8r17gxLI/AAAAAAAAATQ/e7-xNtsnHrI/s1600-h/83.png" target="_blank"><img style="background-image: none; display: inline" title="Скопируйте Microsoft.SharePoint.Client.dll и Microsoft.SharePoint.Client.Runtime.dll" border="0" alt="Скопируйте Microsoft.SharePoint.Client.dll и Microsoft.SharePoint.Client.Runtime.dll" src="http://lh5.ggpht.com/-HZIYbGpNHOE/ULc8tUQAJxI/AAAAAAAAATU/ARGF7K6YxIs/8_thumb1.png?imgmax=800" width="244" height="97" /></a></p></li>
<li>У себя я скопировал сборки в папку проекта “D:\Work\!\ClientObjectModelBCSDemo\ClientObjectModelBCSDemo\dll” на клиентской машине и после этого добавил ссылки на них в Visual Studio. <p><a href="http://lh3.ggpht.com/-d_S02zHAmnA/ULc8uYi2r7I/AAAAAAAAATc/CESwSI2YCEc/s1600-h/94.png" target="_blank"><img style="background-image: none; display: inline" title="Добавьте ссылки на сборки клиентской объектной модели" border="0" alt="Добавьте ссылки на сборки клиентской объектной модели" src="http://lh5.ggpht.com/-VgjroV7mKgs/ULc8vaQ4LzI/AAAAAAAAATk/7iCbvWEjQu4/9_thumb2.png?imgmax=800" width="188" height="244" /></a></p></li>
<li>Для отображения данных из внешней системы, полученных через внешний тип контента, мы в клиентском WPF  приложении добавим элемент управления <strong>ListBox</strong>. После добавления именуем его, например, externalDataListBox.. <p><a href="http://lh5.ggpht.com/-6y38e60aF3Y/ULc8wTXoe_I/AAAAAAAAATw/RJnCZ385ajI/s1600-h/103.png" target="_blank"><img style="background-image: none; display: inline" title="Добавьте элемент управления ListBox в клиентское WPF приложение" border="0" alt="Добавьте элемент управления ListBox в клиентское WPF приложение" src="http://lh4.ggpht.com/-SkWyjBepSng/ULc8x89NkmI/AAAAAAAAAT0/PNsY1AWbHpM/10_thumb1.png?imgmax=800" width="244" height="146" /></a></p></li>
<li>Так же задайте следующие свойства для добавленного элемента управления <strong>ListBox</strong> в xaml файле: <pre class="brush: xml"><ListBox Margin="12" Name="externalDataListBox" FontFamily="Courier New" FontSize="14" ItemsSource="{Binding ExternalData}"/></pre></li>
<li>Для работы с клиентской объектной моделью в код класса <strong>MainWindow</strong> добавьте следующие <strong>“using”</strong> директивы: <br />
<pre class="brush: csharp">using Microsoft.SharePoint.Client;
using Microsoft.BusinessData.MetadataModel;
using Microsoft.BusinessData.MetadataModel.Collections;</pre></li>
<li>Добавьте следующие переменные в код класса MainWindow и корректно инициализируйте их: <br />
<pre class="brush: csharp">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>";</pre></li>
<li>Добавьте реализацию следующего метода, который будет вызывать <font size="2">операцию <strong>“Read List” (Finder метод) </strong>у внешнего типа контента и, таким образом, получать данные из внешней системы:</font> <br />
<pre class="brush: csharp">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))));
}
}</pre></li>
<li>Для того, чтобы отобразить полученные данные из внешней системы в элементе управления <strong>ListBox</strong>, добавьте такой код: <br />
<pre class="brush: csharp">public MainWindow()
{
InitializeComponent();
DataContext = this;
externalData = new List<string>();
ExecuteFinderMethod();
}
private List<string> externalData;
public List<string> ExternalData
{
get { return externalData; }
}</pre></li>
<li>Полностью код в файле <strong>MainWindow.xaml.cs</strong> должен выглядеть примерно так: <br />
<p><a href="http://lh4.ggpht.com/-ajDF19cedEk/ULc8yyz9WYI/AAAAAAAAAUA/zpJq7V38osc/s1600-h/163.png" target="_blank"><img style="background-image: none; display: inline" title="Код класса MainWindow" border="0" alt="Код класса MainWindow" src="http://lh5.ggpht.com/-GBkaHuNDhEM/ULc81QL0BuI/AAAAAAAAAUE/T-dEPwRTQ5c/16_thumb1.png?imgmax=800" width="244" height="236" /></a></p></li>
<li>Запустите WPF приложение. “Вуаля!” – перед нами данные, полученные из внешней системы путем обращения к внешнему типу контента“Territory”. <br />
<p><a href="http://lh6.ggpht.com/-IjdoB5NKl3Y/ULc82Xv9TgI/AAAAAAAAAUQ/ZzskGKHmibY/s1600-h/173.png" target="_blank"><img style="background-image: none; display: inline" title="Данные внешней системы, полученные с использованием клиентской объектной модели " border="0" alt="Данные внешней системы, полученные с использованием клиентской объектной модели " src="http://lh3.ggpht.com/-r1ZL2O13kDw/ULc831UkXxI/AAAAAAAAAUY/Kc4axko9qM0/17_thumb1.png?imgmax=800" width="244" height="242" /></a></p></li>
<li>Теперь создайте внешний список на странице SharePoint, привязанный к тому же типу контента. <br />
<p><a href="http://lh5.ggpht.com/-TA_9Ekz5CUU/ULc85KWBvSI/AAAAAAAAAUc/VskcjhkslsQ/s1600-h/183.png" target="_blank"><img style="background-image: none; display: inline" title="Создайте внешний список" border="0" alt="Создайте внешний список" src="http://lh5.ggpht.com/-I9NImcmOsQU/ULc86LvJNvI/AAAAAAAAAUo/kMzJVfea0Xc/18_thumb1.png?imgmax=800" width="244" height="107" /></a></p></li>
<li>Вы можете видеть, что во внешним списке отображены те же самые данные, что были получены путем использования <font size="2">клиентской объектной модели</font>: <br />
<p><a href="http://lh3.ggpht.com/-52oWAl6jOkc/ULc87AlHOtI/AAAAAAAAAUs/1u-ON-lsreI/s1600-h/194.png" target="_blank"><img style="background-image: none; display: inline" title="Те же самые данные во внешнем списке" border="0" alt="Те же самые данные во внешнем списке" src="http://lh3.ggpht.com/-3-p3FwmI6UY/ULc871-gtaI/AAAAAAAAAUw/jvD1afBFKtc/19_thumb2.png?imgmax=800" width="244" height="233" /></a></p></li>
</ol><p>Целиком код WPF приложения-примера можно скачать <a href="https://sites.google.com/site/bloggerfilestorage/ClientObjectModelBCSDemo.zip" target="_blank">здесь</a>.</p>Anonymoushttp://www.blogger.com/profile/13880855041238399963noreply@blogger.com0tag:blogger.com,1999:blog-7210192778416412719.post-5088859973506352552012-10-05T14:00:00.001+04:002012-10-05T14:00:37.609+04:00Новые возможности Business Connectivity Services в SharePoint 2013 – Создание внешнего типа контента на основе источника OData<p><font size="2" face="Segoe UI">Сегодня я хочу начать серию статей о новых возможностях компонента Business Connectivity Services (BCS), доступных в SharePoint 2013. Первая из таких возможностей – это поддержка внешних типов контента (External Content Types), подключающихся к источнику OData. В этой статье на простом примере мы рассмотрим как это реализовать. </font></p> <ol> <li><font size="2" face="Segoe UI">Для успешного выполнения данного примера вам потребуется: </font> <ul> <li><font size="2" face="Segoe UI">Microsoft SharePoint 2013 Preview </font></li> <li><font size="2" face="Segoe UI">Microsoft Visual Studio 2012 </font></li> <li><font size="2" face="Segoe UI">Microsoft Office Developer Tools for Visual Studio 2012 – Preview </font></li> <li><font size="2" face="Segoe UI">Источник данных OData (несколько примеров, которые можно использовать, указаны здесь </font><a href="http://www.odata.org/ecosystem#liveservices" target="_blank"><font size="2" face="Segoe UI">Live Services</font></a><font size="2" face="Segoe UI">) </font></li> </ul> </li> <li><font size="2" face="Segoe UI">Первым делом запустите Visual Studio 2012 </font></li> <li><font size="2" face="Segoe UI">Создайте новый проект </font></li> <li><font size="2" face="Segoe UI">В дереве типов проектов раскройте узел <strong>“Office/SharePoint”</strong>, выберете тип <strong>“Apps”</strong> и щёлкните значок <strong>“Apps for SharePoint 2013”</strong> </font></li> <li><font size="2" face="Segoe UI">Введите имя проекта, например <strong>“ODataECTDemo”</strong> и нажмите <strong>“OK”</strong>.</font> <font size="2" face="Segoe UI"> </font> <br /><a href="http://lh4.ggpht.com/-3AKAKEFnWg4/UG6vStxjwBI/AAAAAAAAAO4/b5eKXIfL6JI/s1600-h/55.png" target="_blank"><img style="background-image: none; display: inline" title="Создайте проект ODataECTDemo " border="0" alt="Создайте проект ODataECTDemo " src="http://lh6.ggpht.com/-flllSUPWYvQ/UG6vToypQRI/AAAAAAAAAO8/QzH8PSI8Joc/5_thumb3.png?imgmax=800" width="244" height="180" /></a> </li> <li><font size="2" face="Segoe UI">В следующем диалоговом окне введите имя сайта, который будет использоваться для отладки приложения, и способ размещения приложения. Я выбрал <strong>“SharePoint-hosted”</strong> в этом примере. Нажмите <strong>“Finish”</strong>.</font> <br /><a href="http://lh3.ggpht.com/-4T8mE7skw1k/UG6vU8vN6LI/AAAAAAAAAPI/DsreZiDHpoo/s1600-h/63.png" target="_blank"><font size="2" face="Segoe UI"><img style="background-image: none; display: inline" title="Задайте настройки приложения" border="0" alt="Задайте настройки приложения" src="http://lh5.ggpht.com/-SHKb1NJJ1QI/UG6vV_0LDxI/AAAAAAAAAPM/eJWZTgj23iQ/6_thumb1.png?imgmax=800" width="244" height="194" /></font> </a></li> <li><font size="2" face="Segoe UI">Для того, чтобы добавить внешний тип контента, щёлкните правой кнопкой мыши проект <strong>“ODataECTDemo”</strong> на панели <strong>“Solution Explorer”</strong>, выберете меню <strong>“Add”</strong>, а затем из выпадающего меню выберете пункт <span class="label"><strong>“</strong></span><span class="label"><strong>Content Types for External Data Source”</strong>. Откроется окно мастера подключения источника OData и создания внешнего типа контента.</span> </font> <br /><a href="http://lh5.ggpht.com/-eDr5BG9W52g/UG6vW94X4_I/AAAAAAAAAPY/i0Qj08zPG9s/s1600-h/73.png" target="_blank"><font size="2" face="Segoe UI"><a href="http://lh5.ggpht.com/-eDr5BG9W52g/UG6vW94X4_I/AAAAAAAAAPg/tTSIrVmAa1o/s1600-h/7%25255B1%25255D.png" target="_blank"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Добавьте внешний тип контента" border="0" alt="Добавьте внешний тип контента" src="http://lh5.ggpht.com/-c7tyMMn0DaQ/UG6vZauNIPI/AAAAAAAAAPk/hNzycFkefqk/7_thumb.png?imgmax=800" width="244" height="157" /></a></font></a> </li> <li><span class="label"><font size="2" face="Segoe UI">На первом шаге мастера введите имя, например,<strong>“ODataTestService”</strong>, и URL источника OData, который вы планируете использовать (Я в этом примере выбрал вот этот </font><a href="http://services.odata.org/OData/OData.svc/" target="_blank"><font size="2" face="Segoe UI">http://services.odata.org/OData/OData.svc/</font></a><font face="Segoe UI"><font size="2"> )<span class="label">. Нажмите <strong>“Next”</strong>.</span></font></font></span><font size="2" face="Segoe UI"> </font> <br /><a href="http://lh3.ggpht.com/-GM4C5D81Ii4/UG6vaD14vuI/AAAAAAAAAPs/tdPk-jjYbxs/s1600-h/83.png" target="_blank"><font size="2" face="Segoe UI"><img style="background-image: none; display: inline" title="Задайте источник OData" border="0" alt="Задайте источник OData" src="http://lh5.ggpht.com/-0buNMYz7afw/UG6vbRExUcI/AAAAAAAAAPw/aCRZrBVd1iQ/8_thumb1.png?imgmax=800" width="244" height="194" /></font></a><font size="2" face="Segoe UI"> </font></li> <li><font face="Segoe UI"><font size="2"><span class="label"><span class="label">На этом шаге выберете те сущности, для которых вы хотите создать внешние типы контента. Можно выбрать один или несколько. В этом примере я выбрал одну сущность <strong>“Product”</strong>. Чтобы добавить внешний список автоматически при развертывании приложения, убедитесь, что отмечена галочка  <strong>"Create list instances for the selected data entries (except Service Operations)"</strong>. Нажмите <strong>“Finish”</strong>.</span></span> </font></font> <br /><a href="http://lh4.ggpht.com/-U8OZB0T5So4/UG6vcVRgc7I/AAAAAAAAAP8/Ujyl7Hm6kaU/s1600-h/93.png" target="_blank"><font size="2" face="Segoe UI"><img style="background-image: none; display: inline" title="Выберете те сущности, для которых вы хотите создать внешние типы контента" border="0" alt="Выберете те сущности, для которых вы хотите создать внешние типы контента" src="http://lh5.ggpht.com/-jz9untIdR-I/UG6vdRF1CKI/AAAAAAAAAQA/CEee8AwzUeI/9_thumb1.png?imgmax=800" width="244" height="194" /></font></a><font size="2" face="Segoe UI"> </font></li> <li><span class="label"><span class="label"><font size="2" face="Segoe UI">На панели <strong>“Solution Explorer”</strong> в<span class="label"><span class="label">ы можете заметить</span></span>, что Visual Studio автоматически создала новую папку <strong>“External Content Types” </strong>в дереве проекта. Давайте в нее заглянем и посмотрим, что там.</font></span></span> <br /><a href="http://lh6.ggpht.com/-dM7_lvEWXEc/UG6veRgCJxI/AAAAAAAAAQI/glYqiGtePfI/s1600-h/103.png" target="_blank"><font size="2" face="Segoe UI"><img style="background-image: none; display: inline" title="Создана новая папка “External Content Types”" border="0" alt="Создана новая папка “External Content Types”" src="http://lh6.ggpht.com/-B3FBvUrHdJc/UG6vfeH-V5I/AAAAAAAAAQU/UjNzWtarZj4/10_thumb1.png?imgmax=800" width="198" height="244" /></font></a><font size="2" face="Segoe UI"> </font></li> <li><font face="Segoe UI"><font size="2"><span class="label"><span class="label">Раскрыв папку <strong>“External Content Types”</strong>,<strong> </strong>вы можете увидеть созданный внешний тип контента, который соответствует выбранной в мастере сущности. В моем случае – это <strong>Product.ect</strong>. Его можно открыть как в графическом режиме</span></span> </font></font> <br /><a href="http://lh4.ggpht.com/-jgA93I1O4Vo/UG6vgcLQ9MI/AAAAAAAAAQc/lJ8SMc2w0Mk/s1600-h/114.png" target="_blank"><font size="2" face="Segoe UI"><img style="background-image: none; display: inline" title="Внешний тип контента в графическом режиме" border="0" alt="Внешний тип контента в графическом режиме" src="http://lh5.ggpht.com/-AddMkb9JfJg/UG6vhT8VjpI/AAAAAAAAAQk/tdvUBr_5IY0/11_thumb2.png?imgmax=800" width="244" height="153" /></font></a><font size="2" face="Segoe UI"> </font></li> <li><font face="Segoe UI"><font size="2"><span class="label"><span class="label">так и как обычный xml файл, если его открыть с помощью xml редактора.</span></span> </font></font> <br /><a href="http://lh4.ggpht.com/-m9oU1gGqLrg/UG6viR40PbI/AAAAAAAAAQs/Mv7xGjdhCJU/s1600-h/124.png" target="_blank"><font size="2" face="Segoe UI"><img style="background-image: none; display: inline" title="Внешний тип контента в виде xml файла" border="0" alt="Внешний тип контента в виде xml файла" src="http://lh6.ggpht.com/--Qu8hWXGmqk/UG6vjucZsZI/AAAAAAAAAQw/lV8w8Ntz8pY/12_thumb2.png?imgmax=800" width="244" height="118" /></font></a><font size="2" face="Segoe UI"> </font></li> <li><font face="Segoe UI"><font size="2"><span class="label"><span class="label">Еще один сгенерированный файл  - это xml файл экземпляра списка, ассоциированного с внешним типом данных. Запомните относительный URL этого списка, так как он нам потребуется в дальнейшем. В моем случае URL такой <strong>“Lists/Product”</strong></span></span>     </font></font> <br /><a href="http://lh4.ggpht.com/-kX5Z7mySE_Q/UG6vl37OGnI/AAAAAAAAAQ8/EQ1JwcQGCd8/s1600-h/133.png" target="_blank"><font size="2" face="Segoe UI"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Экземпляра списка, ассоциированного с внешним типом данных" border="0" alt="Экземпляра списка, ассоциированного с внешним типом данных" src="http://lh5.ggpht.com/-zXNM7H5tdU4/UG6voDZmPnI/AAAAAAAAARE/FohD5lgbfRo/13_thumb1.png?imgmax=800" width="244" height="107" /></font></a></a> </li> <li><span class="label"><span class="label"><font face="Segoe UI"><font size="2">Теперь нам нужно выполнить построение и развертывание приложения, для этого нажмите F5 в Visual Studio. После развертывания откроется страница <strong>“</strong><span class="label"><strong>Site Contents” </strong>и наше приложение будет доступно в списке всего содержимого сайта.</span></font></font></span></span> <br /><a href="http://lh3.ggpht.com/-9ZLut0cmZk8/UG6vpMogQLI/AAAAAAAAARI/B0IcAsJZ9es/s1600-h/143.png" target="_blank"><font size="2" face="Segoe UI"><img style="background-image: none; display: inline" title="Наше приложение на странице “Site Contents”" border="0" alt="Наше приложение на странице “Site Contents”" src="http://lh6.ggpht.com/-UhtQo-I4zj4/UG6vp1B8vFI/AAAAAAAAARQ/8-YhBFckpQw/14_thumb1.png?imgmax=800" width="244" height="166" /></font></a><font size="2" face="Segoe UI"> </font></li> <li><font size="2" face="Segoe UI">Щёлкнув на приложение <strong>“ODataDemo”</strong>, откроется стартовая страница приложения (та, которая определена в свойстве <strong>“StartPage”</strong> файла проекта <strong>AppManifest.xml</strong>). По умолчанию – это достаточно простая страница, которая отображает заголовок нашего приложения и имя пользователя, запустившего приложение. Наведите мышку на имя приложения и запомните его URL, который потребуется на следующем шаге. В моем случае URL приложения такой <strong>http://app-e139481b3ba396.aquarius.sharepoint.local/ODataECTDemo/</strong> </font> <br /><a href="http://lh5.ggpht.com/-qFqeeVb-3w0/UG6vrBWqfdI/AAAAAAAAARc/XXyhZd8Qm1c/s1600-h/153.png" target="_blank"><font size="2" face="Segoe UI"><img style="background-image: none; display: inline" title="Стартовая страница приложения" border="0" alt="Стартовая страница приложения" src="http://lh4.ggpht.com/-KsXcQ6TyYYM/UG6vsF8JcnI/AAAAAAAAARk/iWkK6806NpY/15_thumb1.png?imgmax=800" width="244" height="114" /></font></a><font size="2" face="Segoe UI"> </font></li> <li><font size="2" face="Segoe UI">Теперь нам необходимо открыть внешний список, который создался автоматически. Для этого составьте URL следующим способом: URL приложения (из шага №15)+относительный URL внешнего списка(из шага №13). У меня этот URL выглядит так <strong>http://app-e139481b3ba396.aquarius.sharepoint.local/ODataECTDemo/Lists/Product</strong>. Введите этот URL в браузере. “Вуаля!” – перед нами внешний список на странице SharePoint 2013, который отображает данные OData канала.</font> <br /><a href="http://lh3.ggpht.com/-KMiLEVIVh1s/UG6vtHqgfmI/AAAAAAAAARs/0OynqY0rB4k/s1600-h/164.png" target="_blank"><font size="2" face="Segoe UI"><img style="background-image: none; display: inline" title="Внешний список на странице SharePoint 2013, который отображает данные OData канала" border="0" alt="Внешний список на странице SharePoint 2013, который отображает данные OData канала" src="http://lh5.ggpht.com/-3t_IxKYUnz8/UG6vuBUa1bI/AAAAAAAAARw/E4ESBzjssHA/16_thumb2.png?imgmax=800" width="244" height="130" /></font></a><font size="2" face="Segoe UI"> </font></li> <li><font size="2" face="Segoe UI">Для упрощения отладки вы можете сделать так, чтобы внешний список сразу открывался при запуске приложения. Для этого необходимо изменить файл <strong>AppManifest.xml </strong>приложения. Откройте этот файл в xml редакторе Visual Studio, найдите элемент <strong>“StartPage”</strong> и замените предыдущее значение на новое:<span class="code">~appWebUrl+относительный URL внешнего списка(из шага №13). В моем случае это выглядит так: <strong><StartPage>~appWebUrl/Lists/Product</StartPage></strong>.</span> </font> <br /><a href="http://lh3.ggpht.com/-oVtXSxf9i98/UG6vuuMyStI/AAAAAAAAAR8/-tKK7HDQwcs/s1600-h/174.png" target="_blank"><font size="2" face="Segoe UI"><img style="background-image: none; display: inline" title="Свойство “StartPage” в файле AppManifest.xml" border="0" alt="Свойство “StartPage” в файле AppManifest.xml" src="http://lh4.ggpht.com/-x1qJSgFIPWs/UG6vwtgfMAI/AAAAAAAAASE/cUtazlZcanM/17_thumb2.png?imgmax=800" width="244" height="155" /></font></a><font size="2" face="Segoe UI"> </font></li> <li><font face="Segoe UI"><font size="2"><span class="code">Снова нажмите F5 в Visual Studio и, щёлкнув затем приложение <strong>“ODataDemo”</strong>, теперь вы увидите внешний список на стартовой странице.</span> <span class="code"></span></font></font> <ol><font size="2" face="Segoe UI"></font></ol> <p><font face="Segoe UI"></font></p> </li> </ol> Anonymoushttp://www.blogger.com/profile/13880855041238399963noreply@blogger.com0