モデル駆動型アプリ概説 ⑦応用的なカスタマイズ
こんにちは。システムソリューション営業本部の吾妻です。
「モデル駆動型アプリ概説」連載の第7回目として、モデル駆動型アプリを高度にカスタマイズして、標準的なローコード開発手順では実装できないような機能を追加していくための手順をご紹介します。
モデル駆動型アプリの作成手順(復習)
モデル駆動型アプリを作成するための手順として、以下のものがありました。今回は「応用的なカスタマイズ」のために、カスタムページやPCFを利用したローコードなカスタマイズと、WebリソースやDataverseプラグインといったプログラミング言語を利用したスクラッチ開発を伴うカスタマイズの双方について、設定を行っていきます。手順 | 内容 |
①ビジネスデータのモデル化 | |
②ビジネスプロセスの定義 | |
③モデル駆動型アプリの作成 | |
④セキュリティロールの構成 | |
⑤アプリの共有 | |
⑥応用的なカスタマイズ | 以下の機能を利用したカスタマイズを行う ・Webリソース ・クライアントスクリプト(Webリソースの一部) ・コマンドとリボンのカスタマイズ ・カスタムページ ・PCF(Power Apps Component Framework) ・Dataverse検索 ・Dataverseプラグイン ・XRMToolBoxの活用 |
機能と実装例
モデル駆動型アプリに対して高度なカスタマイズを行うために用意されている機能ごとに、実装例や結果のUIをご紹介します。ローコードでできるもの
アプリデザイナーやPower Platform管理センターなどの画面からGUIで設定できる機能です。コマンドとリボンのカスタマイズ
モデル駆動型アプリのアプリデザイナーから、ページパネルを開いて、設定したいテーブルのコマンドバーの編集メニューをクリックすると、コマンドバーを編集するためのコマンドデザイナーを開くことができます。コマンドバーに追加するコマンドを定義する際には、JavaScriptのみを使用するかPower Fxを使用するか選択できます。ただし、Power Fxを選択しておけばJavaScriptも使用できるので、迷ったらPower Fxを選択しておくと良いかと思います。コマンドデザイナー(編集画面)の例を示します。今回は、レコードの一意識別子(GUID)をNotify関数で表示するだけのコマンド「このアイテムのIDを確認」を追加してみました。Power Fxを利用することで、キャンバスアプリと同様にローコードでコマンドの処理内容(OnSelectプロパティ)や表示条件(Visibleプロパティ)を定義することができます。
単にモデル駆動型アプリを再生しただけの状態では表示されないようなコマンドも編集画面には表示されているので、非常に数が多くなっていますが、レコードの状態や、ビュー/フォームの状態、その他Power Fxで定義された判定条件に応じてコマンドバーに表示されるコマンドが切り替わるため、コマンドバーに表示されるコマンドの数はそこまで多くありません。
次にコマンド「このアイテムのIDを確認」が追加された画面を示します。メイングリッド(Dataverseテーブルのビューに対応する一覧画面)のコマンドバーにコマンドが追加されていること、クリックされた際に通知が表示されることを確認できました。
今回はメイングリッドのコマンドバーに対して編集を加えましたが、メイングリッドの他にもメインフォーム、サブグリッドビュー、関連ビューのコマンドバーも編集することができます。
カスタムページ
カスタムページは、モデル駆動型アプリにキャンバスアプリと同様の画面を埋め込むための機能です。以前から、通常のキャンバスアプリをモデル駆動型アプリに埋め込むことができましたが、キャンバスアプリをアプリIDで指定したり、ModelDrivenFormIntegrationコントロールでデータを連携したりと、微妙に使い難いポイントがありました。カスタムページでは、それらが改善されて、よりスムーズに実装できるようになっています。通常のキャンバスアプリと同様に、人々テンプレートや会議テンプレートを利用して画面を実装したり、Dataverseテーブルやその他のデータソースに対して接続するための豊富なコネクタを利用してデータを読み書きすることができます。
Dataverse検索
Dataverse検索は、モデル駆動型アプリのすべてのページの上部に表示された検索ボックスを利用して、Dataverseレコードや、注釈/添付ファイルテーブルに保存されたファイルのコンテンツを対象に検索を行うための機能です。検索ボックスには、直近に検索を行った際のキーワードの履歴や、検索対象テーブルで直近にアクセスしたレコードが表示されたり、文字列を3文字以上入力したタイミングで検索キーワードをサジェストしたりする機能があります。また、検索結果は、テーブルごとにグループ化され、類似度でソートされた状態で提示されます。検索対象となるデータ型は、1行テキスト、複数行テキスト、選択肢、検索列のみで、数値、日付、ファイルの列は検索対象外です。また、カスタムテーブルでファイル型の列にアップロードされたファイルのコンテンツも検索対象にはなりません。
スクラッチ開発を伴うもの
.NET(C#)やJavaScriptのソースコードを書いてモデル駆動型アプリをカスタマイズするための機能です。インターネット上でバイナリが公開されている場合もあるので、誰かが作ったオープンソースのコンポーネントで要件に合致したものがあれば、コーディングせずにカスタマイズすることもできます。Webリソース
ファイルをDataverseデータベースにアップロードして、個々の仮想ファイルに割り当てられた仮想的なURLにアクセスすることで参照できるようにする機能です。ASP.NET(.aspx)やPHP、Pythonのようなサーバーサイドで動作させるスクリプトはアップロードできず、あくまでも単純なテキストファイルや画像ファイル、クライアントサイドで実行されるスクリプトファイルのみをアップロードできます。JavaScriptではなくJScriptとなっているあたりがMSらしいです。また、Silverlight(XAP)もアップロード対象の形式となっていましたが、Silverlight自体のサポートが既に終了しているため、表からは省きました。
種類 | ファイル | 拡張子 |
Webページ | HTML | .htm .html |
スタイルシート | CSS | .css |
XSL | .xsl .xslt |
|
スクリプト | JScript | .js |
データ | XML | .xml |
RESX | .resx | |
画像 | PNG | .png |
JPG | .jpg | |
GIF | .gif | |
SVG | .svg | |
ICO | .ico |
WebリソースもDataverseに格納されたレコードとして管理されているので、Dataverseのライセンスを持ったユーザーが、自身に割り当てられた権限の範囲内のWebリソースのみにアクセスできます。
クライアントスクリプト
Webリソースの中でも、JavaScript Webリソースのことをクライアントスクリプトと呼んでいます。DataverseフォームやHTML Webリソース、コマンドバーをカスタマイズするための使用するコードを、クライアントスクリプトとしてまとめて管理することができます。ただし、フォームなどをカスタマイズするために、いきなりクライアントスクリプトを選択することはMicrosoftでも推奨していません。業務ルールを利用してローコードで実現できないか検討したうえで、どうしても要件を実現できない場合に限り、クライアントスクリプトを作成することになります。業務ルールで実現できず、クライアントスクリプトを実装する必要が出てくる代表的なテーマとして、複数選択の選択肢列、ファイル列、言語列といったデータ型を利用するシナリオが挙げられます。これらのデータ型はそもそも業務ルールで扱うことができないので、クライアントスクリプトを利用せざるを得ないと言えます。
PCF(Power Apps Component Framework)
モデル駆動型アプリやキャンバスアプリで利用するためのコードコンポーネントを、HTML、CSS、TypeScriptで実装して、1つのソリューションパッケージファイルにパッケージ化する機能がPower Apps Component Framework(PCF)です。パッケージは自分たちで作成して他の環境/ソリューション/アプリで再利用したり、有志によって公開されたソリューションパッケージをAppSourceやPCF Galleryから取得してきて、自分たちのアプリで活用することもできます。Dataverseプラグイン
.NET FrameworkでコンパイルしたバイナリをDataverseにアップロードすることでスクラッチ開発並みにカスタマイズするための方法が、Dataverseプラグインです。カスタムコードをC#で記述できるのであればカスタマイズの手段として選択することができますが、クライアントスクリプトと同様に、まずは業務ルールで実装できないか検討してから、どうしても要件を実現できないとなってからDataverseプラグインを選択することになります。業務ルールやクライアントスクリプトで実現できず、Dataverseプラグインを実装する必要が出てくる代表的なテーマとして、レコードの作成者(CreatedBy)/修正者(ModifiedBy)/作成日(CreatedOn)/修正日(ModifiedOn)列の書き換えが挙げられます。これらのシステム列に対してデータを設定したり設定させないようにしたりするためには、Dataverseプラグインを利用する必要があります。ただし、Dataverseプラグインの実装は難易度がかなり高いので、特に市民開発においては、列を別途定義してクラウドフローで日付やユーザーの値を設定するような回避策を検討した方が良いでしょう。
XRMToolBox
コミュニテイー主導で開発されているツールとして、XRMToolBoxがあります。Dataverseに対して、豊富に用意されているプラグインを利用してカスタマイズを行うことができるものです。Microsoft自身が公開しているわけではないのでMicrosoftによるサポートなどはありませんが、Microsoftの公式ドキュメントにも記載があり、準公式のような位置づけのソフトウェアです。公開されているプラグインの数は、2023年6月現在で300個強あるようです。XRMToolBox用のプラグインの実体はNugetパッケージなので、C#でソースコードを記述することができればオリジナルのプラグインを作成することもできます。ただし、XRMToolBoxのライブラリに掲載されるためには審査をパスする必要があります。
実際にプラグインを利用してみる手順については、次の記事をご覧ください。
XRMToolBox以外にも、以下のような開発者向けのソフトウェアがコミュニティから提供されています。
- Dataverse REST Builder
…Dataverse Web APIに対して、リクエストを作成したり送信したりするためのRESTクライアントアプリケーション
…①Power Appsのマネージドソリューション、②VS Code拡張、③ブラウザ拡張機能、④XRMToolBoxプラグイン、のいずれかの方法で実行できる - Level up for Dynamics 365/Power Apps
…ブラウザで再生しているモデル駆動型アプリに対して、インラインで論理名などの通常は表示されないメタデータをインラインで埋め込んで表示させたり、Dataverse Web APIから情報を取得して環境の情報やテーブルの一覧などを表示させたりするためのブラウザ拡張機能
まとめ
今回は、モデル駆動型アプリに対して行う、カスタムページやPCFを利用したローコードなカスタマイズと、WebリソースやDataverseプラグインといったプログラミング言語を利用した開発を伴うカスタマイズの双方について、簡単にご紹介しました。次回以降、本記事でご紹介した機能のそれぞれについて、深掘りしてご紹介できればと考えています。QESの Power Platform サポート&アプリカタログサービス は、キャンバスアプリやモデル駆動型アプリ、Power Pagesといった各種Power Platform製品群の導入、環境構築、弊社で開発したカタログアプリのご提供などを行うサービスです。まずはお気軽にお問い合わせください。
このブログで参照されている、Microsoft、Windows、その他のマイクロソフト製品およびサービスは、米国およびその他の国におけるマイクロソフトの商標または登録商標です。