MoreBeerMorePower

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

Power Automate & Microsoft Lists で 時刻表LINE Botを作る (2) - メインのロジック作成


第1回: Power Automate & Microsoft Lists で 時刻表LINE Botを作る (1) - データ準備 - MoreBeerMorePower

第2回: Power Automate & Microsoft Lists で 時刻表LINE Botを作る (2) - メインのロジック作成 - MoreBeerMorePower

第3回: Power Automate & Microsoft Lists で 時刻表LINE Botを作る (3) - LINE からのメッセージ受信と応答 - MoreBeerMorePower


Power Automate と Microsoft Lists で作る時刻表 LINE Bot、第二回はメインのロジック作成です。

ここでは LINE で入力された文字列から、前回作成した時刻表のうち、最も時間が近いものを抽出し、返却する処理を作成します。

f:id:mofumofu_dance:20210407125131p:plain
実現すること:入力した時刻と行き/帰りに応じたレコードを1件取得して時刻を返す

作成時のTIPS

実際には 「LINE からのメッセージを受信するために HTTPリクエストの受信 トリガーを利用して、その中からメッセージを取ってきてー」という処理を最初に行いますが、ロジックを作る時点ではボタンフローで仮組みすることが多いです。

その場合、トリガーから得られる、後続処理で必要な情報を最初に [ 作成 ]アクション (Compose) に設定しておくとトリガーを入れ替えたときに後続処理が影響を受けにくくなります。

f:id:mofumofu_dance:20210407130351p:plain
仮組みではボタン+作成

ここでは文字列ですが、トリガーで得られる情報がオブジェクト型の場合でも同様です。[ 作成 ] にテスト用のオブジェクトを入れておいて、後続処理では [ 作成 ] の結果に基づいて書いていきます。

最も近い時刻の1行を取得して結果の時刻を得る処理

メインになる処理は リストから、行き/帰りが一致していて かつ入力時刻に最も近い1行を取得することです。

メッセージの分割

まずは入力されたテキストから、行き/帰り と 時刻を分離します。この時ついでなので時刻に 2020/12/30 をくっつけて日時型にしておきます。

2つを取得するために、[ 作成 ] アクションを続けて2つ追加しましょう。

文字列の分割には split関数 を使います。 半角スペースで区切られている想定なので、半角スペースで分割するために split( output('Compose') , ' ' ) と書きます。

行き/帰りは分割の後ろ側にくるので last(split( output('Compose') , ' ' )) を [ 作成 ] の中に入れましょう。

一方の時刻は分割の前側なので、first(split( output('Compose') , ' ' )) となります。

f:id:mofumofu_dance:20210407131824p:plain
文字列の分割はsplit関数で

これで日本時間での時刻と、行き/帰りをメッセージから取得できました。

タイムゾーン変換

Lists の日時型の列ではUTCでデータが入っています。これにより特定の時刻のデータを抽出するためには、メッセージの時刻もUTCに変換しておく必要があります。

[ タイムゾーンの変換 ] アクションを追加して、ベースになる時刻として先ほどの日本時間での時刻を入れた [作成] アクションの結果を指定します。

変換元タイムゾーンにはUTC+9を、変換先のタイムゾーンにはUTCを指定します。最後にフォーマットですが yyyy-MM-ddTHH:mm:ssZ をカスタム値として設定してください。

f:id:mofumofu_dance:20210407133515p:plain
タイムゾーン変換でUTCに戻す

リストからのアイテム取得

ここまでで UTCでの時刻と行き/帰りが得られたので、これらの情報をもとにリストからアイテムを取得します。

f:id:mofumofu_dance:20210407134150p:plain
リストからのアイテム取得

(フィルタークエリ部分は「試験的機能」をONにしておくともう少し簡単に作れます)

並び替えは、時刻を入れている列をasc (昇順)とします。

これで入力された時刻以降の最も近い1件が取得できました。

f:id:mofumofu_dance:20210407134816p:plain
期待通りの1件が取得できている

LINE で返却するためのタイムゾーン変換

さて、ここで取得できた時刻はUTCです。これをユーザーに返すわけにはいかないので、JSTに戻しておきましょう。

再び [ タイムゾーンの変換 ] アクションを挿入し、 ベースの時刻に first(outputs('Get_items')?['body/value'])?['time'] を指定します。

フォーマットには HH:mm を指定しておきましょう。これで24時間表示の時刻になります。

f:id:mofumofu_dance:20210407135252p:plain
取得結果をJSTに戻す処理。フォーマットに注意

おわり

これでメッセージからリストにある時刻表を検索し、もっとも近い時刻の1件を返す 一連の処理が完成しました。

f:id:mofumofu_dance:20210407135456p:plain
目的の行の時刻がJSTで得られた

次回は LINE Botとの接点部分を解説します。