Я пытаюсь получить 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-запроса. Спасибо за вашу помощь
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}");
}
}
}
Идентификатор элемента списка извлекается: