ソリューションの概要

完了

Microsoft Power Platform によって Microsoft Dataverse のソリューション機能を使用し、アプリ、フロー、テーブルそして JavaScript やプラグインといった開発者コード コンポーネントまでも追跡して管理します。ソリューションは、1 つの環境から別の環境への転送プロジェクト資産に使用することができるコンテナーです。 ソリューションは、Microsoft Power Platform によるアプリケーション ライフサイクル管理 (ALM) 戦略の中核となるものです。

管理されていないソリューションと管理ソリューション

  • 管理されていないソリューション - 開発環境でコンポーネントに変更を加えるときに使用されます。 ソリューション内に新しいコンポーネントを作成したり、Dataverse 環境内の既存のコンポーネントを追加することもできます。 管理されていないソリューションは、管理されていないソリューションまたは管理ソリューションとしてエクスポートできます。 エクスポートされたソリューションの管理されていないバージョンは、ソース管理システムにチェックインする必要があります。 SolutionPackager という名前のツールを使用して、チェックインするソリューションを準備できます。 Microsoft Power Platform Build Tools を使用して、このプロセスを自動化することができます。

  • 管理ソリューション - そのソリューションの開発環境ではない任意の環境に配置するために使用されます。 管理ソリューション コンポーネントは、管理ソリューションで直接変更したり、管理ソリューションから削除したりすることはできません。また、新しいコンポーネントを追加することはできません。 ただし、そのコンポーネントを別の管理されていないソリューションに含め、そこで変更を加えることができます。 これにより、管理ソリューションへの依存関係が作成されます。 管理ソリューションは、任意の環境にある他の管理ソリューションとは別にサービス提供できます。 管理されていないソリューションを管理ソリューションとして手動でエクスポートすることもできますが、管理ソリューションを自動ビルド プロセスからのビルド アーティファクトとして生成することをお勧めします。

Maker Portal (make.powerapps.com) を経由してソリューションを登録/管理することができますし、プラットフォーム API を使用して作成/管理することもできます。 また、SolutionPackager、Package Deployer、DevOps といったツール、およびソリューションに関連するさまざまなタスクの実行/自動化のために開発者が使用できる GitHub のビルド タスクやビルド アクションもあります。

階層化できるソリューション

1 つの環境内に複数のソリューションを共存させることができます。 これらのソリューションを管理するために、Dataverse は、個々のソリューション コンポーネント レベルで階層化の概念を使用して、ソリューションを追跡します。 すべての管理されていないソリューションは単一の階層として追跡され、各管理ソリューションは個別に追跡されます。 管理ソリューションの階層が複数存在する場合、環境に最後にインストールされた管理ソリューションは、以前にインポートされた管理ソリューションよりも優先して使用されます。 一部のコンポーネントは、最後にインストールされたものが適用されるアプローチではなく、マージをサポートしています。 たとえば、Power Apps モデル駆動型アプリ用のフォームは、3 つの管理ソリューションによって変更され、それぞれの管理ソリューションがフォームの異なるセクションを変更する場合があります。 この例では、マージされた結果が結合されたフォームになり、このフォームには 3 つの管理ソリューションすべてからの変更が含まれます。 ただし、アンマネージド レイヤーは常に最上位にあり、環境内の管理ソリューションからの変更は、アンマネージド レイヤー内の変更によって上書きされます。 最終的には、環境内にあるすべてのソリューション レイヤーの組み合わせがユーザーに対して表示されます。 次の図に、この概念を示します。

環境内のさまざまなソリューション レイヤを示すスクリーンショット。

階層化の概念は、1 つの環境内で複数のソリューションが連携できるようにするための重要な概念となります。 また、この概念により、管理ソリューションからコンポーネントをさらにカスタマイズすることが容易になります。

ソリューションの依存関係

ソリューション コンポーネントは、多くの場合、他のソリューション コンポーネントに依存します。 ソリューション ランタイムはこうした依存関係を追跡し、ソリューションが別のソリューションに依存している場合にそのソリューションを削除できないようにします。

Power Platform CLI を使用したソリューションの操作

開発者は、作成者ポータルを使用するだけでなく、Power Platform CLI を使用して多数のソリューション管理タスクを実行することもできます。

たとえば次のように、新しい Dataverse ソリューション プロジェクトを使用してディレクトリを初期化してから、開発者が作成したスライダー PCF コンポーネントへの参照を追加できます。

pac solution init --publisher-name developer --publisher-prefix dev
pac solution add-reference --path c:\Users\Downloads\SliderComponent

ソリューションのパッケージ化

Dataverse 環境からエクスポートされたソリューションは、メタデータを含む圧縮された ZIP ファイルです。 単一のバイナリ ファイルとして、ソース管理リポジトリに配置する際に、このファイルは有効で役に立つわけではありません。

ソース管理を容易にするために、ソリューションのパッケージ化ツールでは、Dataverse ソリューションを一連の XML ファイルとその他のファイルに展開できます。これらのファイルは、ソース管理システムで簡単に管理できます。 ソリューションのパッケージ化ツールでは、抽出したコンポーネントを使用してソリューションの zip ファイルを再パッケージ化することもできます。

開発者は、ソリューションのパッケージ化サポートを実装する次のツールを使用できます。

  • Power Platform CLI
  • 自動化を実装するための Power Platform Build Tools
  • SolutionPackager ツール

Power Platform CLI を使用したソリューションのパッケージ化

たとえば次のように、Dataverse からソリューションがエクスポートされ、SolutionPackager ロジックを使用して個々のファイルがすべて展開されます。

pac solution pack --zipfile C:\MyProject.zip --folder .\MyProjectUnpacked\.
pac solution unpack --zipfile C:\MyProject.zip --folder .\MyProjectUnpacked\.

SolutionPackager ツール

SolutionPackager ツールは、NuGet パッケージ Microsoft.CrmSdk.CoreTools の一部として配布されます。

SolutionPackager ツールは、次の操作を行うときに使用できる実行可能ファイルです。

  • 展開: ソリューションの .zipファイルをフォルダーに展開する

  • パッケージ化: フォルダーを .zip ファイルにパックする

ソリューションの展開/パッケージ化操作の一部として、特定のアクションの実行に使用できるさまざまなコマンドライン引数がサポートされています。 SolutionPackager ツールの詳細な使用方法については、SolutionPackager ツール の記事を参照してください。

個別のプロジェクトで作成および管理される品目 (Web リソースやプラグインのアセンブリなど) を管理する必要がある場合があります。 その場合は、ソリューション内のファイルを展開フォルダーの既定の場所から、関連するプロジェクト ディレクトリ内の場所にマッピングする必要があります。 たとえば、プラグイン アセンブリはプラグイン アセンブリ プロジェクトの bin 出力フォルダーに通常格納されます。 それには、/map 引数を使って、これらの場所のマッピングを管理できます。 XML マッピング ドキュメントの作成方法の詳細については、/map コマンド引数を使用する を参照してください。

SolutionPackager は手動でスタンドアロンで実行することもできますが、自動ビルド プロセスの一部として実行されることが一般的です。 Microsoft Power Platform Azure DevOps ビルド タスクおよび GitHub Actions には、SolutionPackager を使用してソリューションを展開/パッケージ化する手順があります。