LoginSignup
0
0

はじめに

昨日、Power AutomateとExcelを使って共有可能な一括メール送信機能を作成する記事について SNS上でありがたい声を複数いただきました。

本当に嬉しいです。「あるある」な運用のようですね。

感想の中で添付ファイルの取り扱いを工夫したいというお声も頂戴しました。
具体的には「SharePointOneDriveから、条件に合致するファイルのみ抽出して送信するといったシーンに使えると嬉しい!」というお声です。

それでは部署別に添付ファイルを選定して、メールを送信するというテーマを今回は選び、Power Automateによる実現方法を模索していきたいと思います。

Power AutomateとExcelを使って共有可能な一括メール送信機能を作成する記事のフローを応用して進めていきましょう。

特定の条件に応じたメール送信

今回のテーマは部署別のメール送信です。

まず昨日の Excel データを少し加工します。部署(Department)列(G列)を追加します。
部署は3つです。

  1. Dev
  2. Corporate
  3. Sales

image.png

部署が3つあるので、送信されるメールも3通に絞ります。
各従業員に部署の値があるため、重複の削除が必要です。

Power Automate でも手法はいくつかありますが、今回は下記のアプローチで進めます。

  1. 選択 - 部署の列を抽出
  2. 作成 - Union 関数 重複を削除し、一意の値に絞り込む
  3. 重複を削除した 3 つの部署に対して、その部署に所属する人たちへメールを送信

今回ご紹介する選択Union 関数重複削除のフローは若干難しい部分があるかもしれません。

しかし「こういう手法で重複を削除するんだな」と目で見ていただければ幸いです。

こういったものも書いています🐟✨

フローの手順

  1. Excel を昨日と同じ手法で取得
  2. 選択 - 取得した Excel の表データから、部署の列だけ抽出
  3. (2)の結果を Union 関数 で重複を削除
  4. (1)で取得した Excel の値を、(3)で重複削除した値にてフィルターしてメールを送信する
    1. アレイのフィルター処理
    2. 4-1の配列を、一次元配列に変換
    3. 4-2の配列を、データ操作アクションの 結合(Join)アクションを使って、セミコロン;で結合
    4. 結合(Join)した文字列でメールを送信

1. Excel を昨日と同じ手法で取得

先日記載したブログと同じ内容です。
Excelのアクションで値を取得します。

image.png

2. 選択 - 取得した Excel の表データから、部署の列だけ抽出

表データのうち、部署の列の重複を削除するため、選択アクションで列を絞り込みます。
image.png

  • From - outputs('表内に存在する行を一覧表示')?['body/value']
Map
{
  "Department": @{item()?['Department']}
}

3. (2)の結果を Union 関数 で重複を削除

選択で取得した値を和集合の作成というアプローチで重複を削除します。

image.png

  • union(body('選択'),body('選択'))
  • Union 関数 は、1つの集合ともう1つの集合(別の集合)を合算・結合する関数のため、両方の集合に属する一意の値のみが返されます

4. (3)の結果で繰り返し処理

4-1. アレイのフィルター処理

image.png

  • From - outputs('表内に存在する行を一覧表示')?['body/value']
  • Filter Query item()?['Department'] is equal to items('For_each')?['Department']
詳細モード
@equals(@{item()?['Department']},@{items('For_each')?['Department']})

重複を削除した配列から、Excelのデータのフィルターを改めて実施します。

4-2. 選択アクションで4-2の配列を、一次元配列に変換

JSON配列入力から結合のため、一次元配列に変換します。

image.png

  • From - body('アレイのフィルター処理')
Map
item()?['MailAddress']

4-3. データ操作アクションの 結合(Join)アクションを使って、セミコロン;で結合

文字通り配列の値を;で結合します。これにより部門別にメールが送信できます。

image.png

  • From - body('選択_一次元配列に変換')
Join With
;

4-4. 結合(Join)した文字列でメールを送信

宛先body('結合') 結合の結果を使用します。

image.png

このアプローチで部署毎にまとめてメールを送ることができました!

image.png

image.png

image.png

慣れないうちは「こういうやり方でやるんだな」程度で見ていただければ十分です。
Excel を使う場合は、例えば UNIQUE 関数であらかじめ一意の値を先に絞り込むなど、他の手法もあると思います。

数ある手法の中で自分が好きなやり方を実践してみてください。

メーリングリストの活用やOffice 365 Userコネクタを活用するのもいいと思います

これで部署別にメールを送るという課題は解決しました。
次に添付ファイルを見ていきましょう。

SharePointで条件に合致する対象のファイルを添付して送信する

次に部署別に添付ファイルを送る方法を考えてみます。

例えば下記の内容に則って送信するものと仮定します。

image.png

部門 送信するファイル
Dev img.jpg、業務委託契約書ひながた.pdf
Corporate img.webp、ワークフロー申請マニュアル.pdf、郵送ガイドライン.pdf
Sales 会社従業員ハンドブック.docx、経費申請マニュアル.pdf

上記を送信するものとします。

この実現方法として

  1. SharePoint Lists
  2. ドキュメントライブラリ

上記の二択の活用方法を考えてみましょう。

1. SharePoint Lists

SharePoint リストには既定で添付ファイル列が存在しますので、コチラを活用します。
実際に[+ 新しいアイテムを追加]ボタンを押すと、添付ファイルという項目があります。

image.png

それぞれの部署ごとのアイテムを設けて、添付ファイルを追加、Outlook でメールに添付して送信してみるシナリオにしてみます。

image.png

  1. 添付ファイルを格納する配列変数の設定
  2. 部署と同じ名前で合致する項目を、複数の項目の取得からフィルタークエリを使用して取得
  3. 抽出した結果からIDを取得し、添付ファイルを取得アクションを実行
  4. IDを取得してから添付ファイルのコンテンツの取得
  5. (3)(4)の結果を(1)の配列に追加
  6. メールで送信

以上の手順で、部署別のメール送信と添付ファイルの運用ができます。
詳細を見ていきます。

まず、SharePoint リストから取得した添付ファイルを格納する配列変数を用意します。

image.png

Value[]から配列を設定します。

配列は最初とっつきにくい内容かもしれませんが、「こういうやり方なんだな」程度に見ていただければと。

添付ファイルを取得するため SharePoint Listsの中の行のIDを特定する必要があります。
今回は複数の項目の取得アクションで、フィルタークエリ を使用して、項目のIDを特定しています。

image.png

  • サイトのアドレス、リスト名はブラインドしています

フィルタークエリ - Title eq 'Dev'
こちらでタイトル列がDevという文字である項目を抽出しています。

フィルタークエリは、ざっくり言えば「抽出条件を使った特定の行の取得」というイメージです。
今回は条件の文字に合致するリストの行(レコード)を取得します。

レコードを取得した後、リストのIDから添付ファイルを取得します。

image.png

複数の項目の取得アクションは、配列で値が取得されるため、単一のレコードに絞り込む必要があります。

ID
first(outputs('複数の項目の取得')?['body/value'])?['ID']

こちらでSharePoint Listsの行の添付ファイルを一括で取得できます。

しかし添付ファイルの取得アクションでは、主にリストに付帯している添付ファイルのID名前は取得できますが、ファイル コンテンツ(ファイルの内容)が取得できません。

ファイル コンテンツを取得するために、添付ファイルのコンテンツの取得アクションが必要になります。
添付ファイルの数だけ繰り返す処理です。

image.png

  • IDは前のアクションと同様にfirst(outputs('複数の項目の取得')?['body/value'])?['ID']
  • ファイル識別子はitems('For_each')?['Id']

このアクションで実際のファイルの中身を取得しているとみていただければと。

そして結果を配列変数に追加します。

配列の中には

上記が必要です。

Value
{
  "name": @{item()?['DisplayName']},
  "contentBytes": @{body('添付ファイルのコンテンツの取得')}
}

image.png

繰り返し処理のあと、結果を Outlook添付ファイルに設定することで送信が完了します。

image.png

添付ファイルをアレイ全体の入力に切り替えて、配列変数を設定します

これで条件に合致した結果の添付だけ送られますね。
(2)のフィルタークエリを次第で取得できる値が変わります

  • Devの場合
    image.png

  • Corporateの場合
    image.png

  • Salesの場合
    image.png

2. SharePoint ドキュメントライブラリ

  1. SharePoint Listsと同様に配列を先に用意します
  2. ファイルの取得 (プロパティのみ)を実施
    • 条件に合致するファイルをまとめて取得します
  3. 上記からファイルの識別子を取得し、ファイル コンテンツの取得アクションでファイルの内容を取得
  4. (2)(3)の結果を(1)で用意した配列変数に追加
  5. 配列変数を使って送信が完了

ほとんどSharePoint Listsと同じです。

ファイルの取得 (プロパティのみ)フィルタークエリを使い、特定のファイルのみ取得します。

image.png

上記で識別子を取得したうえで、ファイル コンテンツの取得アクションでファイルの内容を取得。

image.png

そして結果を配列変数に追加していきます。

image.png

Value
{
  "name": @{items('For_each2')?['{FilenameWithExtension}']},
  "contentBytes": @{body('ファイル_コンテンツの取得')}
}

手法をひとつマスターすれば応用が利きますね!

Excelを使ったフローの実行手順

ドキュメントライブラリバージョンでやってみます!

  1. フローを手動で実行
  2. 部署ごとに、部署の情報を重複を削除
  3. 部署ごとに添付ファイルを取得し、(2)の結果を結合し、メールをまとめて送信
  4. 送信した後に配列変数を空配列に設定

image.png

image.png

繰り返しに繰り返しを重ねる処理ですね!
大変ですが慣れれば簡単です🐟🔥

良い感じに部門別送信ができました!

image.png

最後に

条件付きファイルの配信は意外と自分も使いそうだな、とアイディアが浮かびました!

昨日の記事からアイディアにつながり嬉しい限りです!現場に即したフローのアイデアがございましたら、ぜひ考えてみたいと思います。
すべての要望にお応えできることは確約できませんが、可能な限り検討させていただきます。

今回もブログを読んでいただき、ありがとうございました。
よいPower Lifeを!

0
0
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
0
0