Power Automate Dataverseコネクタ その③ 選択肢列(OptionSet)のフィルター指定とラベル値取得と更新

はじめに

以前の記事で「Power Automate Dataverseコネクタ その② 検索列(参照列)のフィルター指定」
を書いたのですが、その際は参照列の構成とフィルターで指定する際の方法を記事にしました。
今回は選択肢列の場合のフィルター指定方法とラベルの取得方法、更新や情報取得について記載します。

Dataverseコネクタのトリガー、アクションの概要は上記で書いた記事をご参考ください。

Power Automate Dataverseコネクタ その② 検索列(参照列)のフィルター指定

TIPSDataverseコネクタはDataverse for Teamsでも基本同様の内容となりますので、
そちらの実装の場合の参考ともなるかと思います。

選択肢列(オプションセット)について

公式は以下です。
Microsoft Dataverse の列データ型 (ビデオを含む) – Power Apps | Microsoft Learn

概要は割愛しますが、テーブル内にオプションセットとして値を持てる感じです。
「食べ物、飲み物、その他」など

グローバルで使用可能な選択肢とそのテーブルのみで使用するローカル選択肢と2つ種類があります。
以下グローバル選択肢の例ですが、この場合、「選択の編集」から選択肢の設定画面に遷移出来ます。
また、選択肢の既定値はここで指定が可能です。

選択肢の設定画面では、ラベル(表示される文字列)と値(特定に使用される値)が定義出来ます。
また、色付けや並び替えも出来ます(色付けは一部の箇所(新しいグリッドビューであれば表示されるなど)

値は桁数が多いですが、自分で調整することも可能です。0,1,2とわかりやすくしてもいいかもしれませんね。

検索列でのフィルタークエリの書き方(選択肢)

通常のテキスト列であればシンプルなフィルタークエリになりますが、選択肢の場合はデータの構造がラベル/値という構造となっているので、書き方が異なります。

回答としてはフィルターする場合は値を指定してフィルターをする必要があります。

TIPS※Filter Queryの書き方の説明は割愛していますので、以下などの参考記事をご参考ください。
すべての Power Automate (MS Flow) フィルター クエリ – Power Platform コミュニティ (microsoft.com)

取得される結果を確認する

先に選択肢の場合にどのように結果が取れるか確認します。
そうするとそのままの内部名で値ともう一つラベルが取れる列が確認できます。

「@OData.Community.Display.V1.FormattedValue」が列名の末尾に追加されたものです。

Code選択肢:分類の場合(論理名はnew_bunrui)
“new_bunrui”: 100000001,    →そのままの列名は値(数値)の方が取れる

“new_bunrui@OData.Community.Display.V1.FormattedValue”: “商品分類2”,  →ラベル部分が取れる

上記でわかるとおり、フィルタークエリで指定するのは値(数値)の方となります。
ラベルが取れる列をフィルタークエリに指定することは出来ない認識です(違ってたらすいません)

選択肢列でのフィルタークエリの書き方

上記を踏まえて選択肢の分類列「new_bunrui」をフィルターへ指定してみます。
指定する値はラベルの文字だと取れないので値の方になりますね。

Code行のフィルタークエリに以下を指定(分類列の論理名と等しい値)
new_bunrui eq 100000001

上記の通り対象がフィルターされて取れます。
さらにラベルについては合わせて出力されているので使用することが出来ます。

選択肢のラベルを使用する

上記のように取得後の選択肢のラベル(テキスト)の方を使用したい場合ですが、
動的コンテンツの候補だと値の方しか出てきません。

分類列を指定

分類列をそのまま使用すると値である数値が出る。。

この数値を表示項目として使いたいケースは基本ないのでこれでは意味ないですよね。
そこで先ほどの同時に取れていた「@OData.Community.Display.V1.FormattedValue」が付いている方を指定してみます。
分類で指定した列の内部の記述は以下のようになっています。
※この場合選択アクションで指定しているのでitem()?[‘<列の論理名>’] となってますね。
この列の論理名に@以降をくっつければいいです。

Code選択アクションで分類列を指定している場合 →値が取れる
item()?[‘new_bunrui’]

分類列をラベルが取れる列にする →@以降をつっくける
item()?[‘new_bunrui@OData.Community.Display.V1.FormattedValue’]

@以降が付いたものならラベルが取れる

選択肢、参照列のラベルを取るなら「@OData.Community.Display.V1.FormattedValue」を付ける

ということで、実は普通に動的コンテンツでは出てこないものでも、こんな感じでやってあげれば使えるようになります。
この@以降の部分はラベルで共通なのでラベル取りたいときはこれを付ければOK!と覚えておいてください。
さらに、参照列の場合も同じです。参照列も普通にやるとGUIDになっちゃうのでこの@以降を付ければテキストが取れますのであわせて活用ください。

参照列(検索列)の記事は以下に書いてます。ここにもちらっとその部分出てきていますのでご参考ください。

選択肢の更新は値を指定

更新の場合も受け付けるのはラベルではなく値となるので、選択肢の値部分を入れます。
初期状態だとプルダウンとなっているので、カスタム値を選んで数値を入れるイメージです。

選択肢列の入力は数値の方を指定する

取込みがテキストしかない場合に値を特定するには

よくあるのが、別のシステムからファイルで連携する場合にラベル部分の文字列となっていて、
そのままだと選択肢には入らない(値しか受け付けないので)という点で困ることがあります。

その場合は、自分でマッピングを作るか、ちょっと実装が複雑になりますが「Dataverse Web API」を使って
選択肢の値とラベルどちらも取れる方法も実はありますのでそれをマッピングとして使うか。という感じになります。

自分でマッピングを作る場合は作成アクションなどで作ってあげて、このテキストだったらこの値を使うという感じにできます。
デメリットはテーブルの選択肢とは別定義となるのでそこが将来的にずれると正しい挙動にならない点ですね。
一生選択肢の値を変化さないならこれでいいと思います。

もう一つの「Dataverse Web API」の方はまた機会があれば記事にしようかとも思いますが
取り急ぎ以下の記事などが参考となるかと思います。
解決済み: [Dataverse Web API] GlobalOptionSetDe の操作 – Power Platform コミュニティ (microsoft.com)

おわりに

今回は参照列と関連して選択肢列の場合のフィルター指定やラベルの取り方、選択肢の更新の方法などを記事にしました。こちらも今回ご紹介した法則を抑えておけば大丈夫です。

また、レコードの作成や更新時に参照列を指定する方法もひとクセあるのでこちらもご紹介予定です。
それでは!

関連

モデル駆動型のカスタマイズ(カスタムページ・コマンドバー)で登壇しました。

Dataverse 関連:
Dataverse | Power Apps Tips ログ (youseibubu.com)

この記事は役に立ちましたか?

もし参考になりましたら、下記のボタンで教えてください。

ヨウセイ

ヨウセイ

一般職からSharePoint、C#、.NET系技術者へ、そこからPower App、Power Automate技術者へと転身。 ワンランク上のおっさんはPower Appsでシステム開発が出来る〜! qiitaや自社HPでも技術ブログを書いていました。

関連記事

コメント

この記事へのコメントはありません。

CONTENTS