モデル駆動型アプリを利用していると、独自のダイアログを表示したいときや、追加の情報を参照したいときがあります。
その際は、標準的な機能として簡易表示コンポーネントやサブグリッドを利用する事が考えられます。しかしながら、Javascriptを利用した高度なコーディング技術を要し、デザイン性も求められることが懸念です。
そこで、デザイン性のカスタマイズに長けるカスタムページを利用して、モデル駆動型アプリの画面上に組み込むことで、前述した懸念が解消されます。*1
今回は、モデル駆動型アプリのフォーム上にコマンド(ボタン)を配置し、カスタムページをダイアログとして表示します。
カスタムページの準備
まずは、ダイアログとして表示したい画面をカスタムページとして準備します。
カスタムページの作成
カスタムページ内の制御は本記事ではあまり重要ではないため、今回は簡単なWelcomeページを作成します。
1.Power Appsの管理画面から対象のソリューションを開き、「+新規」>「アプリ」>「ページ」を押下します。

2.「+挿入」>「ラベル」を押下し、任意のテキストを入力していきます。

カスタムページ内の制御や表示形式等は今回あまり重要ではないため、簡単なWelcomeページを作成しました。

なお、カスタムページ内のカスタマイズは、キャンバスアプリと同じように実施することが出来ます。詳細は下記公式ページを参照ください。
モデル駆動型アプリのカスタム ページにキャンバス コンポーネントを追加する - Power Apps | Microsoft Learn
カスタムページのID取得
後ほど作成したカスタムページのIDが必要になりますので、下記手順で値を控えます。
1.作成したページから「⋮」>「詳細」>「ソリューション レイヤーの表示」を押下します。

2.表示された項目から1つ目の項目を押下すると、右側に詳細が表示されます。
各項目の中で「name」と書かれた項目がIDとなります。

Webリソースの準備
次にWebリソースを準備します。今回はJavascriptをWebリソースとして登録し、作成した画面(カスタムページ)をダイアログとして表示します。
参考にした公式ページは下記です。
今回はモデル駆動型アプリのフォーム中央部分にダイアログを表示してみます。下記のようなイメージとなります。

それでは、実際にWebリソースを登録します。
※今回はPower Appsの管理画面で直接Javascriptを書きましたが、Visual Studioで作成したJavascriptコードファイルを添付する方法でも登録が可能です。
1.Power Appsの管理画面から対象のソリューションを開き、 「+新規」>「その他」>「Webリソース」を押下します。

2.画面右側に登録画面が表示されますので、「ファイルの種類」を「Javascript」に指定します。

3.太字部分は実際に作成した画面(カスタムページ)のIDに修正し、コード枠に貼り付け保存します。
function onClickFunc() {
var pageInput = {
pageType: "custom",
name: "cli_welocome_1a838"
};
var navigationOptions = {
target: 2,
position: 1,
width: {value: 50, unit:"%"},
title: "カスタムページが下記に表示されます"
};
Xrm.Navigation.navigateTo(pageInput, navigationOptions)
.then(
function () {
// Called when the dialog closes
}
).catch(
function (error) {
// Handle error
}
);
}

4.任意の名前および任意の言語を設定し、保存します。

5.手順3で記載した関数名(onClickFunc)および手順4で登録したWebリソース名(今回はcli_jbstech_js)は、のちに必要な情報となりますので、メモ帳等に控えておくと便利です。
コマンドとモデル駆動型アプリの準備
最後に、コマンドとモデル駆動型アプリの準備をします。
コマンドの準備
今回は、「取引先企業」と呼ばれる標準テーブルのフォーム上にコマンドを配置します。
1.Power Appsの管理画面から対象のソリューションを開き
「+既存を追加」>「テーブル」を押下します。

2.「取引先企業」を選択し「次へ」を押下します。

3.「すべてのオブジェクトを含める」にチェックを入れ、「追加」を押下します。

4.「取引先企業」を選択します。

5.画面右部のカスタマイズ枠から「コマンド」を押下します。

6.画面上部から「+新しいコマンド」を押下します。

7.今回はフォーム上にボタンを配置するので、「メインフォーム」を選択し、「編集」を押下します。

8.編集画面に遷移後、画面左部から「+新規」>「コマンド」を押下します。

9.任意のラベル名(ボタンの表示名)を設定し、Webリソース名/関数名を入力し、「このボタンが押下されたときに、どのWebリソースのどの関数を実行するのか」を定義します。

10.コマンド一覧にも追加されることが確認できますので、画面右上から、「保存して公開する」を押下します。

モデル駆動型アプリの準備
最後に、モデル駆動型アプリを作成し、動作確認をします。
1.Power Appsの管理画面から対象のソリューションを開き、「+新規」>「アプリ」>「モデル駆動型アプリ」を押下します。

2.任意の名前を入力し「作成」を押下します。

3.画面左側から、「新規」>「Dataverseテーブル」を押下します。

4.「取引先企業」を選択し、「追加」を押下します。

5.作成した画面(カスタムページ)を追加します。画面左部から「+新規」>「カスタムページ」を押下します。

6.作成した画面(カスタムページ)を選択し、追加します。
※ダイアログとして表示するので、ナビゲーションには追加しません。

参考までに、結果的にアプリの構成としては下記のようになります。

7.画面右上から「保存して公開」を押下します。

8.画面右側から「再生」を押下します。実際のアプリ画面に遷移するので、動作確認を行います。
ここまでが終わったら動作確認を行います。
アプリ上で、任意のレコードのフォーム画面に遷移します。作成したコマンドが配置されていることがわかります。
※新規/既存どちらで構いません。

コマンドを押下すると、作成したカスタムページがダイアログ形式で表示されることがわかります。

最後に
今回は固定の文言(Welcomeページ)を表示しましたが、表示しているレコードをもとに関連する情報をカスタムページ上で表示することができます。
次回の記事では、表示したレコードをもとにカスタムぺージを作成したいと思います。
*1:最小限のJavascriptコードは利用しますが、汎用的に利用できます。
李 兆昊(日本ビジネスシステムズ株式会社)
現在、Microsoft 365の導入を担当しています。主な担当はTeamsとSharePoint Onlineです。 体を動かすのが好きで、週末は必ず海に出ています!
担当記事一覧