SharePointOnlineのリストからPower Automateアクションを使用してデータを取得しようとしたときに「このデータ要らないんだけどなあ~」と思ったときにいじったことを覚書します。(個人的にExcelのテーブルから欲しいレコードのみを取得してくる時より苦労したので…。)
必要なレコードだけが欲しい
- 必要なデータをフィルタクエリで絞ってしまいましょう。なお、SharePointリストにクエリを実行する際はODataクエリを使用する必要があります。
以下の記事はODataクエリの使い方が分かりやすく紹介されています。
フィルタクエリが意図した通りに動作しない場合
ただし、上記のODataクエリは癖があって扱いづらい1場合があります。(なのでちゃんとテストして動作確認しながらフローの作成を進めましょう!!)
ODataクエリを使いたくないなという場合は 一度「複数の項目」アクションを使用して全件取得した後、「アレイのフィルター処理」アクションを使用すると良いと思います。
ちなみに、SharePointリストでビューを作成してビューで制限したデータのみをとってこようと検証したところ、関係なくアイテムが取得されてきてしまいました…。
今回私は文字列型の項目で絞り込んだりBoolean型項目で絞り込んだりしてみましたがデータ型関係なく適用されないようです。
上記画像のように設定しましたが…取れてくるデータはこれの通りに絞り込まれていませんでした。
【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の構造を平易化する
SharePointリストから項目を取得する際、「ビューによる列の制限」をデフォルトのままにするとレコード作成者のデータなども落ちてきてしまい出力されたJSONが煩雑になるので「動的な値」の候補一覧が混雑して嫌になります。
このため、予めSharepointリスト上でそのフローで必要な項目だけを表示するビューを作成する(※方法はこちら)と不必要なデータが落ちてこなくなるので多少見やすくなると思います。
Power Automate のアクションでビューを使用するには作成したビューをパブリックビューにする必要があります。
SharePointリストの運用で不要な場合、上記の項目などもデフォルト値(「フォルダー内のアイテムを表示する」)から変更すると良いでしょう。
まとめ
- Power Automate からSharePointOnlineリストへのアイテムの絞り込みは「ODataクエリを使用したフィルタクエリ」が有効。
- でもODataクエリの動作に癖があるからレコードの絞り込みには「アレイのフィルター処理」アクションを使ってもいいかも。
- SharePointOnlineのリストで作成したビューは、Power Automate上ではレコードを絞るのには役に立たない(2022/1月現在)けど取得する列を制限するのには有効。
参考
-
例えば、私はBoolean型の項目でtrueのレコードを取得しようと
列名 eq true
でと取ろうとしたところfalseのデータが取れてきました…。(列名 eq false
でも結果は同じでした)。列名 ne true
(もしくは列名 ne false
)にしたら取りたいデータが取れてきました…。SQLに慣れている身からすると「???」です。 ↩