🛸

Power Automate リストを活用してメール送信の承認を行う

2024/06/14に公開

メールの作成にリストを使う方法

リストの承認機能を使ってみました。
メールの作成には、以下の方法を試しました。

  1. リストのフォームから
  2. PAD から

リストの作成

テンプレートから作る場合

テンプレートから始めるとリマインダーを簡単に追加できます。

作業の進捗追跡を選ぶとこんな感じ。

作業項目 説明 カテゴリ 進行状況 優先度 開始日 期限 担当 メモ

項目名が最初から日本語で作成されますが、PAD でプロパティを確認すると
内部列名は英語になっているのでこのまま使っても問題なさそうに思います。
変数の値

一から作る場合

一から作る場合は、項目名を英語で追加してから日本語に変更するのをおすすめ。
以下の記事で日本語で列名を作成したときのPAフローのイメージがつかめます。

https://qiita.com/Takashi_Masumori/items/2fc4794369a2d5b840df

自動化しないなら内部名について気にしなくても良いのですが、
自動化したいので英語で作ります。

Subject Body TO CC Boss

事前準備

リストの設定

リストに承認要求の設定をすることで、色々便利な機能が使えるようになります。

  1. 送信されたアイテムに対してコンテンツの承認を必須にするリストの設定
    設定 > バージョン設定 > コンテンツの承認

    送信されたアイテムに対してコンテンツの承認を必須にする
    → はい

これを有効に設定。

ついでに項目名を日本語に変更します。

件名 本文 TO CC 上長 承認の状況

入力フォーム

承認待ち。
Pending

リストを作成したときに入る ModerationStatus(承認の状態)の既定値はPendingです。
PA のトリガーに設定するときは、このPendingを使うと良いです。

トリガーの条件
@equals(triggerBody()?['{ModerationStatus}'],'Pending')

承認後は Approved。
専用の項目が追加される

{ModerationStatus}: 承認の状況
{ModerationComment}: 承認者のコメント
  1. 専用の承認アクションも使えます。
    • 普通の列を承認に使う場合は「項目の更新」アクションで更新します。
    • 承認の設定を行っている場合は「コンテンツの承認状態を設定します」で更新します。

PA で使う場合はこんな感じ。
PA

PAD のアクションにもあります。
PAD


フローの作成

アイテムの承認とメールの送信は、別フローに分けた方が使い勝手が良くなると思います。

新しいアイテムが追加されたときに承認を開始する

このテンプレートを使用しました。

https://make.powerautomate.com/galleries/public/templates/d62b2527bb5343d689d5107b0922e57b/新しいアイテムが追加されたときに承認を開始する

トリガーの条件
@equals(triggerBody()?['{ModerationStatus}'],'Pending')

アイテムが承認されたときにメールを送信する

トリガーの条件
@equals(triggerBody()?['{ModerationStatus}'],'Approved')

変数を初期化する

  • Name: attachmentFiles
  • Type: Array

条件

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

添付ファイルの取得

  • ID: @triggerBody()?['ID']

それぞれに適用する

  • foreach: @body('添付ファイルの取得')

添付ファイルのコンテンツの取得

  • itemId: @triggerBody()?['ID']
  • attachmentId: @items('それぞれに適用する')?['Id']

配列変数に追加

value
{
  "name": "@items('それぞれに適用する')?['DisplayName']",
  "contentBytes": "@body('添付ファイルのコンテンツの取得')"
}
コード ビュー
{
  "type": "If",
  "expression": {
    "and": [
      {
        "equals": ["@triggerBody()?['{HasAttachments}']", true]
      }
    ]
  },
  "actions": {
    "添付ファイルの取得": {
      "type": "OpenApiConnection",
      "inputs": {
        "parameters": {
          "dataset": "https://○○.sharepoint.com/sites/○○",
          "table": "",
          "itemId": "@triggerBody()?['ID']"
        },
        "host": {
          "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline",
          "connection": "shared_sharepointonline",
          "operationId": "GetItemAttachments"
        }
      }
    },
    "それぞれに適用する": {
      "type": "Foreach",
      "foreach": "@body('添付ファイルの取得')",
      "actions": {
        "添付ファイルのコンテンツの取得": {
          "type": "OpenApiConnection",
          "inputs": {
            "parameters": {
              "dataset": "https://○○.sharepoint.com/sites/○○",
              "table": "",
              "itemId": "@triggerBody()?['ID']",
              "attachmentId": "@items('それぞれに適用する')?['Id']"
            },
            "host": {
              "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline",
              "connection": "shared_sharepointonline",
              "operationId": "GetAttachmentContent"
            }
          }
        },
        "配列変数に追加": {
          "type": "AppendToArrayVariable",
          "inputs": {
            "name": "attachmentFiles",
            "value": {
              "name": "@items('それぞれに適用する')?['DisplayName']",
              "contentBytes": "@body('添付ファイルのコンテンツの取得')"
            }
          },
          "runAfter": {
            "添付ファイルのコンテンツの取得": ["Succeeded"]
          }
        }
      },
      "runAfter": {
        "添付ファイルの取得": ["Succeeded"]
      }
    }
  },
  "else": {
    "actions": {}
  },
  "runAfter": {
    "変数を初期化する": ["Succeeded"]
  }
}

メールの送信 (V2)

  • To: @triggerBody()?['TO']
  • Subject: @triggerBody()?['Title']
  • Body: @{triggerBody()?['Body']}
  • Cc: @triggerBody()?['CC']
  • Attachments: @variables('attachmentFiles')
コード ビュー
{
  "type": "OpenApiConnection",
  "inputs": {
    "parameters": {
      "emailMessage/To": "@triggerBody()?['TO']",
      "emailMessage/Subject": "@triggerBody()?['Title']",
      "emailMessage/Body": "<p>@{triggerBody()?['Body']}</p>",
      "emailMessage/Cc": "@triggerBody()?['CC']",
      "emailMessage/Attachments": "@variables('attachmentFiles')",
      "emailMessage/Importance": "Normal"
    },
    "host": {
      "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365",
      "connection": "shared_office365",
      "operationId": "SendEmailV2"
    }
  },
  "runAfter": {
    "条件": ["Succeeded"]
  }
}

Discussion