自己紹介
NTTドコモ データプラットフォーム部(以下DP部)江口です。本記事では、Microsoft Power Automate(以下、Power Automate)の活用における障壁とその解決策について紹介していきます。DP部では、全国に存在するドコモの支社および本社組織において管理すべき情報を、社員間で共有するためのプラットフォームを構築・運用しています。
その場合、データ発生源の作業者が馴染み深く、柔軟性の高いSharePointと相性のよいPower Automateがデータ連携・加工方法に選択肢にあがってきます。しかしながら、Power Automateに関しては、ノーコードツールという特性からか、Web上には情報が少なく思わぬエラーや不具合・不都合に出会い、試行錯誤的に対応していきました。本記事ではその備忘とPower Automateコミュニティ活性化の想いも込めて紹介させていただきます。
なお、本記事の掲載の取組については、支援メンバーであるNEC通信システムの堀島さんに詳細検討・実装を進めてもらっており、以下は、堀島さんに執筆いただいています。
この記事について
SharePoint上のファイルの更新をMicrosoft Power Automateで自動化する際に、四苦八苦した記録を書き記した記事です。
昨年のこの時期にもPower AutomateとOffice Scriptに関する記事を執筆しており、今年に入ってPower Automateの最新化や仕様変更の際に新たに詰まった部分を追加で執筆しました。
構築しようとしているシステムは以前とほぼ変わらないため、前回の記事も合わせて読んでもらえると前提条件が分かりやすいかと思います。
今回のTips記事では、SharePoint上のExcelを操作するシステムの構築中に溜めた、細かいけれど役に立つTipsを紹介しています。
他のアプリケーションを自動化する場合には、その点に注意してください。
Power Automateの細かいTips
①フィルタークエリにミリ秒までの日付データを指定するとエラーになる
SharePointコネクタ内の「ファイルの取得(プロパティのみ)」アクションや「項目の取得」アクションでは、ファイルの情報やMicrosoft Lists内の項目を取得することができます。
これはデフォルトだと全ての項目やファイルを取得しますが、条件に当てはまるのみを取得する場合には「フィルタークエリ」を使用します。

Power Automateのフィルタークエリでは、ODataフィルタークエリを記載してデータを絞り込むことができ、[列名] [演算子] [値]の形で条件を指定できます。
使用できる演算子の例は以下です。
| 演算子 | 意味 |
|---|---|
| eq | 等しい |
| ne | 等しくない |
| ge | 以上 |
| le | 以下 |
| gt | より多い |
| lt | より少ない |
また、列名は以前のアクション等で内部名を取得する他に、作成日の「Created」や更新日の「Modified」を使用できます。
つまり、「4日前よりも昔に作成された項目のみ」の条件は、
Created lt [4日前の日時]
となります。
この[4日前の日時]の指定は関数のみでも実装できますが、将来的に「3日前に変更したい」「2時間前に変更したい」などの状況が考えられる場合には、「過去の日時を取得」のアクションを使用して動的に選択すると便利です。
ここで、
Created lt [過去の時間]
と指定するとフローの実行時に無効となりエラーが発生しました。

この原因が分からず調査したところ、「Created」で指定される作成時間にはミリ秒が入っておらず、「過去の時間の取得」アクションの出力と一致しないため比較に失敗します。
そのため、右辺の指定を、
formatDateTime(body('過去の時間の取得'),'yyyy-MM-ddTHH:mm:ssZ')
に変更してミリ秒を削除したところ、正常に実行することができました。

Power Automate上で時間を使用する場合には、ミリ秒だけでなくタイムゾーンの指定も想定通りではないことがあるため注意が必要です。
②フロー実行専用のURL発行方法にコツがいる
手動実行できるインスタントクラウドフローは作成者・共同作成者のみではなく、実行専用のユーザーを招待してURLから実行してもらうことも可能です。
フロー詳細画面の左下に「実行のみのユーザー」という項目が存在し、「編集」をクリックすることでユーザーに権限を付与することができます。

これは通常、ユーザーに権限を付与したのちにメールで実行用のリンクが届くのですが、グループ単位で付与した場合には個人にメールが届かない仕様となっています。
今回は複数フローの許可をまとめて管理したいという都合上、グループに権限付与を行う方針でした。
そのため、管理メンバーの1人に権限付与した際にメールへ届いたURLを全員に案内していたのですが、そのメンバーが異動となり権限を削除したタイミングでURLが使用不可になりました。
上記の事象が発生しないようにURLを発行するには、フロー詳細画面のURLを取得し、「/detail」を「/run」に修正する必要があります。
③外部アプリケーションへの接続時の認証の設定変更で異動・退職に備える
Power AutomateがSharePointのような外部アプリケーションへ接続する場合には、誰の認証情報を使用して接続するかを設定する機能があります。
デフォルトではフローの作成者の接続を使用していますが、作成者が異動・退職する場合などでアカウントが消えたり、一時的にMicrosoftからログアウトされていたりすると失敗してしまいます。
②のURLによる実行で運用する場合、「実行専用ユーザーの接続を使用」に修正することで上記の失敗を回避することができます。

④実行専用ユーザーの接続を使う場合はSharePointの編集権限が必要
③にて実行専用ユーザーの認証を使う設定へ変更を行いましたが、フロー内のアクションで指定するフォルダやファイルは、実行者に表示権限だけでなく編集権限が付与されていないと失敗します。
できてしまうと逆に怖いですが、権限を持つユーザーの認証を埋め込んだ接続(上記にある作成者の接続)であれば可能であるため要注意です。
大勢でフローを手動実行する場合には、全員に編集権限が付与されているか事前に確認する必要があります。
こちらは大勢になってくると管理が大変なため、管理を一元化できるユーザーグループ機能を用いてPower Automateフローの実行権限を付与したグループに編集権限を付与する方法がおすすめです。
⑤「フォルダー内でファイルが作成または変更されたとき」トリガーの実行条件の詳細
Power Automateフローには、上記で紹介した手動実行のインスタントクラウドフローの他に、「トリガー」とよばれる条件が満たされたタイミングで実行される「自動化クラウドフロー」が存在します。

ここまでで実装していたシステムは、「SharePoint上でExcelを編集した後に記載内容を連携する手動フローを実行する」というものだったため、このトリガーにより完全自動化したいと考えました。
ローカルで変更後にSharePointへファイルをアップロードし直す運用であれば問題ないのですが、Web上でExcelを開いて編集する運用としていたため、トリガーの発動条件を詳細に検証することになりました。
検証結果は以下になります。
【検証結果】
・セルが1つでも編集された場合に、編集途中でもトリガーが発動する
・トリガー発動後に次のトリガーが発動するまでの間隔は約2分
・編集後、トリガー発動前にファイルを閉じても正常にトリガーが発動
上記から分かる通り、Web上での編集中は約2分おきに何度もフローが実行され続ける形となります。
処理の軽いフローであれば問題ないのですが、使用しているフローが15分以内に連続実行すると処理に失敗してしまうため、今回は採用を見送りました。
この実行頻度は環境によって変わる可能性があるため、使用する場合は各自で検証が必要です。
今回の検証では、4.8MBのExcelファイルにて検証を行っており、フローはトリガーと「ファイルの取得」と「スクリプトの実行」アクションで作成しています。
対象ファイルのサイズやフロー全体の実行時間によって、結果が変動する可能性があると考えています。
最後に
Power Automateは状況によって最適なアクションが様々かつ仕様変更も多いため、ネット上の情報の通りにやっても上手く行かないことが多々あります。
「どんなエラーが発生してどう解決したか」を定期的に公開することにより、様々な人の助けになると思っています。
この記事を読んでいただいた方も、きっと何かに困って解決した経験があると思います。
ぜひその知見を発信していただけると嬉しいです。