本篇適合已經對 Logic App 有初步認識的朋友,若完全沒概念的話,可以先收看官方釋出的介紹影片。
有了初步認識以後,你再來需要有 Azure 的帳號,並且已經建立好一個 Logic App。另外隨後介紹的應用情境若你想要跟著實作一遍,那也會需要用到 Azure DevOps 的帳戶以及一個 project 和一個 outlook 的 account。
Microsoft 於 2019 年 5 月 6 日公佈了 preview 的 Inline Code 功能,允許用戶在 Logic App 中插入 JavaScript 的程式碼。這邊讓我很開心的是,居然是先 support 了 js 而不是 Microsoft 自家的 C#,對我自己來說 js 對於我還是比較和善親切一點 (づ ̄ ³ ̄)づ。
使用前須先將 Logic App 與 Integration Accounts 做綁定的動作。如果你沒有 Integration Accounts,可以在 Azure Portal 上直接建立一個,若已經有則可以使用既有的就行了!
Integration Accounts 是 Microsoft 的雲端式解決方案,可整合商務功能和資料來源,讓使用者可使用 Logic Apps B2B / EDI 和 XML 處理功能。詳細地說明可以參考官方的文件。
依我自己的習慣,直接在 Azure Portal 最上方搜尋 Integration Accounts 建立一個。

Pricing Tier 你可以選擇使用 free 的即可,不過,一個帳戶在一個地區只允許建立一個 free 的 Integration Accounts。接著,回到 Logic App 做綁定的動作,你可以在 Workflow Settings 裡面去做綁定。

基本設定好後,在 Logic App Designer 裡面搜尋 Inline Code,就可以開始在你的 Logic App 流程中寫 js 扣啦!

用一個簡單的範例來實做看看吧!
Scenario:當 Azure DevOps 上專案中的工單有更新時,發送 email 給這份工單的擁有者。(工單擁有者為自定義欄位)
搜尋 Azure DevOps 你可以找到可以嵌入的流程,其中有分為 Trigger 和 Actions。Trigger 代表當哪些動作在 Azure DevOps 中被執行時會觸發接下來被定義在 Logic App 中的工作流程,而 Actions 則是可以透過 Logic App 來對 Azure DevOps 執行動作。
首先我先選擇當 Work Item 被更新時,則驅動 Logic App 接下來的動作。

接著,選擇你要應用的 Azure DevOps 組織和專案,這裡你也可以選擇特定 type 的 Work Item 以及間隔多久去確認項目是否有更新等等的設定。

再來,我們會透過 Azure DevOps 回傳的 body 來取得我們需要的資訊,而回傳的 body 會是 json 格式,因此我們需要先剖析回傳的 json 資料格式。
搜尋 Data Operation,然後選擇 Parse JSON。

在 Content 的欄位需要填入要 parse 的來源,在 Add Dynamic Content 這邊你可以選到 Azure DevOps 的 Body。

Parse JSON 可以幫你把 body 中每個 key 及 value 剖析出來作為下一個流程使用,但須先在 Schema 這邊填入 body 的格式。可是,我一開始並不知道 Azure DevOps 回傳的格式是如何,怎麼辦呢?
這邊我先簡單的填入{}
,讓他可以 save,不然 schema 沒填會沒辦法儲存。然後,直接 run 一遍目前的流程。(從 work item is updated 到 parse JSON)
在 Overview 的地方,選擇試跑的紀錄。

你會看到 Pase JSON 的地方已經有 input 及 output 了,全選複製整個 output 的資料。

回到 Logic App Designer > Parse JSON,點選下方的 Use Sample Payload to Generate Schema,將剛剛複製的 json 格式資料貼上,便會幫你將資料格式化成一個樣板。

接著,Inline Code 就派上用場了!從 Azure DevOps 回傳的格式中你可以看到這個更新的工單的所有欄位資料,假設我今天想要寄給工單的 owner,即我在 WorkItemOwner 這填入的人,我可以在 WorkItemOwner 欄位底下看到人名及 email 的資訊為 Where Huang <idiot_where@outlook.com>
,可是,我僅需要 idiot_where@outlook.com
這串email 資訊,但在 Logic App 裡面卻沒有相關的套件可以來讓我處理字串,於是,我便需要使用 Inline Code 來自己處理字串。
這邊直接添加一個 Inline Code 的流程,然後添加以下程式碼來進行字串的處理。在 LINK_TO_PARSE_VALUE 這邊需修改成 parse 出來的值。
const fuckingString = LINK_TO_PARSE_VALUE;return fuckingString.split('<')[1].split('>')[0];
用文字的不好描述,直接上圖吧!WorkItemOwner 是我要處理的值,也就是剛剛 Azure DevOps 回傳的 body 中透過 Parse JSON 出來的 WorkItemOwner 這個欄位中的值。於是我在 Add Dynamic Content 這邊選取 Custom_WorkItemOwner 取代掉原本 LINK_TO_PARSE_VALUE
的位置。

這樣,我們就能把 email 的資料抓出來,再透過 outlook 的工作流程做通知的動作。
最後,就可以來進行發送 email 的動作啦!
選擇 Office 365 Outlook 的 Send an Email (V2),將你要發送的內容填寫完(當然你也可以在信件內容加入 dynamic content 這些剛剛 parse 出來的值),然後在 To 這邊選擇 Outputs。

儲存後,到 Azure DevOps 更新一張 work item。過不久你就可以收到一封通知啦!

後記
這邊我在登入 outlook 是使用我個人的信箱,因此當我授權給 Logic App 時他便會使用我的名義來發送系統訊息,這邊比較建議可以額外申請一個帳戶專門用作發送系統通知訊息使用。
今天這樣的一個預警通知,其實在 Azure DevOps 本身就具備有一些通知的功能,而本篇僅是透過一個簡單的 alert 流程,來示範 Inline Code 的使用狀況,Inline Code 的出現,真的是解放了原先在 Logic App 上面使用起來綁手綁腳的地方。當然,Logic App 上面其實也不僅僅是提供了Microsoft 自家的服務而已,另外其實也有像是 gmail、slack 等等,你可以隨心所欲的做選擇,創造適合自己的工作流程。
最後,祝福大家,使用上愉快啦!٩(ˊᗜˋ*)و