コルネの進捗や備忘録が記されたなにか

進捗や成果物や備忘録てきななにかを雑に更新していきます。

不定期でPower Automateのフローを実行する


スポンサードリンク

はじめに

特定の感覚ではなく、不定期でPower Autometのフローを実行したいなー。。。と思うときありますよね?

あるんですよ。

今回はそういったロジックの作成方法について纏めます。

仕組み

構成図

この仕組みを実現するために、下記のような構成を作成します。

f:id:koruneko:20220326174405p:plain

ロジック

不定期とはいえなにかトリガーがあり、そのトリガーの情報でいつフローを実行すればよいのか?が判断できるかと思います。
そのトリガーに今回はPower Appsを用いています。

SPOへのアイテム登録は必須ではないです。
今回例で作成するアプリでたまたま利用するので入っているだけです。

このロジックの肝となるのはOutlook予定表です。

Power Automateでフローを作成する際、なんらかのトリガーを設定する必要があります。
そのトリガーを疑似的に不定期で実行させるための要がOutlook予定表になります。

Power Automateには「予定しているイベントが間もなく開始されるとき」というトリガーが存在します。

f:id:koruneko:20220326180606p:plain

これを使い不定期な予定を作成し、それをトリガーにフローを実行するというわけです。

仕組みさえわかってしまえばそこまで難しいことはないですね。

Power Appsで予定を作成する

Power AppsでOutlook予定表を作成するには、「Office365Outlook」コネクタの Office365Outlook.V4CalendarPostItem を利用します。

こちらのアクションの詳細は V4CalendarPostItem をご確認ください。

今回サンプルとして、食料品管理アプリを用意しました。
ここで登録した食料品の消費期限/賞味期限が近付いてきたら通知するようなアプリを作成します。

f:id:koruneko:20220326182106p:plain

SPOリストをデータソースとしているので、そこへの登録が完了したら予定表を作成するようにします。

また、どうせならSPOリストのアイテムと予定表でどれが紐づいているのかがわかるようにしたいと思います。

そこで、SPOリストのフィールドには予定表のリンクを記載するためのフィールドを作成しておきます。

f:id:koruneko:20220326182523p:plain

予定表の方には、本文にSPOリストのアイテムへのリンクを記載するようにします。

以上を式にするとこのようになります。

Form.OnSuccess

Patch(
    食料品管理,
    LookUp(食料品管理, ID = Self.LastSubmit.ID),
    {
        Outlookのスケジュールリンク:
        Office365Outlook.V4CalendarPostItem(
            LookUp(Office365Outlook.CalendarGetTables().value, DisplayName = "食料品管理", Name),
            Self.LastSubmit.品名,
            Self.LastSubmit.'消費期限/賞味期限',
            Self.LastSubmit.'消費期限/賞味期限',
            "(UTC+09:00) Osaka, Sapporo, Tokyo",
            {
                body: 
                    "<a href=
                        'https://XXXX.sharepoint.com/sites/XXXX/Lists/GroceryManagement/DispForm.aspx?ID=" & Self.LastSubmit.ID & "'>
                        SharePointでアイテムを開く
                    </a>",
                reminderMinutesBeforeStart: 30,
                isReminderOn: true,
                showAs: "free"
            }
        ).webLink
    }
);

予定表には事前に「食料品管理」という予定を作成しておいています。

f:id:koruneko:20220326182818p:plain

こちらの予定表に予定が作成されていきます。

こちらの予定を作成したことで、なにか予定がある。と思われるのも嫌なので showAsfree に設定することで「空き時間」に設定しています。

bodyに設定している代替テキストは各自の環境に合わせて適宜設定してください。

また、SPOリストのハイパーリンクフィールドですが、こちら現時点ではPower Appsから登録するときに代替テキストを設定することができないので、そこは諦めてください。
もしどうしても代替テキストを設定したい場合は、Power Automateを使うとかしてください。

Power Appsからも設定できるようになるといいですね。

これで予定表を作成すると、このような登録が行われます。

f:id:koruneko:20220326183451p:plain

また、リストにはこのような登録がなされます。

f:id:koruneko:20220326183555p:plain

不定期で実行するフローを作成する

先ほども説明したので簡単に記載しますが、トリガーには先ほど作成された予定を用います。

これには「予定しているイベントが間もなく開始されるとき(V3)」というトリガーを利用します。

f:id:koruneko:20220326180606p:plain

カレンダーIDには「食料品管理」を選択します。
ルックアヘッド タイムという英語をカタカナにしただけのところには、予定開始の何分前をトリガーにフローを実行するか?を設定します。

例えば、予定表に登録されたとある予定の開始時間が「2022/3/26 18:00」だったとします。
スクショのように'5'を設定していた場合、このフローが実行されるのは「2022/3/26 17:55」です。

f:id:koruneko:20220326183854p:plain

残りのアクションは各自実行したいフローを好きに設定するだけでOKです。

今回のサンプルでは、自身の携帯に通知するぐらいでいいのでこんな感じになりました。

f:id:koruneko:20220326184409p:plain

おわりに

不定期にPower Automateのフローを実行させる。ということをPower Automateだけで考えると難しくなってしまうかもですが、他のサービスとうまく組み合わせることによって簡単に実装することができました。

今回記載したPower Appsの式ですが、実際運用するうえでは以下のことが考慮されていないです。

  • 予定を削除したいとき
  • 予定を変更したいとき

なのでもう少し改良が必要です。


スポンサードリンク