Обзор SharePoint Education. Часть 3

Третья часть обзора SharePoint Education, посвященная API.

SharePoint Education API

SharePoint Education API

Веб-сервис

SharePoint Education содержит замечательный сервис, доступный по адресу вида: http://speduapp/_vti_bin/edu/Data.svc.

Сервис DataProvider содержит два метода: ProcessGetRequest, ProcessPostRequest. Оба метода принимают единственный параметр типа Request.

Запросы могут быть трех видов: DataLayerRequest, ApplicationLayerRequest, BulkRequest:

SharePoint Education Request

SharePoint Education API

Полная иерархия дочерних классов Request выглядит вот так:

  • DataLayerRequest
    • DataLayerReadRequest
      • GetEntitiesByTypeRequest
  • ApplicationLayerRequest
    • ApplicationLayerReadRequest
      • GetCurrentUserRequest
      • IsAListRefreshingRequest
    • ApplicationLayerWriteRequest
      • AddRequest
      • ChangeRequest
      • CompleteCopyRequest
      • CopyDocumentByUrlRequest
      • CopyDocumentRequest
      • CopyRequest
      • PublishGradesRequest
      • RemoveRequest
  • BulkRequest

Все варианты я описывать не буду, покажу пару примеров использования сервиса для работы с SharePoint Education.

Базовый класс Request содержит обязательное свойство Context. Для начала про него необходимо знать только то, что указание локали обязательно:

// Контекст запроса
var requestContext = new DataLayerRequestContext
{
    Locale = CultureInfo.CurrentCulture.Name
};

При использовании DataLayerRequest необходимо использовать контекст типа DataLayerRequestContext (наследник RequestContext). В этом случае в контексте можно указывать дополнительные параметры:

  • ForceCacheExpireField
  • ForceSearchReadField
  • ForceSpReadField
  • ForceUdwReadField

Если первые три интуитивно понятны, то последний для меня остается загадкой.

Получение текущего пользователя

Самый простой сценарий: получение информации о текущем пользователе:

// Запрос
var userRequest = new GetCurrentUserRequest
{
    // Контект запроса
    Context = new DataLayerRequestContext
    {
        Locale = CultureInfo.CurrentCulture.Name
    }
};
// Получение ответа. Ожидаем EntityResponse
var response = client.ProcessGetRequest(userRequest) as EntityResponse;
if (response != null)
{
    // Первая сущность коллекции в ответе сервера
    var entity = response.Entities[0];
    // Приводим к типу User
    var user = entity as User;
    if (user != null)
    {
        // TODO
    }
}

Еще диаграмма для понимания связи и содержания классов Entity и User.

Второй пример посложней

Получение сущностей из SharePoint Education

Теперь получим коллекцию курсов с помощью запроса типа GetEntitiesByTypeRequest. Типы сущностей (Entity) в SharePoint Education все кроме пользователей описываются соответствующими типами содержимого:

Entity EntityType
AcademicDocument 0x0101008DA831F4ACC511DF8205CDBFDFD7208554
Announcement 0x0104008A4047FFBB374E0A8932030BE989F795
AssignedAssignment 0x0108005CBC699A566E11E0A996B888DFD7208551
Assignment 0x010063C2F478ACC511DFB869B5BFDFD720851252
AssignmentCategory 0x010063C2F478ACC511DFB869B5BFDFD720851256
AssignmentGrade 0x010063C2F478ACC511DFB869B5BFDFD72085125551
Community 0x010063C2F478ACC511DFB869B5BFDFD7208511
CommunityEntity 0x010063C2F478ACC511DFB869B5BFDFD7208512
CommunityMembership 0x010027FC2137D8DE4B00A40E14346D070D5201
CopyWorkItem 0x010063C2F478ACC511DFB869B5BFDFD72085120101
Course 0x010063C2F478ACC511DFB869B5BFDFD720851101
CourseGrade 0x010063C2F478ACC511DFB869B5BFDFD72085125552
Document 0x0101008DA831F4ACC511DF8205CDBFDFD72085
DocumentFolder 0x012000324696745BE411E0A68280E7DFD7208551
DocumentLookup 0x01010A00256755BE5C9E11E09BD59556DFD7208552
EduDocument 0x0101008DA831F4ACC511DF8205CDBFDFD72085
Entity 0x010063C2F478ACC511DFB869B5BFDFD72085
Event 0x0102001E41EAB6184B11E0AE8631B7DFD7208553
EventSchedule 0x0102001E41EAB6184B11E0AE8631B7DFD7208554
FeedbackDocument 0x0101008DA831F4ACC511DF8205CDBFDFD7208552
Grade 0x010063C2F478ACC511DFB869B5BFDFD720851255
Lesson 0x010063C2F478ACC511DFB869B5BFDFD720851251
Link 0x01010A00256755BE5C9E11E09BD59556DFD7208551
Meeting 0x0102001E41EAB6184B11E0AE8631B7DFD720855351
MeetingSchedule 0x0102001E41EAB6184B11E0AE8631B7DFD720855451
Submission 0x010063C2F478ACC511DFB869B5BFDFD720851254
User User
UserCommunityMembership 0x01002DC5EE125BEC11E093DEDDF0DFD72086
WorkItem 0x010063C2F478ACC511DFB869B5BFDFD720851201

При формировании запроса помимо обязательного параметра EntityType можно также указать свойство Query, которое используется для фильтрации и сортировки запрашиваемых данных.

С сортировкой всё просто: указываем поля и направление сортировки. Что касается фильтрации, то CAML-запросы в SharePoint Education инкапсулированы в FilterExpression:

На мой взгляд замечательная реализация.

В примере я создал запрос для выбора всех активных курсов:

using (var client = new DataProviderClient(binding))
{
    // Course ContentTypeId
    var courseEntityTypeId = "0x010063C2F478ACC511DFB869B5BFDFD720851101";
    // Parameter Context.Locale is required
    var courseRequestContext = new RequestContext
    {
        Locale = CultureInfo.CurrentCulture.Name
    };
    // Request
    var courseRequest = new GetEntitiesByTypeRequest
    {
        Context = courseRequestContext,
        EntityType = courseEntityTypeId,
        Query = new Query
        {
            Filter = new ConditionFilterExpression
            {
                Field = "Status",
                Operator = ConditionFilterOperator.EQ,
                Value = "Active"
            }
        }
    };
    // Response
    var courseResponse = client.ProcessGetRequest(courseRequest);
    // List of courses
    var courses = ((EntityResponse)courseResponse)
        .Entities
        .Cast<Course>();
}

Все остальные запросы строятся аналогично, принципиальных отличий нет. Пробуйте.

Виталий Жуков

Виталий Жуков

SharePoint архитектор, разработчик, тренер, Microsoft MVP (Office Development). Более 15 лет опыта работы с SharePoint, Dynamics CRM, Office 365, и другими продуктами и сервисами Microsoft.

Смотрите также

Новый сайт группы SharePoint. Как это работает

Новый сайт группы SharePoint. Как это работает

SharePoint 2019 Preview

SharePoint 2019 Preview

Управление большими списками/библиотеками в SharePoint

Управление большими списками/библиотеками в SharePoint

SharePoint 2013/2016. Настройка хлебных крошек

SharePoint 2013/2016. Настройка хлебных крошек

SharePoint 2016. Кастомизация меню SuiteBar

SharePoint 2016. Кастомизация меню SuiteBar

SharePoint 2016. Кастомизация SuiteBar

SharePoint 2016. Кастомизация SuiteBar

Домашняя страница сайта SharePoint

Домашняя страница сайта SharePoint

Презентация и скрипты со встречи сообщества по SharePoint и Office 365

Презентация и скрипты со встречи сообщества по SharePoint и Office 365

PowerShell DSC. SharePoint

PowerShell DSC. SharePoint

PowerShell DSC. Сертификат для шифрования пароля

PowerShell DSC. Сертификат для шифрования пароля

PowerShell DSC. Учетные записи

PowerShell DSC. Учетные записи

Встреча сообщества по SharePoint и Office 365

Встреча сообщества по SharePoint и Office 365

SharePoint 2016. QR-code

SharePoint 2016. QR-code

Возможности SharePoint 2010/2013/2016

Возможности SharePoint 2010/2013/2016

Gmail IIS SMTP relay

Gmail IIS SMTP relay

SharePoint 2016. Извещения мозаикой

SharePoint 2016. Извещения мозаикой

Сертификация SharePoint по-новому

Сертификация SharePoint по-новому

SharePoint. Получение списка сайтов

SharePoint. Получение списка сайтов

Планирование фермы SharePoint

Планирование фермы SharePoint

SharePoint Excel Services. Отображение диаграммы на странице

SharePoint Excel Services. Отображение диаграммы на странице

SharePoint 2016 Release Candidate

SharePoint 2016 Release Candidate

Обзор SharePoint Education. Часть 2

Обзор SharePoint Education. Часть 2

Обзор SharePoint Education. Часть 1

Обзор SharePoint Education. Часть 1

SharePoint 2013 Образование. Установка и настройка

SharePoint 2013 Образование. Установка и настройка

SharePoint 2016 IT Preview

SharePoint 2016 IT Preview

SharePoint и SMS. Часть 2. Регистрация OMS-сервиса

SharePoint и SMS. Часть 2. Регистрация OMS-сервиса

SharePoint и SMS. Часть 1. Создание OMS веб-сервиса

SharePoint и SMS. Часть 1. Создание OMS веб-сервиса

SharePoint Day: 14 декабря, Москва

SharePoint Day: 14 декабря, Москва

RuSUG 17.10.2013. Презентация с моего доклада о новом поиске в SharePoint 2013

RuSUG 17.10.2013. Презентация с моего доклада о новом поиске в SharePoint 2013

SharePoint 2013 Ribbon API. Версии 14.3 и 15.4

SharePoint 2013 Ribbon API. Версии 14.3 и 15.4

Встреча RuSUG 17-го октября

Встреча RuSUG 17-го октября

SharePoint 2013. Служба ServiceDesk за 8 часов либо правильный проект

SharePoint 2013. Служба ServiceDesk за 8 часов либо правильный проект

SharePoint 2010/2013. Локализация данных

SharePoint 2010/2013. Локализация данных

Список возможностей SharePoint 2013

Список возможностей SharePoint 2013

SharePoint 2013. Типы полей

SharePoint 2013. Типы полей

SharePoint 2013 Enterprise Search. Часть 2. Создание обработчика контента

SharePoint 2013 Enterprise Search. Часть 2. Создание обработчика контента

SharePoint 2013 Enterprise Search. Часть 1. Логическая архитектура

SharePoint 2013 Enterprise Search. Часть 1. Логическая архитектура

SharePoint Ribbon. Создание многоуровневого меню

SharePoint Ribbon. Создание многоуровневого меню

SharePoint Ribbon. Использование ColorPicker'а

SharePoint Ribbon. Использование ColorPicker'а

Разработка для SharePoint. Как это было и как это будет

Разработка для SharePoint. Как это было и как это будет

SharePoint. История социализма за 10 лет

SharePoint. История социализма за 10 лет

SharePoint 2013 Preview

SharePoint 2013 Preview

Использование штрихкодов в SharePoint 2010

Использование штрихкодов в SharePoint 2010

Unable to locate the xml-definition for FieldName

Unable to locate the xml-definition for FieldName

SharePoint 2010. Апрельский накопительный пакет обновлений

SharePoint 2010. Апрельский накопительный пакет обновлений

Не удалось найти XML-файл в указанном расположении

Не удалось найти XML-файл в указанном расположении

Служба синхронизации профилей пользователей. Ошибки

Служба синхронизации профилей пользователей. Ошибки

Делаем сайт на SharePoint 2010. Построение иерархии страниц

Делаем сайт на SharePoint 2010. Построение иерархии страниц

Делаем сайт на SharePoint 2010. Брендинг Wiki-страниц

Делаем сайт на SharePoint 2010. Брендинг Wiki-страниц

Делаем сайт на SharePoint 2010. Оптимизация

Делаем сайт на SharePoint 2010. Оптимизация

Делаем сайт на SharePoint 2010. Брендинг

Делаем сайт на SharePoint 2010. Брендинг

Обработка большого количества элементов в SharePoint

Обработка большого количества элементов в SharePoint

Получение уникальных значений поля списка

Получение уникальных значений поля списка

DeskWork 5. Функциональность (продолжение)

DeskWork 5. Функциональность (продолжение)

Сокрытие информации о пользователе создавшем/изменившем элемент

Сокрытие информации о пользователе создавшем/изменившем элемент

Error : Code blocks are not allowed in this file

Error : Code blocks are not allowed in this file

SharePoint Client Object Model. Управляемый код

SharePoint Client Object Model. Управляемый код

Использование контрола HtmlEditor. Часть 3

Использование контрола HtmlEditor. Часть 3

SharePoint 15 SDK

SharePoint 15 SDK

PeopleEditor и Internet Explorer 9

PeopleEditor и Internet Explorer 9

Использование контрола HtmlEditor. Часть 2

Использование контрола HtmlEditor. Часть 2

Использование контрола HtmlEditor. Часть 1

Использование контрола HtmlEditor. Часть 1

Пропадающий контрол выбора представления списка

Пропадающий контрол выбора представления списка

Развертывание библиотеки документов с файлами

Развертывание библиотеки документов с файлами

Отключенные учетные записи и PeoplePicker

Отключенные учетные записи и PeoplePicker

Пропадающий TextBox в Telerik Reporting

Пропадающий TextBox в Telerik Reporting

Длительные операции в SharePoint. Request timed out

Длительные операции в SharePoint. Request timed out

Длительные операции в SharePoint. Изнутри

Длительные операции в SharePoint. Изнутри

Длительные операции в SharePoint. Снаружи

Длительные операции в SharePoint. Снаружи

DeskWork. Версия 5.1

DeskWork. Версия 5.1

DeskWork 5. Часть 2. Функциональность

DeskWork 5. Часть 2. Функциональность

DeskWork 5. Часть 1. Установка

DeskWork 5. Часть 1. Установка

SharePoint 2010. Random ListItem

SharePoint 2010. Random ListItem

Custom ListDefinition. Отключаем диалоги

Custom ListDefinition. Отключаем диалоги

SharePoint 2010 UpdatePanel. Request Notification

SharePoint 2010 UpdatePanel. Request Notification

Получение размера вложений SPListItem'а

Получение размера вложений SPListItem'а

SharePoint 2010. Переопределение форм типа содержимого

SharePoint 2010. Переопределение форм типа содержимого

SharePoint 2007/2010. Привязываем EventReceiver к типу содержимого

SharePoint 2007/2010. Привязываем EventReceiver к типу содержимого

Изменяем appSettings в config-файле

Изменяем appSettings в config-файле

SharePoint 2010. Добавляем сборку в пакет

SharePoint 2010. Добавляем сборку в пакет

SharePoint 2007/2010. The security validation for this form is invalid

SharePoint 2007/2010. The security validation for this form is invalid

SharePoint 2010. JavaScript IntelliSence

SharePoint 2010. JavaScript IntelliSence

SharePoint 2010. Локализация SiteDefinition

SharePoint 2010. Локализация SiteDefinition

SharePoint 2007. Получение данных из нескольких списков и узлов

SharePoint 2007. Получение данных из нескольких списков и узлов

SharePoint 2007. Максимальное/минимальное значение поля в списке

SharePoint 2007. Максимальное/минимальное значение поля в списке

SharePoint 2007. Свой контрол на панели свойств веб-парта

SharePoint 2007. Свой контрол на панели свойств веб-парта

SharePoint 2007. База данных содержимого

SharePoint 2007. База данных содержимого

SharePoint 2007. Проверка на наличие элемента в списке

SharePoint 2007. Проверка на наличие элемента в списке