💻

Power Automate で SharePoint Online ユーザーグループ列に複数の値を設定する

2022/12/11に公開

この記事について

この記事は、Microsoft Power Automate Advent Calendar 2022 12 日目の記事です。

この記事では、Microsoft Forms の回答欄で入力された値を用いて、SharePoint Online の ユーザーグループ列 に複数の値を設定する方法について記載しています。

複数入力が可能な SharePoint Online ユーザーグループ列は Power Automate のフロー上でどのように扱われるか

これは、実際の画面を見た方が早いと思います。
以下の画像のような形で、

  • それぞれ個別に入力
  • 全ての値をまとめて入力

のいずれかを選択するようになっています。

それぞれ個別に入力の例

全ての値をまとめて入力の例

そのため、入力個数が限られている場合はそれぞれ個別に指定、入力個数が可変の場合は、全ての値をまとめて入力するようにする必要があるわけです。

Microsoft Forms 回答欄の値は回答項目ごとの単位で渡される

Microsoft Forms のフォーム回答が送信されたら Power Automate フローを起動 という自動化したクラウドフローを用意するとします。
その場合、Power Automate 既定のトリガーでは、値は回答項目単位でしか渡ってこないため、そのままでは SharePoint Online コネクタのアクション 項目の作成 内などでは利用できないわけです。

例えば、このような形で、Forms 側の回答を行ったとします。

Forms 回答欄で複数の UPN を改行して入力

その場合、当たり前ですが、Power Automate 側では、以下の形で値が渡ってきます。

これをそのまま SharePoint Online コネクタのアクション 項目の作成 で使おうとしても、エラーになります。(入力形式が正しくないため、個別に入力しようとしても全ての値をまとめて入力しようとしてもうまくいきません)

  • 個別に入力で試してみる: フロー実行時にエラー
    個別に入力のエラー例(実行時にエラー)

  • 全ての値をまとめて入力で試してみる: そもそもフローが保存できない
    全ての値をまとめて入力のエラー例(そもそもフロー保存が不可)

そのため、SharePoint Online コネクタのアクションに対応するよう、自前で変数化をしてあげないといけないわけです。

ユーザーまたはグループ列の値の実態

では、どのように入力値を入れてあげればいいかという話ですが、ここで注目したいのは、先ほどの入力エラー画面の例で、個別に入力のところで入れようとした際の JSON 値です。

この部分を見てみると、実際に Power Automate 上では、以下の形式(配列 / アレイ)で値を代入しようとしていることがわかります。

[
  {
    "Claims": "<入力したい値(この例だと UPN)>"
  }
]

つまり、SharePoint Online の ユーザーまたはグループ 列の値を Power Automate のフローを使って設定したい場合は、

  • JSON 形式
  • 1 つの項目 = 1 つの Claims 要素

の形で対応してあげればいい、ということが理解できるわけです。(これに気づけると、一歩、市民開発者としてレベルアップできそうですね)

今回の例で言うと、入力したい実際の値は test01@jcdugdev.onmicrosoft.comtest02@jcdugdev.onmicrosoft.com なわけなので、以下のような値を変数コネクタで自作して、SharePoint Online コネクタのアクションに渡してあげればいいわけです。

[
  {
    "Claims": "test01@jcdugdev.onmicrosoft.com"
  },
  {
    "Claims": "test02@jcdugdev.onmicrosoft.com"
  }
]

自作の変数で SharePoint Online コネクタのアクション内の入力欄に対応する

上記で実際に入力の形式がわかったので、これを Power Automate の変数アクションを駆使して作成すればいいわけですが、どのように作成すればいいかと言うと、以下の 4 つを実装するだけです。

  1. Microsoft Forms で入力された値を分割するための識別子(今回は 改行 (\n))用の変数の定義
  2. Microsoft Forms で入力された値を配列化して格納する用の変数定義
  3. SharePoint Online コネクタのアクション内で使用する値を格納する用の変数定義
  4. SharePoint Online コネクタのアクション内で使用する値を作成する処理

1 つずつ解説します。

Microsoft Forms で入力された値を分割するための識別子用の変数定義

まずは、Microsoft Forms の回答項目内にある値を分割するための変数を定義します。
今回の例で言うと、Microsoft Forms の入力では、「複数値がある値は 改行 (\n) を入れる」というのを指定しているため、改行の変数を定義します。

Microsoft Forms で入力された値を配列化して格納する用の変数定義

Microsoft Forms の回答内容を配列 (アレイ) 化して格納するための変数を定義します。
配列化して格納するためには、split 関数を使用します。
今回の例では、値と値とを 改行 (\n) で区切るように指定しているため、split 関数での区切り判定を改行とします。

入力例
split(<Microsoft Forms の回答値>,<値分割の識別子(改行)>)
# 実際の設定値は以下のような形になります
split(outputs('応答の詳細を取得する')?['body/r6677d2bb9ef44e7c898269f96b41f4cc'],variables('値分割の識別子(改行)'))

※split 関数内で値を設定する際のイメージは、こんな感じです。うまく 動的なコンテンツ のタブを切り替えて入力を行ってください。

SharePoint Online コネクタのアクション内で使用する値を格納する用の変数定義

SharePoint Online コネクタのアクションに渡す用の箱(変数)を用意しておきます。

SharePoint Online コネクタのアクション内で使用する値を作成する処理

Apply to each アクション内で、Microsoft Forms の入力値を split 関数で分割した配列をぐるぐる回します。

Apply to each アクション内のアクションで、条件 アクションを設定します。
条件内容としては、

  • 現在のアイテム
  • 次の値に等しくない

に設定します。

条件に合致する場合の操作(はい 部分)には、配列変数に追加 アクションを設定します。条件に合致しない場合の操作(いいえ 部分)には、何も設定しません。
配列変数の追加 アクションでは、SharePoint Online コネクタのアクション内で使用する変数に、以下の形式の値を追加するように設定をします。

{
  "Claims": "<現在のアイテム>"
}

作成した値を SharePoint Online コネクタのアクションで使用

これで、SharePoint Online コネクタのアクションで使用する変数を作成できたので、下記のような形で使用します。

これで、実際に Microsoft Forms から送信された値で、SharePoint Online の ユーザーまたはグループ 列の複数入力に対応できるようになります。
ぜひ、自分の Power Automate フローでも変数をうまく活用し、さらなる自動化を試みてください。

Discussion