通過重復運行的Microsoft Flow由OAuth認證后獲取Access Token並將其更新到實體記錄


我是微軟Dynamcis 365 & Power Platform方面的工程師羅勇,也是2015年7月到2018年6月連續三年Dynamics CRM/Business Solutions方面的微軟最有價值專家(Microsoft MVP),歡迎關注我的微信公眾號 MSFTDynamics365erLuoYong ,回復341或者20190603可方便獲取本文,同時可以在第一間得到我發布的最新博文信息,follow me!

Dynamics 365支持OAuth認證,我前面已經寫過幾篇文章了,這次我將 利用Fiddler模擬通過Dynamics 365的OAuth 2 Client Credentials認證后調用Web API 文章的方法用Microsoft Flow來實現。

登錄 https://flow.microsoft.com 后,點擊左邊的 【My flows】 導航項,再點擊右邊的 【New】 > 【Scheduled - from blank】。

 

在出來的窗口中為Flow設置好名稱,我這里設置為Repeat every 50 Minute,也就是每隔50分鍾運行一次,因為獲取到的Access Token默認有效期是1個小時。然后點擊【Create】按鈕。

 

在界面點擊【+ New step】按鈕。

 

我這里輸入 HTTP來篩選,在篩選結果中選擇第一個HTTP。

 

我這里設置該請求的屬性如下,請求的URI和內容的說明,返回內容說明請參考我的博文:利用Fiddler模擬通過Dynamics 365的OAuth 2 Client Credentials認證后調用Web API

 

一般應該為步驟起個合適的名字,方法是點擊步驟旁邊的更多命令圖標,點擊 【Rename】,我這里更新為【Get Dynamics 365 Access Token】,這個名字后面的步驟中我會用到。

 

 

我這里將獲取到的access token存入實體 Access Token的Name為 LuoYong_Demo_App 的記錄中。首先我需要查出這條記錄,然后更新它。

我繼續添加一個步驟,使用Common Data Service進行篩選,選擇 【List records】這種步驟。

 

 我設置 Environment為 (Current) ,這個方便進行不同環境之前遷移,記得自己在新建Microsoft Flow的時候選擇好合適的Environment。Enity Name選擇合適的,然后點擊【Show advanced options】

 

查詢記錄當然需要設置查詢條件,也就是OData語法,設置到【Filter Query】這個字段旁,我這里設置的是 new_name eq 'LuoYong_Demo_App' ,Top Count我這里設置為1,因為我只需要找到符合記錄的第一條即可,然后我將這個步驟重命名為【Get Access Token Records】。

 

然后再新增一個Common Data Service類別下面的【Update a record】步驟。

 

Environment還是設置為 (Current),Entity Name設置為要更新的實體,Record identifier就是要更新記錄的主鍵(Guid),這個值應該是前面步驟【Get Access Token Records】 查詢到的記錄集中的第一條記錄的new_accesstokenid字段的值,這里利用表達式來設置,點擊字段值后,在右邊的彈出框中切換到 Expression,輸入 body('Get_Access_Token_Records')['value'][0]['new_accesstokenid'] 然后點擊OK按鈕。

 

再點擊【Show advanced options】按鈕設置要更新字段的值,以類似的方法設置設置Access Token字段的值為表達式: body('Get_Dynamics_365_Access_Token')['access_token'] ,

 

繼續以類似方法為【Valid To Datetime】字段值設置為表達式 addHours(utcNow(),1) 。

 

設置好了以后這個步驟的設置如下:

 

然后點擊【Save】按鈕保存該Microsoft Flow,最后這個Flow如下:

 

然后我們來測試下,點擊【Test】。

 

選擇【I'll perform the trigger action】,然后點擊【Save & Test】。

 

在彈出窗口中點擊【Run flow】按鈕。

 

在提示成功框中點擊【See flow run activity】查看運行記錄。

 

運行報錯:

 

 

是獲取access token步驟報錯,報錯信息如下:

{"error":"invalid_request","error_description":"AADSTS900144: The request body must contain the following parameter: 'grant_type'.\r\nTrace ID: ccb315ef-4fbb-4c3b-ad40-825dfd7c4a00\r\nCorrelation ID: 8cce0977-0d45-43cb-a0ba-9b911bd949e1\r\nTimestamp: 2019-06-03 11:07:29Z","error_codes":[900144],"timestamp":"2019-06-03 11:07:29Z","trace_id":"ccb315ef-4fbb-4c3b-ad40-825dfd7c4a00","correlation_id":"8cce0977-0d45-43cb-a0ba-9b911bd949e1"}

 

怎么辦?可以看到請求的內容和返回,我發現是請求時候,默認請求的Content-Type是application/json,但實際上我這個請求並不是,所以需要自己賦值來覆蓋默認值。

修改下這個步驟添加一個名稱為Content-Type的Header,其值為 application/x-www-form-urlencoded 。

 

 

然后運行,成功。

然后我去Dynamics 365中看下:

 

當然我也驗證了這個access token是否有效,是有效的。

 

 你可能還會問,如果我不通過這種方式,可以直接發起HTTP請求,自帶驗證方式來直接調用Dynamics 365 Customer Engagement的Web API嗎?答案是可以的,我這么設置,注意【Authentication】選擇【Active Directory OAuth】,然后設置相應字段的值類似如下。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM