【小ネタ】Power AutomateからSharePointリストのデータを取得する

SharePointOnlineのリストからPower Automateアクションを使用してデータを取得しようとしたときに「このデータ要らないんだけどなあ～」と思ったときにいじったことを覚書します。（個人的にExcelのテーブルから欲しいレコードのみを取得してくる時より苦労したので…。）

# 必要なレコードだけが欲しい
- 必要なデータを**フィルタクエリ**で絞ってしまいましょう。なお、SharePointリストにクエリを実行する際はODataクエリを使用する必要があります。
以下の記事はODataクエリの使い方が分かりやすく紹介されています。

https://qiita.com/yamad365/items/9a24bf7e034ea35bb996


## フィルタクエリが意図した通りに動作しない場合
ただし、上記のODataクエリは癖があって扱いづらい[^example]場合があります。（なのでちゃんとテストして動作確認しながらフローの作成を進めましょう!!）

[^example]: 例えば、私はBoolean型の項目でtrueのレコードを取得しようと``列名 eq true``でと取ろうとしたところfalseのデータが取れてきました…。(``列名 eq false``でも結果は同じでした)。``列名 ne true``(もしくは``列名 ne false``)にしたら取りたいデータが取れてきました…。SQLに慣れている身からすると「???」です。

ODataクエリを使いたくないなという場合は **一度「複数の項目」アクションを使用して全件取得した後、「[アレイのフィルター処理](https://mofumofupower.hatenablog.com/entry/2020/10/09/142351#:~:text=%E9%85%8D%E5%88%97%20%28%E3%83%AA%E3%82%B9%E3%83%88%29%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%83%BC%E3%82%92%E3%81%8B%E3%81%91%E3%82%8B%E6%99%82%E3%81%AB%E3%81%AF%E3%80%81%E3%80%8C%E3%82%A2%E3%83%AC%E3%82%A4%E3%81%AE%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%83%BC%E5%87%A6%E7%90%86%E3%80%8D%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%20%E3%81%AF%E3%81%84%2F%E3%81%84%E3%81%84%E3%81%88%E5%88%97%E3%81%AFtrue%2Ffalse%E3%81%A7%E5%8F%96%E5%BE%97%E3%81%A7%E3%81%8D%E3%82%8B%E7%82%B9%E3%81%AB%E6%B0%97%E3%82%92%E3%81%A4%E3%81%91%E3%81%BE%E3%81%97%E3%82%87%E3%81%86%E3%80%82%20%E8%A4%87%E6%95%B0%E3%81%AE%E6%9D%A1%E4%BB%B6%E3%82%92AND%E3%81%A7%E9%81%A9%E7%94%A8%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AB%E3%81%AF2%E3%81%A4%E3%81%AE%E6%9D%A1%E4%BB%B6%E3%81%A7%E7%B6%9A%E3%81%91%E3%81%A6%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%83%BC%E5%87%A6%E7%90%86%E3%82%92%E8%A1%8C%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%20%E3%80%8C%E6%9D%A1%E4%BB%B6A%20AND%20%E6%9D%A1%E4%BB%B6B%E3%80%8D%E3%81%A7%E3%81%82%E3%82%8C%E3%81%B0%E3%80%81%E6%9D%A1%E4%BB%B6A%E3%82%92%E9%81%A9%E7%94%A8%E3%81%97%E3%81%9F%E7%B5%90%E6%9E%9C%E3%81%AB%E3%80%81%E3%81%95%E3%82%89%E3%81%AB%E6%9D%A1%E4%BB%B6B%E3%82%92%E9%81%A9%E7%94%A8%E3%81%99%E3%82%8C%E3%81%B0AND%E6%9D%A1%E4%BB%B6%E3%81%AE%E7%B5%90%E6%9E%9C%E3%81%8C%E5%BE%97%E3%82%89%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%20%E6%9D%A1%E4%BB%B6A%E3%81%AE%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%83%BC%E5%87%A6%E7%90%86%E3%81%AE%E7%B5%90%E6%9E%9C%E3%82%92%E3%82%A4%E3%83%B3%E3%83%97%E3%83%83%E3%83%88%E3%81%A8%E3%81%97%E3%81%A6%E3%80%81%E3%81%95%E3%82%89%E3%81%AB%E3%82%A2%E3%83%AC%E3%82%A4%E3%81%AE%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%83%BC%E5%87%A6%E7%90%86%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%BE%E3%81%99%E3%80%82,%28%29%3F%20%5B%27column2%27%5D%3F%20%5B%27Value%27%5D%20%E3%82%92%E5%BC%8F%E3%81%8B%E3%82%89%E6%8C%BF%E5%85%A5%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%20%E2%80%BB%E3%82%82%E3%81%A1%E3%82%8D%E3%82%93%E5%85%88%E3%81%AB%E3%80%8C%20JSON%20%E3%81%AE%E8%A7%A3%E6%9E%90%E3%80%8D%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E3%81%84%E3%82%8C%E3%81%A6%E5%8B%95%E7%9A%84%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84%E3%81%8B%E3%82%89%E9%81%B8%E3%82%93%E3%81%A7%E3%82%82%E3%82%88%E3%81%84%20%E3%81%93%E3%81%93%E3%81%BE%E3%81%A7%E3%81%A7%E3%83%95%E3%83%AD%E3%83%BC%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%99%E3%80%82)」アクションを使用する**と良いと思います。

ちなみに、SharePointリストで**ビュー**を作成してビューで制限したデータのみをとってこようと検証したところ、**関係なくアイテムが取得されてきてしまいました…**。
今回私は文字列型の項目で絞り込んだりBoolean型項目で絞り込んだりしてみましたがデータ型関係なく適用されないようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218676/f270c81d-41a8-8dfb-ce67-f495cb42c405.png)
上記画像のように設定しましたが…取れてくるデータはこれの通りに絞り込まれていませんでした。

### :warning: 【2022/07/22追記】型「個人」の列でフィルタークエリをかけれない？
SharepointリストをPower Automateで呼び出した際JSONで返ってきますが、この時にリストで型を「個人(ユーザー)」としたときの列が入れ子構造になっています。

```
"OData__型「個人」で設定した列": {
                    "@odata.type": "#Microsoft.Azure.Connectors.SharePoint.SPListExpandedUser",
                    "Claims": "i:0#.f|membership|UPN",
                    "DisplayName": "氏 名",
                    "Email": "UPN",
                    "Picture": "https://XXX.sharepoint.com/sites/～",
                    "Department": "XXXX XXX XX"
                }
```

クエリで指定する際、"OData__型「個人」で設定した列"の内部的な(言い方正しくないかも？)列Emailを指定できれば良いのですが指定方法が恐らくない…。

# 必要な項目だけを取得したレコード情報が欲しい
## 予め作成したビューを利用して出力されたJSONの構造を平易化する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218676/983ee80f-c56f-289f-95f8-b56f5ee50547.png)
SharePointリストから項目を取得する際、「ビューによる列の制限」をデフォルトのままにするとレコード作成者のデータなども落ちてきてしまい出力されたJSONが煩雑になるので「動的な値」の候補一覧が混雑して嫌になります。

このため、予めSharepointリスト上でそのフローで必要な項目だけを表示するビューを作成する(※方法は[こちら](https://support.microsoft.com/ja-jp/office/%E3%83%AA%E3%82%B9%E3%83%88%E3%81%BE%E3%81%9F%E3%81%AF%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%A7%E3%83%93%E3%83%A5%E3%83%BC%E3%82%92%E4%BD%9C%E6%88%90-%E5%A4%89%E6%9B%B4-%E3%81%BE%E3%81%9F%E3%81%AF%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B-27ae65b8-bc5b-4949-b29b-4ee87144a9c9))と不必要なデータが落ちてこなくなるので多少見やすくなると思います。

:::note info
Power Automate のアクションでビューを使用するには作成したビューを<b>パブリックビュー</b>にする必要があります。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218676/067c66db-2eb7-ce58-181e-eef7462797cc.png)

:::note info
SharePointリストの運用で不要な場合、上記の項目などもデフォルト値（「フォルダー内のアイテムを表示する」）から変更すると良いでしょう。
:::

# まとめ
- Power Automate からSharePointOnlineリストへのアイテムの絞り込みは「**ODataクエリを使用したフィルタクエリ」が有効**。
    - でもODataクエリの動作に癖があるからレコードの絞り込みには「**アレイのフィルター処理」アクションを使ってもいいかも**。

https://qiita.com/fsgwmhr/items/df27f28b2383dcb6e7a1

- SharePointOnlineのリストで作成したビューは、Power Automate上ではレコードを絞るのには役に立たない(2022/1月現在)けど**取得する列を制限するのには有効**。

## 参考

https://qiita.com/tfunakoshi/items/6c1dcaf8b3159f6b21a2#1-sharepoint%E3%81%AE%E3%83%93%E3%83%A5%E3%83%BC