はじめに
少し前に海外勢より話題が上がり、いつ使えるようになるのかとなったDataverseのFunctionsについて、2月中旬ごろには日本環境でも利用可能となっていたので触ってみた内容をご紹介します。
ギークさんもこちらのポストでご紹介されていますね。
の前にDataverseのローコードプラグイン
以前からこちらもプレビューで「ローコードプラグイン」というものがあり、これは通常のC#で開発するプラグインではなく、Power Fxで書けるプラグインということで市民開発者でもより簡易的にサーバーサイドロジックの実装が出来るというものです。
こちらは最近の環境ではあらかじめインストールされており(されていない場合は有効化する)とアプリが追加され、ここからPower Fxを使ったプラグインを作成できます。
作成できる種類は手動タイプと自動タイプ(レコードの作成・更新・削除)の2タイプです。
ローコードプラグインについてはこちら
Microsoft Dataverse のローコード プラグインでアプリ開発を効率化 – Power Apps |マイクロソフト ラーン

こちらについては今回は概要のみで割愛しますので、公式ページご参考ください。
今回追加されたDataverseのFunctions(関数)
そして今回2月中旬に日本環境でも使えるようになったDataverseの関数(Functions)についてご紹介します。公式のDocsは以下です。
Microsoft Dataverse の関数 – Power Apps |マイクロソフト ラーン
簡潔な概要をご紹介すると、
- ローコードプラグインを使わなくてもPower Fxの関数を作れる
- ソリューション内での作成にのみ対応している
- 共通化処理としてフローやアプリ、関数から呼び出せる
- 手動タイプのみ(自動タイプはない)
- テーブルの操作(5つまで)も可能
- inputとoutputの型はBoolean、String、Float、Decimal、DateTime、Integer
- 返却値はレコード型で返す(JSON文字列にして後でParseしてテーブル返却も出来そうだが)
作成の例は以下公式でも記載があるのでご参考ください。
Microsoft Dataverse で関数を作成して使用する – Power Apps |マイクロソフト ラーン

サンプル関数の作成
まずはサンプルを作成してみます。
既存のソリューションから上部の新規>自動化を選択すると「関数」というのが増えています。
クリックすると右側に新しい関数を作成するダイアログが表示されます。

概要:テーブルから指定ユーザのレコード数と最大の数値を取得するサンプル
テーブルを絡めたサンプルを作ってみました。フローでも実装出来る内容ですが、まあご容赦ください。
概要:レコード作成者のメールを渡して見積テーブルからそのユーザーの見積件数と最大の受注額合計の値を取得する関数
★タイトルは英語にする
タイトル部ですが自動で内部名がそのまま決まるようで日本語の場合は保存できませんでした。(プレビュー中だからかもしれませんが)現時点ではタイトルは英語で作りましょう。
今回は「Fx_MitsumoriCount」としました。
→内部名はソリューションのPrefixが付き「new_Fx_MitsumoriCount」などとなります。
説明はどのような処理をするのかを入れると再利用時に変わりやすいですね。
InputとOutput
次にInputに名前とデータの種類を指定します。
型は以下の5種類です
- Boolean (真偽)
- String (文字列)
- Float (浮動小数点数)
- Decimal (小数)
- DateTime (日時)
- Integer (整数)
ここも日本語は対応していませんので英語を指定します。


次にOutputを指定します。出力はレコード型となるので複数の指定が可能です。
今回はcountrow(数値)、maxjutyugaku(数値)を指定しました。

テーブル参照
プルダウンからテーブルの参照が可能です。不要な場合はスルーもOKです。
テキスト欄に入力後にプルダウンクリックすると該当するテーブルが見つけやすいです。
今回は「見積」テーブルを指定しました。指定するとインテリセンスで利用が可能となるようです。
最大で5個までの指定が可能とのことです。
NOTEレコードの作成者を使った際に自動でユーザテーブルの参照が追加されていました。
この辺りは明示的に指定しなくても使えるようです。※最大5個のテーブルにカウントされるかは未確認

数式のサンプル
今回は以下のように実装しました。With関数を使って先に対象レコードを取得し、出力パラメータごとにその値を割り当ててます。
以下のように返却はレコード値となるので、OutputパラメータのJSON型を作ればよいとなります。
CodeWith({data:Filter(見積,作成者.既定電子メール= Mail)},
{countrow:CountRows(data),
maxjutyugaku:Max(data,受注額合計)
}

作成時は上記のように表示名でインテリセンスが使えます。一旦保存した後、編集で開くと内部名に書き換わっていました。

エラーがなければ保存
数式エラーや戻り値の型が異なる場合はエラーが出ますので式を修正が必要です。若干書き方がなれるまで戸惑うかもしれませんが慣れですね。
以下はOutputの型と数式での戻り値の型が一致しない場合のエラーです。エラー概要を出てくれるケースも多いので調整しましょう。

関数(Functions)の呼び出し
Dataverse の関数は、キャンバス アプリ、モデル駆動型アプリのカスタム ページ、フロー、コード、または別の関数から呼び出すことができます。となっています。
おもに共通化した処理をキャンバスアプリやカスタムページから呼び出す場合やクラウドフローからの呼び出しが考えられます。今回はフローから呼び出す場合について、サンプルを作ってご紹介してみます。
TIPSPower Apps空の呼び出しは環境テーブルを追加して、Environment.<作成したFunction名>という感じで呼び出します。詳細は公式ご確認ください。
フローから関数(Functions)を呼び出し
以下呼び出し用のサンプルフローを作ります。
Dataverse バインドされていないアクション
アクションは「Dataverse」の「バインドされていないアクション」を指定します。

プルダウンから作成したFunctionを選択します
→内部名で表示されるので今回は「new_Fx_MitsumoriCount」

→Inputパラメータがある場合は表示されるので指定します。

実行してテスト
NOTE公式Docsには作成時にテスト出来るように記載があったのですが、見つからなかったのでフロー実装してそのまま確認しています。(本来は利用前にテスト出来るようになるはず?)
フローを実行すると以下のように正常に完了しました。
値も想定していたものが取れていました。

戻り値は動的コンテンツで扱えます
結果を後の処理で使うには動的コンテンツで指定が可能です。
変数内部名⁺Responseで返却JSON全体、と個別の項目が指定可能です。
以下作成アクションで返却の本文を指定した場合と個別にcountrow指定した場合です。


上記が正しいことをモデル駆動型でも確認


その他活用例
上記ではテーブルアクセスして必要な情報を取得する実装をやってみましたが、Patchで更新ももちろん出来ます。
データソースを使わずにクラウドフローで書くと冗長だったり理解しずらい数式になる式などをPower Fxを使ったシンプルな式として提供するなどもよいですね。よく使う処理を再利用できる点もグッドです。
そのうちに良い活用実装が思いつけばまた記事にしようと思います。
NOTECollectなど対応するとDocsにあったので試したのですが、なぜか認識されず使えませんでした。。プレビュー中でそのうち対応するかは不明確ですが、そのあたりも出来れば色々と幅が広がりそうです。
ソリューションに関連コンポーネントが複数作成される
上記でソリューション内に関数を追加でき、呼び出す事が出来ました。
このように関数(Functions)を追加すると以下のように5種類のコンポーネントが作成されます。
TIPS他のソリューションに追加する際も以下のセットが追加されます
- 機能 →ここから再編集など可能
- FxExpression →定義されたFunction(読み取り専用)
- カスタムAPI →APIとして定義された情報が格納
- カスタムAPI 応答プロパティ →応答プロパティ情報が格納
- カスタムAPI 要求パラメータ →入力パラメータ情報が格納


関連するコンポーネントがそれぞれ追加されますが、基本的には機能から関数を選択して内容の確認や再編集などを行えば良さそうです。

ローコード プラグイン側にも追加される様子
上記はローコード プラグインの方にも自動で追加されるようです。(Dataverse Accelerator)
→こちらについてはなぜか検証中の環境でオンにならなかったので未検証です。すいません。
おわりに
今回はDataverseの関数(Functions)についてご紹介しました。現時点ではプレビューとなります。
ローコードプラグインなしでも(手動のタイプであれば)サクッと追加できるのは良いですね。
特にクラウドフローでの実装が厄介だけどPower Fxの数式・関数でやればサクッと出来るものについてはこちらに置き換えての処理で活用できそうです。計算式などはやはりPower Fxだとすんなりかけたりしますし、再利用性もある点も良いかと思います。また今後GAされればさらに機能も拡張されるかもしれませんので期待ですね!それでは!
関連
この記事は役に立ちましたか?
もし参考になりましたら、下記のボタンで教えてください。
コメント