Обзор 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 2007. Проверка на наличие элемента в списке

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

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

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

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

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

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

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

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

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