Как получить сведения о пользователе SharePoint, если идентификатор поиска отсутствует в списке информации о пользователC#

Место общения программистов C#
Anonymous
Как получить сведения о пользователе SharePoint, если идентификатор поиска отсутствует в списке информации о пользовател

Сообщение Anonymous »

Я подключаюсь к сайту и сохраняю идентификатор

Код: Выделить всё

var site = System.Threading.Tasks.Task.Run(() => graphClient.Sites[siteId].GetAsync(requestConfiguration => requestConfiguration.QueryParameters.Expand = new string[] { "drives" })).Result;

siteActualId = site.Id;
Затем я просматриваю диски, чтобы найти интересующий меня сайт.
Затем я обрабатываю каждый элемент и, если это папка, я обрабатываю его элементы.
Когда я получаю элемент, который является документом, я получаю его элемент списка

Код: Выделить всё

doc = System.Threading.Tasks.Task.Run(() => graphClient.Drives[driveId].Items[item.Id].GetAsync(requestConfiguration => requestConfiguration.QueryParameters.Expand = new string[] { "ListItem" })).Result;
Затем я использую дополнительные данные полей, чтобы получить значения полей

Код: Выделить всё

var fields = doc.ListItem.Fields.AdditionalData;

values[APPROVAL_COMMENTS] = GetFieldValue(fields, "ApprovalComments");

private string GetFieldValue(IDictionary fields, string key, bool date = false)
{
if (fields.ContainsKey(key))
{
if (date)
return ((DateTime)fields[key]).AddHours(offset).ToString("yyyy/MM/dd HH:mm:ss");
return fields[key].ToString();
}
return string.Empty;
}
Все работает без проблем. Однако, когда у меня есть поле пользователя, вместо получения имени я получаю идентификатор, который затем использую для поиска имени пользователя, просматривая список информации о пользователе

Код: Выделить всё

values[APPROVER] = GetUserFieldValue(fields, "DocumentApproverLookupId");

private string GetUserFieldValue(IDictionary fields, string lookupId)
{
if (!fields.ContainsKey(lookupId))
return string.Empty;

string id = (string)fields[lookupId];

if (id.Length == 0)
return string.Empty;

if (!UserNames.ContainsKey(id))
{
if (token == null || token?.ExpiresOn < DateTime.UtcNow)
token = clientSecretCredential.GetToken(new TokenRequestContext(scopes));

var client = new RestClient($"https://graph.microsoft.com/v1.0/sites/{siteActualId}/lists('User Information List')/items/{id}?$expand=fields($select=Title)");
var request = new RestRequest(Method.GET);

request.AddHeader("Authorization", "Bearer " + token?.Token);

var response = client.Execute(request);

if (!string.IsNullOrEmpty(response.ErrorMessage))
throw new Exception("User name lookup failed: " + response.ErrorMessage);

int i = response.Content.LastIndexOf(",\"Title\":\"");

if (i == -1)
UserNames.Add(id, "Unknown");
else
{
i += 10;
int j = response.Content.IndexOf("\"", i);

UserNames.Add(id, response.Content.Substring(i, j - i));
}
}

return UserNames[id];
}
В большинстве случаев это работает, но некоторых идентификаторов нет в списке.
Как мне получить имя пользователя, если его идентификатор отсутствует в списке информации о пользователях сайта?>

Вернуться в «C#»