MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

Office Script からHTTPリクエストしてフローを呼び出す

2021年1月から、Office Script からの外部API利用がサポートされるようになったので、試してみました。

公式のアナウンスは下記を参照してください。

docs.microsoft.com

注意事項にも書かれていますが、外部APIを利用する場合には fetch API というものを使います。

この特性上、スクリプトは以下のような形式にしておく必要があります。

async function main(workbook: ExcelScript.Workbook): Promise <void> {

//何らかの処理

 let fetchResult = await fetch(.....);

}

ポイントは asyncPromise <void>await です。どれを入れ忘れてもスクリプトでエラーになるので、注意しましょう。また、fetch API を利用する場合には Power Automate からスクリプトを呼び出すことはできません。

さて、fetch API を利用する場合ですが、サンプルを見ると単に await fetch('https://jsonplaceholder.typicode.com/todos/1'); となっているので、GETしかできないのかな?と思うかもしれません。

実際には fetch API は下記ドキュメントにあるとおり、一通りのAPI呼び出しに必要な要素を指定可能です。 (method, header, body)

developer.mozilla.org

以下ではこの例にならって Power Automate にデータを送信する場合のサンプルを見ていきます。

Office Script からのフロー呼び出し

Power Automate のフローを呼び出す場合には、フロー側はHTTPリクエスト受信時のトリガーになっている必要があります。

このトリガーは有償(PREMIUM) に分類されるので、Logic Apps を利用してもいいかもしれません。

フローで気を付けなければいけないのは、必ずレスポンスでデータを返すことです。これを入れないとたとえリクエストが送られていてもScript側で「Fetchが失敗しました」と出てしまいます。

f:id:mofumofu_dance:20210218012319p:plain
単純なフローの例

ここまで準備できたらあとは fetch API を利用した Scriptを書くだけです。

async function main(workbook: ExcelScript.Workbook): Promise<void> {
    // Your code here
    const url = `ここにフローのURL`;

    let textMessage = { text: "Hello World" };
    let param = 
            { 
                method: "POST", 
                headers: 
                    { "content-type": "application/json" }, 
                body: JSON.stringify(textMessage) 
            }; 
    let fetchResult = await fetch(url, param);

    let json = await fetchResult.json();

    console.log(JSON.stringify(json));
}

これだけで、フローにデータ (JSONオブジェクト) を送信することができます。body 部分を構成する textMessage をセルの値などに変更すれば、Excel上のデータをPower Automate に渡して処理させることもできます。

以下は単純にB3のセルの値をAutomateに送った場合の動画です。

このように非常に簡単な処理で Excel Online 上から、Power Automate/Logic Apps のフローにデータを送信することができました。

おわり

今回は Office Scripts でサポートされた fetch API を利用して、Office Scripts から Power Automate にデータを受け渡すような例をご紹介しました。

注意事項は以下3点です。

  1. async 処理であることをわすれずに (スクリプトの開始部分)
  2. API 側は必ずデータを返すようにつくる
  3. このスクリプトは Power Automate 上では実行不可

普段は Power Automate で使えるスクリプトを考えていましたが、逆パターンというのもなかなか応用が広そうです。

ぜひ新しく追加された fetch API、利用してみてください。