LoginSignup
6
4

Power AutomateでJSONからMarkdown記法のテーブルに変換する方法

Last updated at Posted at 2024-05-25

2024.06.10

非常に煩わしい選択有効な JSON を入力してください。のメッセージですが
image.png

関数にすると、大人しくなります!
concat('|',item()?['ID'],'|',item()?['approver']?['DisplayName'],'|',item()?['position'],'|',item()?['result']?['Value'],'|')

image.png

はじめに

Power Automateでは、データ操作アクションを使用し、JSON 配列入力を、CSVまたはHTMLテーブルに変換することができます。

JSON 配列入力から、サクっとヘッダーを含めてテーブルを作成できるため、便利に感じていますが、マークダウン記法のテーブルは、変換できないのかな…と若干モヤモヤしておりました。

というのも、Power Automate の承認要求で Markdown 言語を使用することができるため、この方法にフィットさせるためには、「マークダウン」もサポートされてほしいという想いもあったりします。

Power AutomateTeamsOutlookといったクライアントでMarkdown のサポートに一貫性がないようです。
現在の公式リファレンスを読んで利用をご検討ください。

承認ワークフローについては、先日記事を書き、沢山の方に見ていただきました。

こちらのレベルアップも含めて、「今ないものは自分で作ろう!」 ということで、対策を考えてみました!

テーブルの作成と同じような体験ができる方法を考える

出来ることであれば、JSON 配列入力から、サクっと変換できることが理想です。
Power Automateのデータ型で、取り扱われる配列はJSON 配列入力がほとんど。

例えばSharePoint Lists複数の項目を取得し、Markdown記法のテーブルに変換できれば嬉しい。

要件として

  1. JSON 配列入力から変換する
  2. 力業ではない、データ操作にする(Apply to eachは利用しない)

ということで、Let's データ操作 Cooking!

試したこと

Listsに、下記のようなテーブルを設けました。

ID FlowID approver(ユーザー列) position result(選択肢列) comment
1 Flow0001 荒賀 翼 部門長 承認 プロジェクトの目的と予算が明確であり、承認します。次のステップを進めてください。
2 Flow0001 大久保 絵梨 財務部責任者 承認 予算の詳細確認しました。財務面から問題ありません。
3 Flow0001 荒川 賢二 法務部責任者 承認 契約内容についてレビューしました。法的なリスクは見受けられません。
4 Flow0001 成瀬 亜弓 IT部門長 条件付き承認 システムに必要な変更がいくつかあります。それらが完了次第、全面的な承認とします。
5 Flow0001 森屋 英明 経営者 承認 すべての部署からの承認を確認しました。プロジェクトを開始してください。

ダミーデータです

上記のうち、IDapproverpositionresultを、それぞれ

  • ID - そのまま
  • approver - 承認者
  • position - 役職
  • result - 結果

と置き換えて、テーブルを作りたいと思います。

実現するためのアクション

実現するために、データ操作アクションを、駆使します。

登場するアクションは、データ操作三銃士!

  1. 作成
  2. 選択
  3. 結合

選択の凄さは以前書きました!

流れ

  1. SharePoint - 複数の項目の取得で、JSON 配列入力を取得
  2. 作成マークダウン用のヘッダーを作成
  3. 選択で、JSON 配列入力から、テーブルデータを抽出
  4. 結合で、(3)選択で作成した配列から、マークダウン用に要素を結合
  5. 作成で、(2)ヘッダー(4)結合の文字列を合体(ついでにほかの文面も追加する)
  6. 承認を実行

上記で実現できないか見てみます。

image.png

1. SharePoint - 複数の項目の取得

フィルタークエリを使って、対象の項目を抽出します。
環境変数を使って、サイトのアドレスリスト名を設定しています。

image.png

2. 作成マークダウン用のヘッダーを作成

作成
|ID|承認者|役職|結果|
|---|---|---|---|

image.png

選択で、JSON 配列入力から、テーブルデータを抽出

シンプルな配列に仕立てるため、テキストモードに切り替えて、下記のように設定します。

image.png

input
{
    "from": "@outputs('複数の項目の取得')?['body/value']",
    "select": "|@{item()?['ID']}|@{item()?['approver']?['DisplayName']}|@{item()?['position']}|@{item()?['result']?['Value']}|"
}

テキストモードで、直接値を指定することにより、[`key:value"]にならず、["value"]として構成されます。
やや強引な技のためか、保存は成功するものの、ほかの項目をいじるたびに、エラーがでます。(2024.05.25時点)

image.png

保存後、ほかの項目を修正して上書きしようとすると、"ダブルクオーテーションが消え、エラーと評価されてしまいます。

2024.06.10

非常に煩わしい選択有効な JSON を入力してください。のメッセージですが
image.png

関数にすると、大人しくなります!
concat('|',item()?['ID'],'|',item()?['approver']?['DisplayName'],'|',item()?['position'],'|',item()?['result']?['Value'],'|')

image.png

3. 結合で、(2)選択で作成した配列から、マークダウン用に要素を結合

結合(2)選択で作成した配列@{body('選択')}を指定して、改行で結合します。

image.png

4. 作成で、ヘッダー(4)結合の文字列を合体(ついでにほかの文面も追加する)

作成で、(2)ヘッダー(4)結合の文字列を合体させます。
↓の黄色#ffce44の部分です。

image.png

入力
# 承認申請 プロジェクトの委託
G社のシステムを移管するプロジェクトを発注するため、承認を願う

# 背景
いろいろもう限界で、現場からも不満の声が絶えないため

## 依頼者
 - デジタル健康推進部 鰹男

## 選定理由
 1. 安い
 1. はやい
 1. 上手い

## 参考資料
[発注先 G社](https://qiita.com/DEmodoriGatsuO)

## 承認プロセス

** 1次承認者 荒賀 翼**

@{outputs('ヘッダー')}
@{body('結合')}

これを開始して承認を待機詳細に設定します。

image.png

さて、挙動を見てみましょう!

結果!

■ Teams - デスクトップアプリ

image.png

■ Outlook

image.png

■ Power Automate モバイルアプリ

20240525_121856548_iOS.png

表形式にはなりました!
マークダウン変換の手法として活用していきたいと思います!

6
4
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
6
4