簡體   English   中英

MS Graph SDK:用戶的 SharePoint FollowedSites

[英]MS Graph SDK: User's SharePoint FollowedSites

我正在嘗試使用 MSGraph SDK V4.54.0 獲取用戶關注的 SharePoint 站點的列表。 我發現的所有示例都使用await graphClient.Me.FollowedSites.Request().GetAsync() 我沒有使用Me ,而是使用特定用戶,所以我正在訪問它await graphClient.Users[userEmailAddress].FollowedSites.Request().GetAsync()

這是我收到的錯誤消息(我正在使用 MSTest):

Microsoft.Graph.ServiceException: Code: generalException
Message: General exception while processing
Inner error:
    AdditionalData:
    date: 2023-05-31T14:19:42
    request-id: ***
    client-request-id: ***
ClientRequestId: ***

  Stack Trace: 
<SendAsync>d__18.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
TaskAwaiter.ThrowForNonSuccess(Task task)
TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
<SendRequestAsync>d__40.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
TaskAwaiter.ThrowForNonSuccess(Task task)
TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
<SendAsync>d__34`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
TaskAwaiter.ThrowForNonSuccess(Task task)
TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
<GetAsync>d__1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
TaskAwaiter.ThrowForNonSuccess(Task task)
TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
TaskAwaiter`1.GetResult()
<SharePointSite_TestFollowedSites>d__88.MoveNext() line 2364
--- End of stack trace from previous location where exception was thrown ---
TaskAwaiter.ThrowForNonSuccess(Task task)
TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
ThreadOperations.ExecuteWithAbortSafety(Action action)

讓我印象深刻的是,盡管 SDK 公開了它,但 API 中可能沒有針對 Users[x].FollowedSites 的端點。

我寫了下面的代碼,但是如您所見,它遍歷所有可能的站點,查找“用戶信息列表”,最后在用戶的項目中查找。 不用說,這是非常低效的並且需要很長時間。 大約 20 分鍾。 而且我不能 100% 確定它是否正常工作,因為它在初始請求中返回 200 個站點,這似乎有點可疑。

MSGraphClient graph = GetMSGraphClient_WithClientSecret();
SharePointClient spClient = graph.SharePoint;

var defaultField = default(KeyValuePair<string, object>);

var _sites = new List<Site>();

var sites = await graph.Client
    .Sites
    .Request()
    .GetAsync();

foreach (var site in sites)
{
    var list = (await graph.Client
        .Sites[site.Id]
        .Lists
        .Request()
        .Filter("displayName eq 'User Information List'")
        .GetAsync()).FirstOrDefault();

    if (list != null)
    {
        var items = await graph.Client
            .Sites[site.Id]
            .Lists[list.Id]
            .Items
            .Request()
            .GetAsync();

        foreach (var item in items)
        {
            var fields = await graph.Client
                .Sites[site.Id]
                .Lists[list.Id]
                .Items[item.Id]
                .Fields
                .Request()
                .GetAsync();

            var foundField = fields.AdditionalData.FirstOrDefault((_f) => _f.Key == "UserName" && _f.Value.ToString().ToLower() == graph.AuthenticationOptions.UserName.ToLower());
            if (!foundField.Equals(defaultField))
            {
                _sites.Add(site);
                break;
            }
        }
    }
}

bool actual = _sites.Count > 0;

Assert.IsTrue(actual);

有沒有更好/更有效的方法來獲取用戶關注的網站?

檢查您是否有權查看用戶關注的網站。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM