目的
SharePoint 系で取得データを減らす場合に FilterQuery を利用するかと思います。
簡単なもの(String/Intger/Boolean)であれば、特に困ることもないのですが、ユーザーを元にしようとするとちょっと手古摺ったので記録と共有を
今回の肝
- オブジェクトは、'/' で指定可能っぽい?
こんな感じ
OData__x30e6__x30fc__x30b6__x30fc_/EMail eq 'uka2san@gmail.com'
概要
やることは単純です。
- 列名を取得する(Editor/Authorならここは不要)
- FilterQuery を定義
列名を取得する(Editor/Authorならここは不要)
一度 Action を実行してから結果から取得する
例えば、以下の場合であれば
列名
OData__x30e6__x30fc__x30b6__x30fc_
Editor/Author は 上記のように Default で同一名称なのでそのまま利用すればOK
リストでフィルターをかけて、URL から名称を取得する
知りたい列をフィルターした際に用意される URL Parameter から列名を取得
URL_Parameterのみ
FilterField1=_x30e6__x30fc__x30b6__x30fc_
取得した OData名に、"OData_" を連結して完成
列名
OData__x30e6__x30fc__x30b6__x30fc_
FilterQuery を定義
こんな感じ
OData__x30e6__x30fc__x30b6__x30fc_/EMail eq 'uka2san@gmail.com'
嵌りポイント
嵌りポイント | 正 | 誤 | 補足 |
---|---|---|---|
全角半角 | この違いだけでエラーになります。 | ||
'/' と '#' | Editor/ID | Editor#ID | JSON取得すると '#' もあるので・・ついつい |
OData_付加時の'_' | OData__**** | OData_**** | '_'も追加するのかよ!と。一度実行してJSONで確認がよさげ |
先頭の '$' | $filter | filter | 一度これ落として動かないと判断・・ Rest APIの場合 |
プロパティ名 | 定義 | JSON | InternalName を取得する必要あり。 |
InternalName
JSON の名称は微妙に違うので信用しないように。
- ここにデフォルトの定義
- Rest API での取得方法 ここ
APIhttps://{site_url}/_api/web/lists(guid'{list_guid}')/Fields
例_api/web/GetFolderByServerRelativeUrl('/sites/testforflow/Shared Documents')
-
ここ が当初役立ちました。
あとがき
Automate で実行すると重いかなって時は、Rest APIを直接叩いて確認してから使いましょう。
で、うまくいったら、Filter だけを FilterQuery で使用する感じです。
Parameter | 概略 |
---|---|
filter | フィルター:FilterQuery が書けるんでここで試してからがいいかと |
select | 取得対象を絞る |
Expand | そのままだと Editor/EMail とか取れないので、これを使う |
今回のActionでのRestの例
_api/web/lists/getbytitle('FirstList')/items?$select=OData__x30e6__x30fc__x30b6__x30fc_/ID,OData__x30e6__x30fc__x30b6__x30fc_/EMail&$Expand=OData__x30e6__x30fc__x30b6__x30fc_/ID&$filter=(OData__x30e6__x30fc__x30b6__x30fc_/EMail eq 'uka2san@gmail.com')
Keyword
How to Get Items with Filter Query by user