Размещение нового элемента в списке SharePoint с помощью API MS Graph с полем People - PullRequest
1 голос
/ 02 июня 2019

Я настроил веб-приложение React, использующее данные, используя Microsoft Graph из SharePoint Online, и это работает хорошо.Я могу читать и писать в списки SP, но я не могу найти какую-либо документацию о том, как структурировать данные для записи в поле «Люди / Группа».

Запрос списка с этими полями приводит к "ManagerLookupId": "12"где Manager - имя поля выбора людей.Я могу разрешить "12", используя строку запроса расширения.Я не могу понять, как писать в него, используя конечные точки /v1.0 или /beta из Microsoft Graph

. Отправка этого объекта в соответствующие конечные точки работает (для однострочного текста, выбора и т. Д.).

{
  "fields": {
    "Title": "a",
    "Category": "b",
    "Description": "c"
  }
}

Но если бы я добавил в поле выбора людей, я не знаю, как структурировать эти данные.Я пробовал адрес электронной почты и GUID, оба из которых не работали.Глядя на то, как SP делает это изначально, кажется, что это значение передается при отправке для поля выбора людей (заменили реальные значения) -

{
  "Key": "i:0#.f|membership|EMAIL",
  "DisplayText": "NAME",
  "IsResolved": true,
  "Description": "EMAIL",
  "EntityType": "User",
  "EntityData": {
    "IsAltSecIdPresent": "False",
    "Title": "POSITION",
    "Email": "EMAIL",
    "MobilePhone": "",
    "ObjectId": "GUID",
    "Department": ""
  },
  "MultipleMatches": [],
  "ProviderName": "Tenant",
  "ProviderDisplayName": "Tenant"
}

При репликации этого поля также не удается обновить поле «Люди» в списке.

Мне не удалось найти какую-либо документацию на сайте MS Graph API или аналогичные предыдущие вопросы на их Github, поэтому любая помощь будет очень признательна!

Ответы [ 2 ]

2 голосов
/ 03 июня 2019

Вы можете найти некоторую информацию об этом в документации для FieldValueSet:

Поля поиска (как Author выше) не возвращаются по умолчанию. Вместо этого сервер возвращает поле «LookupId» (например, AuthorLookupId выше), ссылающееся на listItem, нацеленный в поиске. Имя поля 'LookupId' - это исходное имя поля, за которым следует LookupId.

Под прикрытием это побочный эффект того, как SharePoint отслеживает пользователей. Как исторический артефакт, SharePoint поддерживает свою собственную базу данных пользователей. В то время как был момент, когда администраторы SP были очень довольны этими пользователями, сегодня это полностью автоматизированный процесс. Он просто создает новую запись SPUser в первый раз, когда видит аутентифицированного пользователя AAD. Эти пользовательские записи имеют собственное свойство id. Это обычный INT, а не GUID (в вашем примере их id равен 12).

При обновлении ListItem необходимо использовать id в SharePoint. Вы можете передать это как одно значение или как массив:

{
  "fields": {
     "ManagerLookupId": 12
  }
}

{
  "fields": {
     "ManagerLookupId": [10,11,12]
  }
}

Вот в чем проблема, нет способа получить этого пользователя SharePoint id от Microsoft Graph. Очевидно, что это действительно затрудняет создание / обновление ListItem. Чтобы обойти это, вы можете использовать ensureUser конечную точку старого SharePoint REST API:

http://<sitecollection>/<site>/_api/web/ensureUser(logonName)

Имейте в виду, вам также понадобится токен для SharePoint для вызова этого API. Если вы используете конечную точку AAD v1, обычно это просто вопрос обновления токена с использованием ресурса SharePoint (https://{tenant}.sharepoint.com) для этого вызова и последующего обновления до ресурса Graph (https://graph.microsoft.com) для других ваших вызовов.

0 голосов
/ 03 июня 2019

Моя тестовая демонстрация, поле "Пользователь - люди" позволяет нескольким пользователям.

{
  "fields": {
    "Title": "test",
    "UserLookupId@odata.type": "Collection(Edm.Int32)",
    "UserLookupId":[10,23]
  }
}

Для одного пользователя.

{
  "fields": {
    "Title": "test",
    "UserLookupId@odata.type": "Edm.Int32",
    "UserLookupId":23
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...