從Excel VBA到SharePoint Online的REST調用僅對某些用戶有效


1

我有數百種用Excel編寫的自動化程序,它們每次運行時都會更新SharePoint列表。我們中的一小部分人可以運行代碼,並且列表會更新良好,但是大多數用戶會遇到某種拒絕訪問錯誤。有兩個用戶組看到此問題:所有者和訪客。大多數所有者可以更新列表,但是一個不能。大多數訪問者不能更新列表,但是可以。這告訴我,它不是所討論列表中的組權限。

我已經重寫了幾次該機制,從ADO(僅通過動態創建和運行VBS文件開始)開始,到Lists.asmx,最後結束了REST調用。無論採用哪種技術,問題都會發生。並且由於我使用REST獲取POST調用的列表類型,所以我可以看到問題甚至發生在GET調用上:

Private Function GetListType(listName As String) As String
    Dim objXMLHTTP As Object
    Dim entityType As String

    entityType = "/_api/Web/Lists/getbytitle('" & listName & "')/ListItemEntityTypeFullName"

    'create XML HTTP object
    Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP.6.0")

    With objXMLHTTP

        'open connection to site
        .Open "GET", SITEURL & entityType, False
        .Send

        'return value from results
        GetListType = Mid$(.ResponseText, InStr(.ResponseText, "SP.Data"), _
                InStrRev(.ResponseText, "<") - InStr(.ResponseText, "SP.Data"))
    End With
End Function

運行該函數時,我在POST的元數據中獲得了用於列表類型的正確值,以創建列表項。當有問題的用戶之一嚐試此操作時,ResponseText會以部分返回"拒絕訪問。您沒有執行此操作或訪問此資源的權限。"

為了運行任何自動化,必須從與要更新的列表相同的站點上的庫中下載它們。因此,它們會在REST調用發生時登錄。我試圖讓用戶選中該框以保持登錄狀態,但這無濟於事。也不要求他們登錄(這是我在選中框之前在測試中很早就看到的行為)。

兩個組都選中了"使用遠程接口"。我已從所有者組中刪除了一個用戶,並將其重新讀到同一組中,但這無濟於事。我沒有該網站的管理員權限,因此無法發布應用程序。我什至看不到"網站應用程序權限"頁面。使用傳遞的用戶名和密碼創建OAuth令牌是一門簡單的事情。由於我們中的某些人可以毫無問題地從Excel更新列表,因此沒有必要。我還檢查了一些可以使用和不能使用REST調用的用戶的權限,它們是相同的,並且通過正確的組給出。

任何幫助將不勝感激。

0

After another month of testing this at multiple sites, we determined that the solution is in fact to have our users check the "Keep me signed in" box on the Microsoft sign in page in all the browsers they use (although it's probably enough to have them do it in IE or their default browser).


0

Try:

Dim a As New MSXML2.ServerXMLHTTP60

a.Open "GET", url, False

Be sure to add reference to "Microsoft XML, v6.0"