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

:::note info
2024.06.10

非常に煩わしい`選択`の`有効な JSON を入力してください。`のメッセージですが
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/c24a0da0-c0b0-0320-a3a3-c844e841989a.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/4e4c408e-e6e3-cbac-948b-6f09ceaa70a9.png)
:::


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

- [CSV テーブルの作成](https://learn.microsoft.com/ja-jp/power-automate/data-operations#use-the-create-csv-table-action)
- [HTML テーブルの作成](https://learn.microsoft.com/ja-jp/power-automate/data-operations#use-the-create-html-table-action)

https://learn.microsoft.com/ja-jp/power-automate/data-operations#use-the-create-html-table-action

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

というのも、[Power Automate の承認要求で Markdown 言語を使用する](https://learn.microsoft.com/ja-jp/power-automate/approvals-markdown-support)ことができるため、この方法にフィットさせるためには、「マークダウン」もサポートされてほしいという想いもあったりします。

https://learn.microsoft.com/ja-jp/power-automate/approvals-markdown-support

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

[承認ワークフローについては、先日記事を書き、沢山の方に見ていただきました。](https://qiita.com/DEmodoriGatsuO/items/56c3324dae17a961e891)

https://qiita.com/DEmodoriGatsuO/items/56c3324dae17a961e891

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

# `テーブルの作成`と同じような体験ができる方法を考える
出来ることであれば、**JSON 配列入力から、サクっと変換できることが理想**です。
Power Automateのデータ型で、取り扱われる配列は`JSON 配列入力`がほとんど。

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

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

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

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

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

:::note warn
ダミーデータです
:::

上記のうち、`ID`、`approver`、`position`、`result`を、それぞれ
- ID - `そのまま`
- approver - `承認者`
- position - `役職`
- result - `結果`

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

# 実現するためのアクション
実現するために、[`データ操作`アクション](https://learn.microsoft.com/ja-jp/power-automate/data-operations#use-the-create-html-table-action)を、駆使します。

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

1. [作成](https://learn.microsoft.com/ja-jp/power-automate/data-operations#use-the-compose-action)
1. [選択](https://learn.microsoft.com/ja-jp/power-automate/data-operations#use-the-select-action)
1. [結合](https://learn.microsoft.com/ja-jp/power-automate/data-operations#use-the-join-action)

[`選択`の凄さは以前書きました！](https://qiita.com/DEmodoriGatsuO/items/aabff4e30bba821c39b7)

https://qiita.com/DEmodoriGatsuO/items/aabff4e30bba821c39b7

## 流れ

1. [SharePoint - 複数の項目の取得](https://learn.microsoft.com/ja-jp/sharepoint/dev/business-apps/power-automate/guidance/working-with-get-items-and-get-files)で、`JSON 配列入力`を取得
1. `作成`で`マークダウン`用の**ヘッダーを作成**
1. `選択`で、`JSON 配列入力`から、**テーブルデータを抽出**
1. `結合`で、`(3)選択`で作成した配列から、**マークダウン用に要素を結合**
1. `作成`で、`(2)ヘッダー`と`(4)結合`の文字列を合体（ついでにほかの文面も追加する）
1. `承認`を実行

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/b2543714-c1a5-a2a3-c25f-81c963011b13.png)

### 1. [SharePoint - 複数の項目の取得](https://learn.microsoft.com/ja-jp/sharepoint/dev/business-apps/power-automate/guidance/working-with-get-items-and-get-files)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/763dcf80-8717-2c37-f40a-4677922a23ae.png)

### 2. `作成`で`マークダウン`用の**ヘッダーを作成**

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/7e26cdc4-90de-890a-8d06-844d37b40b7c.png)


### `選択`で、`JSON 配列入力`から、**テーブルデータを抽出**
シンプルな`配列`に仕立てるため、`テキストモード`に切り替えて、下記のように設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/7bc7a7c1-60f5-a642-86db-af8253f3949b.png)

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/3f050662-0bca-edb5-0778-53fe24707676.png)

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

:::note info
2024.06.10

非常に煩わしい`選択`の`有効な JSON を入力してください。`のメッセージですが
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/c24a0da0-c0b0-0320-a3a3-c844e841989a.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/4e4c408e-e6e3-cbac-948b-6f09ceaa70a9.png)
:::

### 3. `結合`で、`(2)選択`で作成した配列から、**マークダウン用に要素を結合**
`結合`は`(2)選択`で作成した配列`@{body('選択')}`を指定して、改行で結合します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/1d155018-b5b3-fe22-4c52-381258234f0b.png)


### 4. `作成`で、`ヘッダー`と`(4)結合`の文字列を合体（ついでにほかの文面も追加する）
`作成`で、`(2)ヘッダー`と`(4)結合`の文字列を合体させます。
↓の黄色`#ffce44`の部分です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/9e6c85ed-5856-2b37-4e4d-968099a30ab6.png)


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

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

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

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

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

## 承認プロセス

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

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/9ad64a7f-ec24-b56d-3e56-1b1b3cc0c529.png)

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

# 結果！

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/b3fcb535-e868-1917-ffac-2c95a2e1ee6a.png)

■ Outlook

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/6f145627-91dc-44d6-590f-764360cf9cc9.png)

■ Power Automate モバイルアプリ

![20240525_121856548_iOS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/59bb365a-03bf-8d3c-5009-f46f931cc133.png)

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

https://qiita.com/DEmodoriGatsuO/items/aabff4e30bba821c39b7

https://qiita.com/DEmodoriGatsuO/items/56c3324dae17a961e891