msdevcon.ru #msdevcon Создание приложений (Apps) для SharePoint 2013 в Облаке Станислав Выщепан Марат Бакиров Ай-Теко UMSOFT Обзор Что такое приложения (apps) для SharePoint 2013 SharePoint hosted apps Cloud-Hosted apps Возможности приложений История разработки для SharePoint 2003: XML 2007: Feature framework & WSP 2010: Sandbox solutions & Client Side 2013: Apps Хостинг приложений SharePoint Web Your Hosted Site SharePoint Web Azure Host web App Web Клиентские технологии и workflow (from WSP) Формы приложений Полная страница Отдельная страница приложения со своей навигацией App Parts Аналог веб-части для размещения на страницах сайтов SharePoint Пункт меню Команда в Ribbon или Меню Обзор Что такое приложения (apps) для SharePoint 2013 SharePoint hosted apps Cloud-Hosted apps Возможности приложений Почему SharePoint hosted apps Одинаково работает в Office365 и on-prem Автоматическая аутентификация Встроенная изоляция экземпляров Без лишних затрат Без дополнительной инфраструктуры Изоляция SharePoint-hosted приложений 1 экземпляр приложения = 1 “app web” Каждый App webs имеет свой домен: Host https://contoso.sharepoint.com/site/ web App web https://contoso-appUID.sharepoint.com/site/app/ Использует same-origin policy в браузере для изоляции JavaScript Доступные компоненты • Списки • Библиотеки • WebProxy • App scoped ECTs • JavaScript • Workflows • Custom Actions • Страницы (только разметка) • CSS файлы • Custom Actions • Встроенные Веб-части JSOM & REST JavaScript object model var ctx = new SP.ClientContext("http://contoso-appUID.spo.com/site/app"); ctx.load(ctx.get_web()); ctx.executeQueryAsync(); REST/OData http://contoso-appUID.spo.com/site/app/_api/web/Title Как обратиться к Host Web Чтобы обратиться к артефактам за пределами app web: 1. Запросить разрешения 2. Сделать CSOM вызов, используя правильный контекст SP.AppContextSite DEMO SharePoint hosted app Марат Бакиров UMSOFT Обзор Что такое приложения (apps) для SharePoint 2013 SharePoint hosted apps Cloud-Hosted apps Возможности приложений Для чего использовать Cloud hosted app Серверный код C#, PHP, Java, Ruby, ваш_любимый_язык Повышение привилегий Выполнять код с разрешениями выше, чем у пользователя Обработчики событий Обрабатывать события установки и удаления app Обрабатывать события элементов, списков, сайтов, события безопасности Недостатки Cloud hosted app Необходимо самостоятельно хостить app Azure или другие провайдеры Ваша собственная инфраструктура Необходимо использовать OAuth или S2S Управлять токенами OAuth Настраивать «доверие» S2S в on-prem Необходимо поддерживать консистентный внешний вид Стили и chrome как в SharePoint OAuth Защищенное взаимодействие с SharePoint App и SharePoint доверяют третьей стороне (ACS) Доверие создается используя ClientId и ClientSecret SharePoint и ACS знают ClientId App и ACS знают ClientSecret OAuth Token Flow 1. SharePoint получает Context Token от ACS и передает приложению 2. App проверяет Context Token и получает Access Token от ACS 3. Access Token используется App для доступа к SharePoint High-Trust apps OAuth не работает в On-prem Можно подключить, но требует Office365 Tenant S2S Trust позволяет app обращаться напрямую Доверие устанавливается с помощью сертификатов App имеет приватный ключ, которым подписывает запросы Недостатки Требуется настройка фермы Работает только в on-prem Управление токенами OAuth Ваше приложение должно запрашивать токены Visual Studio генерирует класс TokenHelper для этих целей Какое API использовать В apps доступны только CSOM\REST API Только они поддерживают OAuth\S2S Веб-сервисы не доступны Требуют аутентификацию пользователя Серверная объектная модель не доступна Требует запуска на ферме SharePoint 2013 Remote API _api это алиас для _vti_bin/client.svc Server Client REST OData JSON CSOM JavaScript Library Silverlight Library Произвольный код .Net CLR Library Chrome control Консистентный внешний вид app Подтягивает темы с host web Включает ссылку на host web Обязательное требование Microsoft Настраиваемое меню команд Можно добавлять ссылки на любые страницы Chrome control $(function () { var options = { appIconUrl: "siteicon.png", appTitle: "Chrome control app" } var nav = new SP.UI.Controls.Navigation( "chrome_ctrl_placeholder", options ); nav.setVisible(true); }); Remote Event Receivers Аналог серверных ресиверов Синхронные и асинхронные события События элементов, списков, сайтов, безопасности и приложений Не гарантируется доставка событий В случае недоступности сервера ресиверы игнорируются Для отладки необходимо использовать Azure Service Bus DEMO Autohosted app Марат Бакиров UMSOFT Обзор Что такое приложения (apps) для SharePoint 2013 SharePoint hosted apps Cloud-Hosted apps Возможности приложений Разрешения приложений Сильно отличаются от разрешений для пользователей Даются по принципу «все или ничего» Не учитывают иерархию объектов Разрешения можно получить только на весь сайт\коллекцию целиком Разрешения могут быть выданы на разные области Список, сайт, коллекция сайтов или тенант Поиск, BCS, таксономия, профили пользователей Отдельные возможности Project Server Политики разрешений App + User policy Пользователь И приложение должны иметь доступ к ресурсу (пересечение) Если не хватает разрешений, то «нет доступа» или «элемент не найден» App-only policy Только приложение должно иметь доступ к ресурсу Приложение может обращаться к SharePoint без контекста пользователя Только в серверном коде User Policy Не используется в приложениях App-only Policy Два основных сценария: 1. Выполнение действий с разрешениями выше, чем у текущего пользователя (повышение привилегий) 2. Обращение к SharePoint без контекста пользователя Как это сделать 1. Добавить AllowAppOnlyPolicy в AppManifest.xml 2. Написать код для получения app only access token Workflow Используется движок WF4 Поддерживаются циклы и переходы к предыдущим состояниям Автоматически привязываются к спискам на app web Можно привязать к host web с помощью кода App-scoped ECT Можно создавать внешние типы контента в app Раньше только на уровне всей фермы Работает с OData источниками данных Удобный дизайнер в студии App parts Тоже самое что Web Part с iframe Внутри отображается обычная страница из app Можно задавать настраиваемые свойства Доступные типы свойств: string, enum, int, bool Не поддерживают connections И вообще и никак не получить данные из родительской страницы Custom Actions Можно добавлять команды на host web Единственный способ передать данные из host web в app В любые меню и ribbon Только ссылку, javascript:код не работает Команды могут отображать страницу в диалоге Достаточно добавить HostWebDialog="true" в XML DEMO Provider hosted app Марат Бакиров UMSOFT Заключение Что такое приложения (apps) для SharePoint 2013 SharePoint hosted apps Cloud-Hosted apps Возможности приложений Q&A Станислав Выщепан Марат Бакиров Ай-Теко UMSOFT http://gandjustas.blogspot.ru http://www.gotdotnet.ru/blogs/mbakirov @gandjustas @mbakirov