8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SharePoint リストの添付ファイル列の有無を判断して Power Automate のフローを実行する

Posted at

この記事は、Microsoft Power Automate Advent Calendar 2025 12月12日担当分の記事です。

SharePoint リストに保存されているデータ行に、手動で添付ファイル列にファイルを保存していき、そのファイルを確認してもらうためにファイルを添付したメールを送信し、それを送信したかどうかステータスを管理する…という業務シナリオがあった場合のフローについて整理しました(下記画像)

image.png

1. リストを準備する

image.png

今回使用したリストは上の画像の通りです。必要最小限で作成しているので、この辺りは適宜変更してみてください。

  • タイトル列:SharePoint リスト作成時に既定で表示されているもの
  • Date 列:日付型(データ行が作成された日であったり、メールを送信する日であったり)
  • MailFlag 列:はい / いいえ 型(既定値を「いいえ」に設定する。メールを送信したか否かを判断するための列)
  • 添付ファイル列:「列の表示/非表示」から表示する
  • Addressee 列:ユーザー型(複数選択可に設定)

2. トリガーの実行条件

SharePoint コネクタの「アイテムが作成または変更されたとき」アクションは、リストに新しくデータを追加した時やデータの内容を書き換えた時にフローが実行される仕様となっており、既定の設定のままだと、全ての変更を拾ってしまいます。

image.png

全ての変更を拾ってしまうということは、今回のフローのように、添付ファイル列にファイルを保存した時だけでなく、添付ファイル付きのメールを送信したか否かのステータスを変更した時にもフローが実行してしまうため、実質、2回以上同様のフローが実行されてしまいます。

それを防止するのが「トリガーの実行条件」の設定です。委細は上に引いた記事をご一読いただければと思いますが、添付ファイル列の有無に関しての設定は他の列とは少しだけ書き方に癖がある気がするのでまとめておきます。

2.1. 設定内容

image.png

結論、SharePoint リストの添付ファイル列は {HasAttachments}、つまり「変更(新規作成)があった添付ファイルを有しているか否か」の情報で判断する必要があるため、書き方としては上のように、添付ファイルが存在する場合は true を、存在しない場合は false を書くようにします。今回は「添付ファイル有」なので、次の式を書くと良いです。

@equals(triggerBody()?['{HasAttachments}'], true)

さらに、無限ループを防止するために、メールを送信していないデータのみを対象にフローを実行する条件も合わせて設定します。

@equals(triggerOutputs()?['body/MailFlag'], false)

3. 添付ファイル列のファイルをフローに呼び出す

あくまでも、SharePoint コネクタの「アイテムが作成または変更されたとき」アクションは、添付ファイルの有無を教えてくれるだけでしたので、添付ファイルを Power Automate 上に呼び出す必要があります。

3.1. 添付ファイルの取得アクション

image.png

添付ファイルの取得アクションを配置し、トリガーの実行結果、つまり、変更や作成があったデータ行の添付ファイルを取得します。ID には、上の画像を参考に「動的な値」の ID をクリックして入力します。

3.2. 添付ファイルのコンテンツの取得アクション

先ほどの「添付ファイルの取得」アクションは、あくまでもファイルの場所の取得しかできないため、添付ファイルとしてメール送信したい場合は、この「添付ファイルのコンテンツの取得」アクションを配置する必要があります(Web上で閲覧するだけの場合は不要です)

image.png

再び ID までを設定したところで、最後に「ファイル識別子」の設定を行う必要があるのですが、当記事では、添付ファイル列に保存されるファイルが1件だけしかない場合を想定しているので、first 関数を使って Apply to each アクションを回避しています。

first(body('添付ファイルの取得'))['Id']

3.2. 備考 : first 関数を使用しない場合

image.png

first 関数を設定しなくても、フローに影響はありません。ただ、ファイルが複数件存在する場合は、ファイルの件数分のメールが送信されるため、別途、フローの内容を考える必要があります(稿を改めます。たぶん)

image.png

4. メール送信

4.1. 送信先のメールアドレス設定

次に、Addressee 列に記載されているユーザーにメールを送信する準備を行います。複数選択可のユーザー列から情報を取得してきた場合、これもまた Apply to each アクションが入ってしまいます。

image.png

これはこれで何か影響があるわけではないのですが、ここに添付ファイルを付した時にも Apply to each が入っていくため、ちょっと鬱陶しいです(※個人の感想です)

image.png

選択アクションを配置して、Adressee 列に入っているユーザーの Email アドレスだけを配列化し、この配列をセミコロン( ; )で結合することで Apply to each を回避できます。

image.png

4.2. ファイルを添付する

image.png

宛先を設定したら、添付ファイルを設定します。添付ファイルの名前には「添付ファイルの取得」アクションで得た結果を入力すればよいのですが、ここでも Apply to each アクションが入ってしまうので first 関数で回避しています(※もちろん、複数件ファイルが存在する場合は使用できません)

first(body('添付ファイルの取得'))['DisplayName']

直接ファイル名を拡張子付きで入力しても良いと思いますが、毎回異なるファイル名であったり.pdf なのか .xlsx なのかが異なる場合には対応できないため、上のように設定しておく方が良さそうです。

image.png

添付ファイルのコンテンツ をセットしたらメール送信の設定は完了です。

5. ステータス変更

最後に忘れてはならないのがステータス変更です。今回は、メール送信が行われたことを示すために MailFlag 列を既定の「いいえ」から「はい」に変更します。

image.png

なお、他にも選択肢列が存在する場合は、その選択肢列の既定値にリストが更新される可能性があるので要注意です。念を入れて、トリガーの「アイテムが作成または変更されたとき」アクションで得た値を設定しておくのが無難です。

image.png

以上、今回は SharePoint リストの添付ファイル列の有無を判断して Power Automate のフローを実行する方法について書きました。次いで、よくある利用場面について例示しました。フロー構築の何かしらの参考になれば幸いです。

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?