はじめに
Power AppsのOffice 365 UsersコネクタのSearchUserV2アクションのパラメータが変更されていました。
これによりこれまでと同じ式を設定しても動作が異なる。などの事象が発生することを確認しましたので検証結果を記載します。
記載内容に誤りがある場合は、コメントなどご指摘いただけますと幸いです。
また、この変更により既存アプリに直ちに影響があるわけでは(多分)ないと思います。
ただ念のため動作確認を行うことをおすすめします。
この記事はこの変更とこの変更による問題点を多くの方に共有するために纏めました。
Ideasに修正要望を上げる予定ですので、記載したらリンクをまたこちらに記載します。
Ideasに投稿しました。
よろしければVoteをお願いします。
Voteの多いものほど対応してもらえます。
SearchUserV2の変更内容
SearchUserV2ですが、公式のリファレンスをみてみるとパラメータに新規でisSearchTermRequired
が追加され、skipToken
が削除されています。
実際にPower Apps上の画面でみてみると、isSearchTermRequired
が確かに追加されています。
ただ、skipToken
はこれを見る限りでは設定できそうに見えますね。
isSearchTermRequiredパラメータ
isSearchTermRequired
パラメータは、リファレンスの説明にもある通り検索語句が空の場合に結果を返すかどうかを指定するパラメータです。
リファレンスには「Yes」か「No」を設定するように書いていますが、正しくは「true」か「false」ですね。
Office365ユーザー.SearchUserV2({isSearchTermRequired: true}).value
に設定するとsearchTerm
が設定されていないのでなにも返されません。
Office365ユーザー.SearchUserV2({searchTerm: "",isSearchTermRequired: true}).value
これも上の式と同様searchTerm
が空なのでなにもなにも返ってこないですね。
これらを例えばコンボボックスのItems
などに設定すると、この式はなにも返さないのでユーザの検索ができなくなってしまいます。
注意しましょう。
Office365ユーザー.SearchUserV2({isSearchTermRequired: false}).value
この場合は、フィルタリングがされないのでsearchTerm
が空でも検索結果が返ってきます。
これがこれまでの
// これまでの設定
Office365ユーザー.SearchUserV2().value
この式と同じ結果が得られますね。
さてこのisSearchTermRequired
はどうやらデフォルトtrueなようです。
これがどういうことかというと、これまでの書き方と同様に
Office365ユーザー.SearchUserV2().value
や
Office365ユーザー.SearchUserV2({searchTerm: TextInput1.Text}).value
みたいにかいてしまうと、これまでの動作と新規でアプリを作成したときの動作で差異が発生するという事象が起きてしまいます。
うーんこれはよくないですね。。。
skipTokenパラメータ
skipToken
パラメータはドキュメントから(なぜか)削除されちゃっていますが、こちら現在でも設定でき、また動作します。
ちなみにskipToken
の設定方法について纏めているサイトが少ないので、記載しておくと
Set( varSkipToken, With( {odataNextLink: Office365ユーザー.SearchUserV2({isSearchTermRequired: false}).'@odata.nextLink'}, Mid(odataNextLink, Find("skipToken=", odataNextLink) + Len("skipToken=")) ) )
みたいな式で取得したvarSkipToken
を設定すればよいです。
既存アプリへの影響
この変更がいつなされたのか正直わからないですが、8/29頃に作成したアプリの中でSearchUserV2
アクションを実行しているアプリがあったので、動作確認をしてみました。
結果として、このアプリはisSearchTermRequired
パラメータが存在せず、また設定していなくともユーザの検索結果を取得することができました。
ただし、アプリのデータからOffice365Usersコネクタを削除し、再度Office365Uersコネクタを追加する。ということを行い、コネクタのバージョンを上げるような操作を行うと、SearchUserV2
アクションにisSearchTermRequired
パラメータが設定できるようになっており、またisSearchTermRequired
パラメータを設定していないと、ユーザの検索結果が取得できませんでした。
なので、既存のアプリには今すぐは(多分)影響はないですが、何かの拍子でアプリ内で利用しているコネクタのバージョンが更新されると、これまでとは異なる動作をする恐れがある。
ということになるかと思います。
ちなみにこのコネクタのバージョンってどこで定義されているんですかね?
コード化して探してみたんですけど、わからなかったです。。。(見落としている可能性大)
おわりに
今回のこの変更はなぜこのようにしたのか?設計の意図が全然わかんないな。と個人的に思っています。
パラメータの内容を変えるのであれば、SearchUserV3
などのようにバージョン上げるべきでは??と思いますし、最低限既存の式と最新の式とで同じ式であれば同じ動作とするべきだと思っています。
これのせいで不要な混乱が発生する恐れを危惧しています。
最初にも記載しましたが、この件をIdeasに投稿しました。
よろしければVoteをお願いします。
Voteの多いものほど対応してもらえます。