【发布时间】:2020-04-26 20:14:10
【问题描述】:
问题
是否可以使用 VBA 代码调用 Microsoft Graph API?
如果是,如何处理O365授权?我看到很多话题都说要在 Microsoft Azure 中创建一个应用程序来获取令牌,但我很惊讶我必须这样做才能在本地使用。
我尝试了什么
在发现 Microsoft Graph 之后,我在 Graph Explorer 中尝试了这个 API https://graph.microsoft.com/v1.0/planner/tasks
我能够在 Planner 中创建任务!
因此,在我看来,可以从直接在 Outlook 中执行的 VBA 代码调用此 API。
我在 Outlook 中创建了这个宏:
Sub TaskPlannerCreation()
Dim PlannerService As New MSXML2.XMLHTTP60
Dim sData As Variant
sData = " { "" ""planId"": ""K9Zv2QHm1U-GSAhd-PTGZfdFeOn"",""bucketId"": ""b6NVNiEIQkGZeBBzn7kWqJvAGvvs"",""title"": ""Outlook task"" } "
With PlannerService
.Open "POST", "https://graph.microsoft.com/v1.0/planner/tasks", False
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Accept", "application/json"
.setRequestHeader "User-Agent", "xx"
.Send (sData)
我有一个授权错误
错误代码 401
2020 年 3 月 12 日更新: 调用 Graph Explorer 时发现获取 Graph Api 令牌分析 URL 的解决方案(对我来说非常有效):
Function GetToken()
Dim xml As New MSXML2.XMLHTTP60
Dim doc As MSHTML.HTMLDocument
Dim urltoken As String
'copy paste the URL you see when calling Microsoft Graph Explorer and add prompt + domain_hint parameters
urltoken = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?response_mode=form_post&nonce=graph_explorer&mkt=fr-FR&client_id={clientid}&response_type=token&scope=openid profile User.ReadWrite User.ReadBasic.All Sites.ReadWrite.All Contacts.ReadWrite People.Read Notes.ReadWrite.All Tasks.ReadWrite Mail.ReadWrite Files.ReadWrite.All Calendars.ReadWrite&prompt=none&domain_hint=organizations"
xml.Open "GET", urltoken, False
xml.Send
If xml.readyState = 4 And xml.Status = 200 Then
Set doc = New MSHTML.HTMLDocument
doc.Body.innerHTML = xml.responseText
GetToken = doc.getElementsByName("access_token")(0).Value
sSuccess = True
Else
MsgBox "Error" & vbNewLine & "Ready state: " & xml.readyState & _
vbNewLine & "HTTP request status: " & xml.Status
sSuccess = False
End If
Set xml = Nothing
End Function
所以使用 VBA 调用 Graph API 是可能的:)
【问题讨论】:
-
您需要添加一个Authorization header with a bearer access token。这意味着您需要实现或查找其他人的 OAuth 客户端实现 (here's a sample that uses Google auth)。我建议阅读此documentation first 和identity documentation。
-
我终于使用隐式授权流技术成功获得了 Graph Api connexion 的令牌。我认为它对于所有像我一样在 VBA 和 O365 授权方面知识很差但有很多需求/想法来使用 O365 提高生产力的用户很有用。
标签: vba api outlook authorization microsoft-graph-api