- 2022年11月14日
はじめに
こんにちは、ユニフェイスの上村です!
以前 【Power Platform】要点まとめ の記事を書きましたが、その中から今回は Power Automate にフォーカスします。
とはいえ、通常の Automate の利用方法については既に分かりやすく説明されている記事が多く見受けられますので、今回は利用する中でのハマりポイントについて Tips として纏めます!
※ Power Platform で保持したデータを扱いたい場合は 【Microsoft Lists】要点まとめ も合わせてご覧ください。
特定のアクションクリック時にフリーズ
いきなり穏やかじゃないですが一番ハマったところなので・・・。
※ 調べても同様の事例が全くヒットしなかったため、必ず発生するものでは無さそうです。(環境起因?)そのため、似た事象が起こった場合は下記を参考にしてみてください。
事象としてはフロー上の「Office 365 Outlook」コネクタの「メールの送信 (V2)」アクションをクリックすると、ブラウザのタブごとフリーズしてしまい、変更などの操作を受け付けなくなりました。ブラウザは Chrome と Edge を試し、さらに同じ環境で使用している他の端末でも発生しました。
色々と動かして検証してみたところ、どの画面からフローの編集画面に遷移しているかが影響していました。
フローは Power Automate の画面から「マイフロー」のメニューで開けますが、Power Apps の画面の「フロー」のメニューから開いた場合に上記事象が発生しました。
フローを編集する場合は念のため Power Automate の画面から開くようにしてください。
(不具合だと思うのでいつか解消されるでしょう・・・)
フローからフローの呼び出し(親子フロー)
フローの作成について考える際、フローの分割や共通化といったことも検討するかと思います。
このようにフローからフローを呼び出す仕組みは「親子フロー」と呼ばれ、親フローと子フローをそれぞれ作成し、親フローから子フローを呼び出す流れとなります。
ただし親子フローを利用するためには「ソリューション」が必要となり「for Microsoft 365」ライセンスでは利用できません。
ソリューションの概念 – Power Platform | Microsoft Learn
そのため、親子フローを利用したい場合は現在のライセンスに「ソリューション」が含まれることを確認してください。
「自動化したクラウドフロー」のトリガーの実行間隔
リストのデータが更新された、ファイルが追加された、メールを受信した、といったトリガーによってフローを実行する場合は「自動化したクラウドフロー」を利用します。
このトリガーですが、即座に呼び出されるわけではなく契約しているライセンスに応じて実行間隔が異なるため注意してください。
ライセンス | 実行間隔 |
---|---|
Power Automate for Dynamics 365 | 1 分 |
Power Automate Per User Plan | 1 分 |
Power Automate Per App Plan | 1 分 |
Power Automate for Microsoft 365 | 5 分 |
Power Automate Free | 15 分 |
ただし「Office 365 Outlook」コネクタの「イベントが追加、更新、削除されたとき (V3)」トリガーに関しては、経験則ですが上記の間隔よりも早く実行されているように感じます。
恐らく、普段手動操作している時と同様に、Exchange への予定登録の反映間隔と同じになっているのではないかなと思います。
引数の値を利用するときの注意点
「Power Apps (V2)」トリガーなど、フローに引数の値を利用する際、「動的なコンテンツ」から選択できます。
その際、式としては triggerBody()[‘○○’] で取得されますが、引数の中身が空(または null)の場合、body には対象の項目が存在しないため、例外が発生してしまいます。
(※ 必須フィールド、オプションフィールド問わず)
そのため、空を許容する引数の値を利用する場合は一度変数を定義して、
その初期値に triggerBody()?[‘○○’] を指定してください。
丸括弧と角括弧の間に ?(検索用ワード:疑問符、クエスチョンマーク、はてな)を入れることで、対象の項目が存在しない場合に例外ではなく、null が返るようになります。
(Automate では何と呼ばれているか見つけられませんでしたが、C# でいうところの Null条件演算子)
空文字(または null)判定
空文字の判定をする場合は「式」で【empty】関数を利用します。
変数の指定を「動的なコンテンツ」から選択できず、手打ちする必要があるので、それがちょっと面倒です・・・
[フローの例]
短絡評価(ショートサーキット)
条件式に複数の判定条件を指定した際、「または」にしている場合は、先に評価された条件が【TRUE】であれば後の評価は実行されません。そのため無駄な評価処理を省くことができます。
[フローの例]
※ 2つ目の条件は null に対して Length 関数を使用しているため、評価されてしまうと必ず例外となりますが、短絡評価により例外とならず処理されます。
【参考URL】短絡評価~ショートサーキット~
アクションに追加したメモが消えない
アクションにはメモが記載できるようになっており、特記事項を書いておくなど非常に便利な機能です。ただし、一度記載したメモを後から削除したい場合に注意が必要です。
メモの横には×ボタンが表示されており、一見これを押すと削除できそうですが、カーソルを合わせてみると「このメモを非表示にする」と出ます。つまり、一時的に隠して見えないようにするだけで、この状態で保存しても再度開きなおした場合にはまた表示されてしまいます。
そのためメモを削除したい場合は、メニューから「メモを編集する」を選んで内容をクリアしてから保存してください。(非常に分かりづらい・・・)
ループ処理のパフォーマンス改善
Automate を利用する上で、実行速度がどの程度かかるのかは非常に気になる点かと思います。
個人的に、パフォーマンスへの影響が特に大きいと感じるのは「ループ処理」です!!
ループ処理の改善方法としては下記が挙げられます。
① 特定のレコードだけ抽出したい場合:
データ操作の「アレイのフィルター処理」アクションを利用
② 特定のフィールドだけ抽出したい場合:
データ操作の「選択」アクションを利用
[フローの例:Title 列のみ抽出]
[実行結果の例]
③ 上記に該当せず、処理順序を意識しなくていい場合:
「コンカレンシー制御」を有効にして並列処理数を設定
PowerAutomate で Apply to each が遅い! – Qiita
ASCII.jp:Power Automateの「Apply to each」と「Do until」はどちらが速いのか試してみた
ビュー利用によるパフォーマンス改善
前回の記事(【Microsoft Lists】要点まとめ – リストの定義)でも記載しましたが、用途に合わせた列のみのビューを指定することで、取得データ量の削減や、登録・更新時に不要な列を非表示にできるといったメリットがあります。
[ビュー指定の例]
リスト更新の Tips
リストの更新をする際、1つのフィールドだけを更新対象にしたい場合でも、リストの列(ビュー指定時はそのビューに含まれる列)が全て表示されてしまいます。
このまま何も指定しないと空(または NULL)で更新されてしまいそうに見えますが、この場合は更新対象外となります。
ただし、必須項目に関しては更新不要の場合でも(ビューで列を制限していても)必ず値を指定する必要があるため注意してください。
[リスト更新の例]
Power AutomateでSharePoint列の値を更新するアクションの仕様について – Qiita
「ユーザーまたはグループ」列の設定方法
リストにはADユーザー情報をそのまま保持できる「ユーザーまたはグループ」という便利な型があります。ただしこの型の列を Automate から登録しようとした場合、直接ユーザーを指定できるのかと思いきや、【Claims】といった内容の”文字列”に変えて指定する必要があります・・・。
Claims の指定方法ですが、先頭に i:0#.f|membership| という文字列を付けて、続けてADに登録している対象ユーザーのメールアドレスを付加します。
[フローの例]
Office スクリプトについて
Automate で重めの処理をしようとすると、どうしてもフローが複雑化してしまいます。
(前述の親子フローが使えればまだいいですが、、、)
追加ライセンスが不要の範疇で取り得る選択肢として「Office スクリプト」があります。
自分ではあまり触れていないので詳細は書きませんが、フロー内で TypeScript の処理を実行できます。
【参考URL】Power Automate で動かす Office スクリプト(1) – Qiita
さいごに
実際に自分で開発をする中で、よく利用するものや、調べてもぱっと見つからなかったものについて、それぞれの記事を分けるまでもないかなといった内容を一纏めにして記載しました!
他にもあったのですが、それは記事を分けてまた纏めていきます。