こんにちは、アーティサンの小鷹です。
本記事では、Dataverse for Teamsのテーブルから、Power Automateで選択肢列や参照列のデータを取得する方法についてご紹介します。
Power Automateでは「動的なコンテンツ」を指定すると、取得したデータの列情報を得ることができます。
しかしDataverse for Teamsの選択肢列や参照列については、「動的なコンテンツ」で指定しても表示名ではなく内部のID等、想定と違う情報を取得する場合があります。
※本記事は2021年8月時点の情報をもとに執筆しています。
Dataverse for Teamsの選択肢列と参照列を「動的なコンテンツ」で設定してみる
Power Automateでは、「動的なコンテンツ」で取得した値を自由に指定できます。
「動的なコンテンツ」は、マウスでクリックするだけで、取得したデータの列やプロパティ等の値を指定できる優れものですが、想定していたものとは違う値が指定されてしまう時があります。
例えば、Dataverse for Teamsで、次のようなテーブルとデータを作成します。
各列に設定したデータ型をそのまま列名にしています。
(参照列は、別途参照用テーブルを作成しています。)
そしてPower Automateでは、作成したDataverse for Teamsテーブルからデータを取得するフローを作成します。
HTMLテーブルの作成アクションでは、「動的なコンテンツ」で出力する列を指定しています。
また、行を一覧にするアクションの行のフィルターで「テキスト列が”テキスト – 1″と一致する」行だけを出力するように絞っています。
そうすると、”テキスト – 1″の1行だけがHTMLテーブルの作成アクションで出力されるはずです。
では、早速テストして出力結果を見てみましょう。
「選択肢 – 1」や「参照 – 1」の値が取得される想定でしたが、それとは全く違う英数字が格納されました。
選択肢列の「動的なコンテンツ」は1つしかありません。
参照列の「動的なコンテンツ」は、<列名>(値)と<列名>(種類)の2種類ありますが、どちらを選択しても「参照 – 1」の値で取得できませんでした。
「選択肢 – 1」や「参照 – 1」の値を取得するにはどうすればいいのかを、次項で説明します。
回避方法
item関数を使用し、Dataverse for Teamsテーブルから、選択肢列や参照列の表示名を格納している列を直接指定します 。
まず、HTMLテーブルの作成アクションの列を「自動」に変更し、全列出力してみます。
出力結果を確認すると、「選択肢 – 1」や「参照 – 1」が入った列も入っていることがわかります。
「<選択肢列・参照列の内部名>@OData.Community.Display.V1.FormattedValue」という長い列名をitem関数で直接指定すると、欲しい値の「選択肢 – 1」や「参照 – 1」が取得できます。
選択肢列:
item()?[‘<選択肢列の内部名>@OData.Community.Display.V1.FormattedValue’]
参照列(参照列は内部名の前に「_(アンダースコア)」が付きます):
item()?[‘_<参照列の内部名>@OData.Community.Display.V1.FormattedValue’]
テストしてみると…
「選択肢 – 1」や「参照 – 1」の値が取得できました。
解説
何故「動的なコンテンツ」で取得出来ないのでしょうか。順を追って説明します。
まず、Dataverse for Teamsテーブルの選択肢列と参照列の構造について解説します。 前の項で全列出力したデータを確認してみましょう。
例えば、この画像を見ると、選択肢列の内部名「crebdb_choices」が含まれた列が複数あります。一つの選択肢列に対して、内部で複数の列を持っていることがわかります。
参照列も同じように、一つの列に対して内部では複数の列を持っています。
次に、「動的なコンテンツ」にマウスカーソルを乗せてみます。 item()?[‘credb_choices’]と、item関数で選択肢列の内部名が指定されていますね。
指定されている「credb_choices」列には、選択肢列の内部的にはIDにあたる値が格納されています。
テキスト列などは「動的なコンテンツ」で問題なく取得できますが、内部で複数列を持つ選択肢や参照列に関しては、「動的なコンテンツ」ではなくitem関数で直接指定する必要があります。
【おまけ】items関数
item関数の他に、items関数というよく似た名前の関数があります。
item関数は色々なアクションに使用できる関数ですが、items関数はApply to eachアクション内でのみ使用可能という大きな違いがあります。
関数の書き方自体はitem関数とほぼ一緒です。
例:
items(‘<Apply to eachのアクション名>’)?[‘<列の内部名>’]
さいごに
それでは最後に、Power AutomateでDataverse for Teamsのテーブルから「選択肢列」と「参照列」の表示名を取得したい時のポイントをまとめておきます。
- Dataverse for Teamsテーブルのデータ型の中には、選択肢型や参照型のように内部で複数の列を持つものがある
- Dataverse for Teamsの選択肢型と参照型の列の値を取得したい時は、item関数で選択肢列や参照列の「表示名を格納した列」を指定する
今回実現した内容の中では、「item関数を手動設定する」という所が特にキーポイントでした。
普段は「動的なコンテンツ」が自動で設定してくれるのであまり馴染みがないかもしれませんが、手動でも設定できると知っておくとPower Automateでできることが更に広がります。
フローを作成する時に、本記事を思い出していただけたら幸いです。
アーティサン株式会社では、Power AutomateやPower Appsの技術支援も行っております。
もし作成に行き詰った時やアドバイスが欲しい時はお気軽にお問合せ下さい。
【こちらも合わせて読みたい】
小鷹 枝里子
2016年12月、メーカーの事務兼CADオペレーターから未経験のIT業界に飛び込もうとアーティサンに入社。
今は主に Power Platform(Power Automate、Power Apps)とSharePointの技術支援や開発を担当しております。
山形県出身、神奈川県在住。何となく海に近い所に住むのが好きです。インドア派なので滅多に海行かないんですけどね。
趣味はゲームで、最近はのんびりスマホゲームや某狩りゲームをやってます。
推しのうまい棒は納豆味。