ルドルフもわたるふもいろいろあってな

Microsoft 365、Power Platform、PowerShellについて調べたことや検証したことなどを投稿します。技術の話は面白い。

JSON Dictionary の簡易版という手法を作りました。

以前、下記投稿で「JSON Dictionary」について解説をしました。今回解説するのはこの手法の簡易版です。
wataruf.hatenablog.com

JSON Dictionary」とは

Dictionaryとは、キー(Key)と値(Value)の組み合わせを持つデータの集合です。JSON形式のデータでDictionaryを実現したものが「JSON Dictionary」です。

データの集合をキー(Key)と値(Value)の組み合わせにすることによって図の「③ :①の配列から「リアクションした日時」を取得」が行えるようになります。Excel関数のLookUp と同じだと捉えてください。

JSON Dictionary」については Hiroさんのブログ記事で詳しく解説されているのでこちらを参照してください。私が「JSON Dictionary」を知ったのはHiroさんのこのブログ記事があったからです。なので元ネタであると認識しつつ先に下記記事を読むことをお勧めします。
mofumofupower.hatenablog.com

JSON Dictionary」の長所・短所

長所

配列からLookupで値を取得できることです。また、これを応用して特定の列をキーにして2つの配列をマージできることです。

Power Automate は配列の操作が柔軟にできるツールですが、PowerShellなどのソースコードで配列を操作することに比べると難易度が高く、お作法に癖があります。そのため、「特定の列をキーにして2つの配列をマージする」という操作を聞いて「(`・ω・´) フローでこうやったらできる!」とはすぐには思いつきづらいです。数学の公式を覚えるように、配列操作の手法を覚えておくことは大事です。

配列を操作するための道具のひとつとして習得しておくと、Power Automateを使って実現できることのアイディアの幅が格段に広がります。「どんな操作ができるのか」という使える手段が分かると「どんなデータが取得できるのか」が分かるためです。

JSON Dictionary」を知ったことで思いついたフローの例が「"いいね"をしていないひとの自動抽出」を使ったフローです。

「"いいね"をしていないひとの自動抽出」を使ったフロー:
wataruf.hatenablog.com

短所

JSON Dictionary」は強力なノウハウですが、構造が複雑になりやすく理解する難易度が高めという短所があります。
  ※自分が過去に書いた関数を見て、何をしているかパッと思い出せないくらい

(´・ω・`)これなにしているんだっけ…

そこで思いついたのが構造を単純化した簡易版

手法として使いやすくするために思いついたのが「JSON Dictionary の簡易版」です。

"簡易版"と呼ぶのは、汎用的に使えるようするために機能を一部限定して仕組みを単純化したもの、という意図があります。

この"簡易版"は一言で表すとKeyとValue を1対1にしたJSONです。
下図は例としてSharePointサイトから取得したアクセス許可レベルです。それを名前とIDでKey-Valueの形に整形したものです。

この形式だと関数で呼び出すときもすっきり書けて読みやすくなります。

元ネタである「JSON Dictionary」がKeyとValueを1対多で扱うのに対して、簡易版は必ず1対1になります。

それでは、このJSONを作成するフローを解説します。(今回の主旨

解説するフロー図

アクションの設定を閉じた状態のフロー図


開いた状態のフロー図


ステップごとの説明

1.「手動でフローをトリガーします」トリガー

このフローは任意のタイミングで実行するために手動実行のトリガーを使用しています。

2.「SharePoint に HTTP 要求を送信します」アクション

このアクションは「SharePoint」>「SharePoint に HTTP 要求を送信します」アクションです。整形するデータの例として使用するためにここではSharePointサイトのアクセス許可レベルを取得しています。

下図のデータが、HTTP要求の応答で得られたデータです。赤枠で囲った部分が1つのアクセス許可レベルを表しています。青枠で囲った部分が整形後に残したいプロパティです。

3.「選択-Key(アクセス許可レベルの名前)とValue(ID)の配列を作る」アクション

この「選択」アクションと後続の「作成」アクションがこのフローのメインです。
このアクションは「データ操作」>「選択」です。このアクションでNameとIDを取得します。

コード:

"inputs": {
"from": "@outputs('SharePoint_に_HTTP_要求を送信します')?['body']?['d']?['results']",
"select": {
"@{item()?['Name']}": "@item()?['Id']"
}
},

このアクションの出力が下図のデータです。この形式ではま括弧が邪魔なので後続のアクションでさらに整形します。

4.「作成-簡易版JSON Dictionaryを作る」アクション

このアクションは「データ操作」>「作成」です。このアクションで括弧を削除してシンプルなKey-Value形式にします。

"3.「選択-Key(アクセス許可レベルの名前)とValue(ID)の配列を作る」"の出力から目的のKey-Value形式に整形することがJSON形式のままでは難しいため、以下の工程で整形を行っています。

  1. string関数でJSONを文字列に変換
  2. replace関数で不要な文字列を削除
  3. concat関数を使って全体を中括弧で閉じなおす
  4. json関数でそれをJSONに再変換する

コード:

"inputs": "@json(concat('{',replace(replace(replace(replace(string(body('選択-Key(アクセス許可レベルの名前)とValue(ID)の配列を作る')),'{',''),'}',''),'[',''),']',''),'}'))",

こうすることで、下図の通り目的のJSONを得ることができます。

5.「作成 -権限のIDを取得する」アクション

このアクションは「データ操作」>「作成」です。簡易版JSON Dictionary から値を取りだすデモンストレーションです。

以下の書き方で目的のValueを取得します。

コード:

"inputs": "フルコントロールのID:@{outputs('作成-簡易版JSON_Dictionaryを作る')?['フル コントロール']}\n投稿のID:@{outputs('作成-簡易版JSON_Dictionaryを作る')?['投稿']}\n閲覧のID:@{outputs('作成-簡易版JSON_Dictionaryを作る')?['閲覧']}\nカスタムほげほげアクセス許可レベル:@{outputs('作成-簡易版JSON_Dictionaryを作る')?['カスタムほげほげアクセス許可レベル']}",

出力結果は以下の通りです。

補足

例で取得した「アクセス許可レベルのID」を使って下記のようにしてSharePointサイト内で権限の付与を行うことができます。


最後に

今回のサンプルフローをGitHubで公開しました。これがフローづくりのヒントとして活用されれば幸いです。
github.com


今回は以上です。