データを格納する SharePoint リストに設定を持たせ、Power Automate で利用する

経緯

以前、SharePoint リストの説明に簡単な設定を入れ込んだことがあり、
それを Power Automate でも利用するとしたらできるのかな?っとやってみたメモ

今回のお題(仕様)

  • あるユーザーがチャネルに投稿したら、SharePoint リストにログを残す

前準備

  • MS Teams にて、「お試し用チーム」を作成
  • 一般チャネルにリストを作成
    • 「ListWithSettings」を作成して、その後「投稿があったらログを取る」に名前を変更
    • 列の設定
    • タイトル: 1行テキスト
    • ログ: 複数行テキスト
    • ユーザー名: 1行テキスト
  • リスト「投稿があったらログを取る」の説明に設定を登録
    1. リストを SharePoint で開く
    2. リストの設定を開く
    3. [リスト名、説明、ナビゲーションの列挙] をクリック
    4. 設定を登録
      ここで登録されているアカウントが投稿したらログを取るようにする

      {
      "TargetUser": ["テストユーザー 01", "テストユーザー 02"]
      }

Power Automate での実装

フロー全体は下図のようになります

今回は追加したステップの名前は変更しないで説明してみます

トリガーは「チャネルに新しいメッセージが追加された時」としています

次のステップでは、「SharePoint に HTTP 要求を送信します」を使い、
リストの説明部分だけ取得します

次のステップでは、説明にセットした文字を JSON オブジェクトに変換して、
変数にセットします

式の内容は下記のようにしています

json(outputs('SharePoint_に_HTTP_要求を送信します')?['body']['d']['Description'])

次のステップでは、JSON オブジェクトの値を扱いやすくするために、
JSON の解析を行っています

スキーマはサンプルから生成していますが、下記のようになっています

{
    "type": "object",
    "properties": {
        "TargetUser": {
            "type": "array",
            "items": {
                "type": "string"
            }
        }
    }
}

ここまでが今回の主旨なので、ここからは特に載せる必要はないのですが… w
次のステップでは、投稿したユーザー名と設定されているユーザー名がマッチしているかを
チェックしています

左辺の式は下記のようにしています

contains(body('JSON_の解析')?['TargetUser'], triggerOutputs()?['body/from/user/displayName'])

最後のステップは先のステップの条件にマッチした時、SharePoint にアイテムを
登録するようにしています

結果

まぁフローの結果はどうでもいいんですが、
1 つ目の投稿がログ対象外のユーザー、2 つ目の投稿がログ対象ユーザー

「投稿があったらログを取る」リストの状態

考察

過去なにかの案件で、何かの縛りがあって使った方法でしたが、当時は JavaScript か
PowerShell で CSOM 使ってガリゴリしていたと思うんですが、Power Automate で
同じことするとこんな感じかーということだけの自己満足記事です