【Power Automateではじめる業務の完全自動化】実務直結のノウハウが満載! 本連載では、企業へのMicrosoft 365の導入や活用支援を手がける著者・太田浩史氏による、Power Automateを使った業務自動化のノウハウを提供します。
SharePointリストで管理している古いデータを一括削除
SharePointリストのデータをまとめて処理することもできます。スケジュールに応じて定期的にするトリガーと組み合わせることで、夜間や早朝などの決められた時間に処理を実行できます。例として、古いデータをまとめて削除するフローを作成しましょう。
完了日が古いタスクを自動で削除する
ここではSharePointリストに入力されている古いアイテムを削除するフローを作成します。例として案件の進捗管理のために、営業部門のSharePointサイトに「タスク」リストを作成している状況を基に説明を進めます。このリストは、登録されているタスクが完了すると、その日の日付を完了日として入力するようルール化されています。また、登録されているタスク数が増えすぎないように、完了日が古いものについては気が付いたときに手動で削除しています。フローを作成することで、こうした古いタスクを自動的に削除でき、作業の手間を省けます。
SharePointにフロー実行用のリストを用意
SharePointサイトにタスクを管理するためのリストを作成します。フローから利用する「完了日」列を必ず追加してください。ここでは「できる営業部」というサイトにリストを作成していますが、リストを作成するサイトはどこでも問題ありません。
[進捗]列の設定
ここもポイント!SharePointサイトのタイムゾーンにも注意
スケジュールトリガーで毎日自動実行
今回作成するフローは、毎日朝8時に実行し、古いアイテムを削除します。定期的に実行するためには、[スケジュール]トリガーを利用します。[スケジュール済みクラウドフロー]から、フローの[開始日]や[繰り返し間隔]を設定しましょう。毎日実行したいので、[繰り返し間隔]は「1日」です。実行される時間は、[開始時間]の[時間]に設定します。
アイテムを削除する基準となる時間を取得
古いアイテムをSharePointリストから削除するためには、リストに登録されたアイテムのうち、削除したいアイテムだけをフィルターして取得する必要があります。「古い」の基準となる日付を取得するために、[日時]コネクタの[過去の時間の取得]アクションを利用します。このアクションは、フローの実行時刻から指定した時間だけ過去に遡った日時を取得できます。例えば、[間隔]を「14」、[時間単位]を「日」に設定すれば、フロー実行時点の14日前の日時を出力します。
[過去の時間の取得]アクション
❶「14」と入力
❷[日]を選択
リストから削除対象のアイテムを取得
SharePointリストからアイテムを取得するには、[SharePoint]コネクタの[複数の項目の取得]アクションが利用できます。 アクションの設定で、[サイトのアドレス]や[リスト名]で削除したいアイテムのあるリストを指定しただけでは、リストに保存されたすべてのアイテムを取得しようとしてしまうため、フィルターを設定して削除対象のアイテムのみに絞ります。そのためには、詳細オプションを表示し[フィルタークエリ]を設定します。この設定は「ODataフィルタークエリ」と呼ばれる、ちょっと特殊な記述方法が必要です。例えば今回の場合は次のように設定することで、リストの[完了日]列に入力された日付が、指定された日付よりも古いものを取得するようになります。
[フィルタークエリ]に設定するODataフィルタークエリ
これだけ見ても何のことか分かりませんよね。しかしここを理解すると、[SharePoint]コネクタをさらに使いこなせるようになります。次のSECTIONで詳しく解説します。
ODataフィルタークエリとは?
[フィルタークエリ]に設定するODataフィルタークエリは、SharePointリストから条件に合ったアイテムを取得するための条件を表します。これにより例えば、金額列の値が500よりも大きなアイテム、進捗列に未着手が入力されているアイテムなどに絞り込んで取得できます。
ODataフィルタークエリでは、比較演算子と呼ばれる特殊な表記を挟んでいる左辺と右辺の値を比較できます。比較演算子には、eq、ne、lt、gtなどさまざまな条件が利用できます。
よく利用される比較演算子
比較演算子 | 説明 |
---|---|
eq | 左辺が右辺と等しい(Equal) |
ne | 左辺が右辺と等しくない(Not Equal) |
gt | 左辺が右辺より大きい(Greater than) |
lt | 左辺が右辺より小さい(Less than) |
ge | 左辺が右辺以上(Greater than or equal) |
le | 左辺が右辺以下(Less than or equal) |
「and」や「or」を用いることで、複数の条件を組み合わせたフィルターを行うことができます。また、比較対象が文字列や日時の値の場合は、シングルコーテーションで値を囲む必要がある点に注意しましょう。
SharePointリスト列の表示名と内部名
さて、アクションに設定したODataフィルタークエリのもう1つの疑問は、左辺に登場する「OData__x5b8c__x4e86__x65e5_」という謎の文字列ではないでしょうか。これを理解するには、SharePointのリストやライブラリの列は、表示名と内部名の2つの名前を持つことを知っておく必要があります。
今回のアイテムの取得対象としている列は、それぞれ次のような表示名と内部名を持っています。表示名は、その名の通り画面に表示されている列名です。一方の内部名は、プログラムなどからアクセスするときに必要な列名になっています。
今回作成したリストの列の内部名
表示名 | 内部名 |
---|---|
タイトル | Title |
担当者 | _x62c5__x5f53__x8005_ |
期日 | _x671f__x65e5_ |
進捗 | _x9032__x6357_ |
完了日 | _x5b8c__x4e86__x65e5_ |
内部名の確認方法
内部名を確認するには、SharePointリストを開き、[リストの設定]を確認しましょう。リストの設定画面の中ほどにある[列]の一覧から、内部名を確認したい列をクリックします。すると列の編集画面が開きますが、このときのURLにある「Field=」の後ろの文字列が列の内部名です。
さらに、Power AutomateからODataフィルタークエリで利用する場合は、内部名の先頭に「OData_」の接頭語を付けなければならない場合があります。それは、列の内部名が「_」から始まっている場合です。例えば「完了日」の内部名は、「_x5b8c__x4e86__x65e5_」のように「_」からはじまるため、接頭語を付けて「OData__x5b8c__x4e86__x65e5_」とする必要があります。
ここもポイント!内部名の文字列を分かりやすくするには
取得したアイテムを削除
リストから削除対象となるアイテムを取得できたので、このアイテムを削除していきます。削除するには、[SharePoint]コネクタの[項目の削除]アクションを利用します。アクションを追加したら、削除するアイテムがあるリストを指定するように、[サイトのアドレス]と[リスト名]を設定しましょう。[ID]には、[複数の項目の取得]アクションから出力される[ID]を指定します。これで、あらかじめ取得しておいた削除対象のアイテムを削除できます。このとき、Power Automateが自動的に[Apply to each]の反復処理を追加してくれます。
項目の削除]アクション
❶削除対象のSharePointリストがあるサイトとリスト名を選択
❷[複数の項目の取得]アクションの動的なコンテンツから[ID]を選択
さて、フローを作成したらテスト実行してみましょう。フローが正常に動作すれば、元から登録されているアイテムのうち、完了日が14日前より古いアイテムが削除されているはずです。テストが上手くいったら、トリガーで設定した時間まで待ってみて、スケジュール通り動作するかも確認してみましょう。
フローをテスト実行する
達人のノウハウ試行錯誤しながら少しずつ完成に近付ける
教わりながら手順通りにフローは作成できても、それを一から作成するのは難しいと感じることもあります。その原因の多くは、フローは順番通りに間違えずアクションを追加して作成するものだと思っていることにあります。教わる手順のほとんどは、すでに完成したフローの作成手順です。自分で一から考えてフローを作成するのとは異なることがあります。一から作成できるようになるためには、試行錯誤の方法を覚えることが大切です。アクションを並び替えたり途中に新しく追加したりしながら、何度も動作を確認します。順番通りに追加してすんなり完成とはなりません。アクションや設定を変えて何度も動かし、少しずつ目的の動作に近付けていきましょう。教わった手順の裏側にもこうした試行錯誤が隠れています。
関連記事
本連載は、インプレスの書籍『Power Automateではじめる業務の完全自動化(できるエキスパート)』の内容に基づいています。紹介している情報は、書籍発行時点(2023年9月)のものです。