Получите SharePoint ListItemId по Document-ID в MS Graph API C# SDK

Я пытаюсь получить listItemId на основе идентификатора документа элемента в библиотеке SharePoint.

Под Document-ID я подразумеваю идентификатор, который автоматически присваивается документу при его загрузке в SharePoint.

Я уже успешно получил DriveItemId, используя Document-ID. Вот как выглядит метод:

public async Task<string> GetDriveItemIdByDocIdAsync(string driveId, string docId)
{
    try
    {
        var query = $"Dokument-ID:{docId}";

        var results = await _graphClient.Drives[driveId].SearchWithQ(query).GetAsSearchWithQGetResponseAsync();

        if (results.Value.Count == 1)
        {
            _logger.Info($"Found one document with documentId '{docId}' in drive '{driveId}'.");
            return results.Value.FirstOrDefault().Id;
        }
        else if (results.Value.Count == 0)
        {
            _logger.Info($"No document with documentId '{docId}' found in drive '{driveId}'.");
            throw new Exception($"No document with documentId '{docId}' found in drive '{driveId}'.");
        }
        else
        {
            _logger.Error($"More than one document with documentId '{docId}' found in drive '{driveId}'. Returning the first item with driveItemId == '{driveItemId}'");
            return results.Value.FirstOrDefault().Id;
        }
    }
    catch (ServiceException ex)
    {
        _logger.Error($"Error while trying to get last version of item with documentId '{docId}' in drive '{driveId}'. Exception: '{ex}'");
        throw;
    }

Мне нужен listItemId, чтобы позже прочитать checkInComments различных версий ListItem, насколько я знаю, это возможно только через списки, а не через диски.

Вам не нужно напрямую отвечать с помощью реализации C# SDK, достаточно https-запроса. Спасибо за вашу помощь

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
95
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

DriveItem имеет отношение к listItem, поэтому вы сможете получить доступ к listItem и его идентификатору таким образом

GET /v1.0/drives/{drive_id}/items/{driveItemId}/listItem

С#

var result = await graphClient.Drives["{drive-id}"].Items["{driveItem-id}"].ListItem.GetAsync();
Ответ принят как подходящий

Чтобы получить ListItemId SharePoint, вы можете использовать следующий запрос API Microsoft Graph:

Публикация подробностей подтверждения работы @user2250152

Поскольку у вас есть DriveItemID, вы можете передать его, чтобы получить идентификатор элемента списка.

https://graph.microsoft.com/v1.0/drives/DriveID/items/DriveItemID/listItem

Вы можете использовать select для получения только идентификатора:

https://graph.microsoft.com/v1.0/drives/DriveID/items/DriveItemID/listItem$select=id

И используйте приведенный ниже код:

public class GraphService
{
    public GraphService(string clientId, string clientSecret, string tenantId)
    {
        var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
        _graphClient = new GraphServiceClient(credential);
    }

    private readonly GraphServiceClient _graphClient;

    public async Task<string?> GetListItemIdAsync(string driveId, string driveItemId)
    {
        try
        {
            var listItem = await _graphClient.Drives[driveId].Items[driveItemId].ListItem.GetAsync();

            return listItem?.Id;
        }
        catch (ServiceException ex)
        {
            Console.WriteLine($"Error while trying to get list item with driveItemId '{driveItemId}' in drive '{driveId}'. Exception: '{ex}'");
            throw;
        }
    }
}

public class Program
{
    public static async Task Main(string[] args)
    {
        
        string clientId = "ClientID";
        string clientSecret = "Secret";
        string tenantId = "TenanTID";

        var graphService = new GraphService(clientId, clientSecret, tenantId);

        
        string driveId = "DriveID";
        string driveItemId = "DriveItemID";

        try
        {
            var listItemID = await graphService.GetListItemIdAsync(driveId, driveItemId);
            Console.WriteLine($"List Item ID: {listItemID}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}

Идентификатор элемента списка извлекается:

Другие вопросы по теме