PL-900：モデル駆動型アプリの設計

この投稿はMicrosoft PL-900の受験に向けた勉強資料をMS Learnページを参考にして作っています。
一発合格に向けて頑張りましょう！

[モデル駆動型アプリの設計][MS-Learn]

[MS-Learn]: https://learn.microsoft.com/ja-jp/training/modules/how-build-model-driven-app/04-design-of-model-driven-apps

## モデル駆動型アプリ(model-driven apps)の設計
* 例で「チャリティー」というモデル駆動型アプリからアプリ デザイナーを確認しよう
* 以下のアプリケーションには「寄付」と「チャリティー」という2つのテーブルがある
* 
<img src="https://learn.microsoft.com/ja-jp/training/modules/how-build-model-driven-app/media/fundraiser-app-designer.png">

* テーブルごとに、次の設定ができる
    * フォーム – ユーザーがデータを表示・操作する方法について定義する
    * ビュー – 各テーブルの行のリスト ビュー
* 基本的に選択したオプションに応じる
    * テーブルフォームまたはビューを選択し、「Manageforms」または「ManageViews」を選択することにより、そのテーブルに含める特定のフォームおよびビューを指定できる
        * チャリティー アプリケーションでは非課税ステータスなど、チャリティーの詳細を含むアカウント フォームが必要になる場合がある
        * イノベーション アプリケーションでは、アカウント フォームのフィールドが必要ではないため、それらのフィールドが含まれていないフォームのバージョンが存在する可能性がある

<img src="https://learn.microsoft.com/ja-jp/training/modules/how-build-model-driven-app/media/fundraiser-app-designer-manage-forms.png">

* テーブルごとに複数のフォームとビューを入れることができる
    * たとえば、以下のスクリーンショットには「manage donations」に役立つ複数のビューが含まれている
    * ビューまたはフォームを選択しない場合、すべての項目を含むと見なされる

<img src="https://learn.microsoft.com/ja-jp/training/modules/how-build-model-driven-app/media/fundraiser-app-designer-select-views.png">

### アプリケーションへの新しいコンテンツの追加
* ページの追加ボタンを押下すると、新しいコンテンツがアプリケーションに追加される
* そのときに使用するページのタイプを次の3つのオプションから選択
    * 1\. テーブル ベースのフォームとビュー
        * テーブルのレコードがフルページ リストビューで表示される
        * そのテーブルに関連付けられているフォームも含められる

    * 2\. ダッシュボード
        * 複数のエンティティのチャートとビューを表示して、データを1つのページに可視化する
        * 1つのモデル アプリケーションに複数のダッシュボードを追加することができる

    * 3\. カスタム
        * 対話型のコンポーネントをキャンバスにドラッグして、ページ タイプのデザインと構築を行うことができる

<img src="https://learn.microsoft.com/ja-jp/training/modules/how-build-model-driven-app/media/fundraiser-app-designer-add-new-content.png">

### アプリケーションのテスト
右上にある再生ボタンを選択すると、アプリが再生モードに変わる
→　デザイン プロセスでの選択に基づいてデータが表示されるアプリが確認できる

<img src="https://learn.microsoft.com/ja-jp/training/modules/how-build-model-driven-app/media/app-play-mode.png">

* 上記イメージでは、チャリティー テーブルに対して、次のデータが収集されている
    * Name (名前)
    * Fundraiser Goal (チャリティー目標)
    * Owner (所有者)
    * Total Donations (寄付の合計)
    * Created On (作成日)

### データ モデル
* データ モデリング プロセスを開始するとき、以下のことを考えてみよう
    * ソリューションによって格納または収集されるデータ型
    * 作業中の他のデータとは関連するのか、もしくは一致するのか

* 上記の質問は、モデル駆動型アプリケーションを設計する際に重要なポイント
* モデル駆動型アプリのほとんどがデータのモデリング方法に基づくため、メタデータ駆動型アーキテクチャを使用することに注意
* アプリ デザインを変更するカスタム コードを記述する必要ない
* MicrosoftDataverseのビューを参照してアプリケーションのメタデータを表示することができる

<img src="https://learn.microsoft.com/en-us/training/modules/how-build-model-driven-app/media/entity-play-mode.png">

* データ モデルでは、データ型についても検討する必要があります。 
* Microsoft Dataverseのテーブルに列を追加する場合、選択したデータ型によってモデル駆動型アプリでのユーザーの入力・表示方法が決まる
*  選択肢がドロップダウンに表示されるように、通貨は通貨記号で表示されるが小数点以下は表示されない
*  テーブルのこういった小さな変更は、ユーザーがアプリを体験する方法に大きな影響を与える可能性がある

* 以下のスクリーンショットでは、Fundraiserの例を使用してカラムの例とそれらが持つさまざまなデータタイプを示している

<img src="https://learn.microsoft.com/ja-jp/training/modules/how-build-model-driven-app/media/fundraiser-entity-default-fields.png">

* 重要
    * 列タイプを別のデータ型に変更する必要がある場合 (テキスト列を選択肢列に変更する場合など)、その列を削除して正しい列タイプで再作成する必要がある
    * 上記操作を行うと、その列に関連付けられているデータがすべて失われてしまうので注意

### ユーザーのニーズを理解する
* モデル駆動型アプリを作成することに当たり、最初のデザイン目標はMicrosoft Dataverseデータ モデルを適切な状態にすること
これを行うと、Power Appsに接続でき、モデル駆動型アプリがそのモデルからアプリ デザイナーを使用して作成される

* 自分のアプリで使用可能にしたいテーブル、ダッシュボード、ビジネス プロセス フロー、フォーム、およびその他のコンポーネントを選択すると、アプリが作成される
これは、アプリがどのように見えるかよりも、ユーザーのニーズを理解することにより多くの時間を費やす必要があることを意味

### ビジネス ロジック
* アプリにビジネス ロジックを組み込む際は、以下の主要なオプションがある
    * Microsoft Dataverseテーブルに対してビジネス ルールを設定する
        * ビジネス ルールを使用すると、データ レイヤーで動作を定義することができる
        * フィールドが必要なときの条件の設定、既定値の設定、または基準に基づいたフィールドの表示と非表示を切り替える場合に便利
        * 例）経費を追跡するためのテーブル。
        旅行のタイプの列を用意してユーザーが [自動車] を選択した場合は[マイレージ] フィールドが必須であり、それ以外の場合はオプションであるというビジネス ルールを作成できる
        * これにより、すべてのシナリオにおいてデータの一貫性を確実に維持することができる

    * ビジネス プロセス フローを作成する
        * ビジネス プロセス フローは、ユーザーによるアプリの使用をガイドするために使用される
        * これらは、データの状態に基づいて次の手順のビジュアルを提供し、ユーザーがアプリを使用する際に実行するその他のアクションを容易にすることができる
        * アプリに自動化を提供し、データを入力するための単なる場所でなく、ガイド付きのエクスペリエンスであるアプリを実現できる
        * ビジネス プロセス フローの詳細については、[Power Automate でビジネス プロセス フローを作成する][MS-Learn2]を参照

[MS-Learn2]: https://learn.microsoft.com/ja-jp/training/modules/work-with-business-process-flows-dynamics-365/

### ダッシュボード
* アプリの一般的な出力ニーズであるデータを視覚化することを満たすには、カスタム フィルターとビジュアル グラフィックを含むダッシュボードを実装して、これらすべてのデータをアプリで相互に関連付けること
* ダッシュボードを作成する場合は、ユーザーが簡単に使用できるようにするのがポイント
→　データのおおまかなスナップショットを用意し、必要に応じてフィルターを使用してより詳しいデータに掘り下げることができるようにする

<img src="https://learn.microsoft.com/ja-jp/training/modules/how-build-model-driven-app/media/dashboards-play-mode.png">


### サードパーティ製の追加のソリューションとアプリ アクセラレータ
* 利用可能なさまざまなアプリ アクセラレータとサードパーティ ソリューションについても把握しておくことが重要
* 健康、財務、銀行業、教育、非営利団体、自動車産業、またはメディアなどの業界に応じて、Microsoftはソリューションの迅速な立ち上げに役立つアクセラレータまたは基本コンポーネントをいくつかリリースしている
→　[Industry accelerators overview (業界のアクセラレータの概要)][MS-Learn3]を参照

[MS-Learn3]: https://learn.microsoft.com/ja-jp/common-data-model/industry-accelerators?azureportal=true