Как получить пользователя из поля пользователя LookupId - PullRequest
1 голос
/ 10 апреля 2020

У меня есть список в sharepoint онлайн. И в этом списке у меня есть поле person.

Когда я вызываю конечную точку API, чтобы получить все элементы в списке, я получаю значение LookupId для поля person.

Я пытался чтобы получить пользователя, используя значение lookupid, но оно не работает, потому что id не распознан.

lookupid - это int (например, 21) вместо guid.

Чего-то не хватает в конфигурации поля человека или в моих вызовах Microsoft Graph API?

Ответы [ 2 ]

2 голосов
/ 10 апреля 2020

Когда пользователь впервые входит в семейство сайтов SharePoint, ListItem создается в скрытом списке сведений о пользователе. LookupId в поле PersonOrGroup ссылается на ListItem в этом списке. URL-адрес для списка информации о пользователях для SharePoint Online должен быть следующим:

https://{yourTenant}.sharepoint.com/{yourSiteCollection}/_catalogs/users/detail.aspx

Поскольку список информации о пользователях является общим c списком SharePoint, вы можете запросить этот список с помощью Graph. Сначала получите идентификатор списка для Списка информации о пользователе. Простой способ получить идентификатор списка - это просмотреть источник для сайта информации о пользователях через Chrome и выполнить поиск по «listId». Вы должны найти такой результат:

"listId":"{yourListIdIsHere}"

Скопируйте идентификатор. Используя скопированный идентификатор, идентификатор вашего root сайта и LookupId, вы можете получить ListItem в списке информации о пользователе:

https://graph.microsoft.com/v1.0/sites/{siteId}/lists/{pasteCopiedListId}/item/{lookUpId}?$expand=Fields

ListItem содержит информацию о пользователе, такую ​​как электронная почта , который может использоваться для идентификации пользователя Azure:

https://graph.microsoft.com/v1.0/users/{eMail}

Вопрос: Как я могу получить скрытый список информации о пользователях из Microsoft Graph?

Если Вы не хотите использовать трюк с Google Chrome, чтобы получить идентификатор, есть другой способ получить сайт. Как правило, если вы хотите получить идентификатор для любого сайта, вы должны позвонить:

https://graph.microsoft.com/v1.0/sites/{siteId}/lists

Однако вы не найдете идентификатор в Списке информации о пользователях, даже если вы включите скрытые сайты. Я не знаю, почему. Дополнительная проблема, по-видимому, заключается в том, что вы не можете фильтровать списки по их имени:

https://graph.microsoft.com/v1.0/sites/{siteId}/lists?$filter=name eq 'users'

Запрос возвращает ошибку, что предоставленный оператор фильтра не поддерживается. Единственный способ получить список без знания идентификатора - использовать свойство displayName списка. Однако displayName зависит от вашей локализации. Итак, поскольку я из Германии, я могу получить сайт, используя запрос:

https://graph.microsoft.com/v1.0/sites/{siteId}/lists?$filter=displayName eq 'Benutzerinformationsliste'

Вам нужно будет заменить Benutzerinformationsliste на ваше локализованное имя. Это возвращает ожидаемый результат:

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#sites('xxx')/lists(id,name,displayName)",
    "value": [
        {
            "@odata.etag": "\"xxx\"",
            "id": "xxx",
            "name": "users",
            "displayName": "Benutzerinformationsliste"
        }
    ]
}

Как видите, имя списка - «пользователи», поэтому, почему первый оператор фильтра не работает, для меня немного загадка. Может быть, кто-то здесь знает и может помочь.

1 голос
/ 13 апреля 2020

Как уже упоминалось @ QuestionsPS1991, поле people фактически указывает на скрытый список пользователей. С помощью lookupid мы можем получить пользователя следующими способами:

enter image description here

//////////// updated

По умолчанию MS Graph не возвращает этот список пользователей. Вы можете жестко указать идентификатор списка или следовать предложению @@ QuestionsPS1991. Ниже мой тест:

enter image description here

enter image description here

...