(ほぼ備忘録です。日本ではあまり需要はないでしょうね・・)
ステップ1 ソリューションの最低限のプロジェクトを作成する
pac solution init --publisher-name yoshi --publisher-prefix yoshi
結果。CDSソリューションの最低限のファイルと、MSBuildでビルド出来るプロジェクトファイル(.csproj)が出力される。
ステップ2 プロジェクトがソリューション(.zip)を出力するように設定を変更する
ステップ1で生成された.csprojファイルでは、肝心の部分がコメントアウトされています。
<!-- Solution Packager overrides, un-comment to use: SolutionPackagerType (Managed, Unmanaged, Both)
<PropertyGroup>
<SolutionPackageType>Managed</SolutionPackageType>
</PropertyGroup>
-->
コメントを外し、なおかつソリューションのパッケージタイプをBoth
に設定します。Both
で無く、Managed
かUnmanaged
も選択可能ですが、どちらにも対応できる方がいいです。違いの意味が分からない場合もBoth
で良いです。
<PropertyGroup>
<SolutionPackageType>Both</SolutionPackageType>
</PropertyGroup>
ステップ3 ソリューション(.zip)をビルドして生成する
以下の二つのコマンドを実行(前提:msbuildのパスが通っているコンソール。良く分からない場合はDeveloper Command Prompt for VS2019 などのコンソールでOK)
> msbuild /t:restore
> msbuild
結果。bin
フォルダー下に2つのファイル.zipファイルが生成されました。
-
yoshi_core_managed.zip
マネージド(インポート先の環境で変更不可) -
yoshi_core.zip
アンマネージド(インポート先の環境で変更可能)
この.zipファイルのいずれかを直接D365オーガニゼーションにインポートできます。
ステップ4 アンマネージドのソリューションをインポートする
この記事ではソリューションを変更する(=環境をカスタマイズする)手順を解説するのでアンマネージドのソリューション(unmanaged solution)をインポートします。アンマネージドのソリューションしか変更を加えられません。
インポート後の様子。
ステップ5 ソリューションをカスタマイズする(開発する)
ソリューションをビジネスに合わせてカスタマイズします。
カスタマイズ(拡張性)は極めた高く、それだけで1冊の本になってしまいます。
簡単な例としてWebResourceとしてイメージファイルを加えます(例えばこのやり方で会社のロゴをアップロードして、CRMの任意の位置に会社ロゴを表示したりできます)
カスタマイズするには開発用サイトから行います。
Solutions
メニューを選び、自分のソリューションを選択すると、そこからカスタマイゼーションの作業が出来ます。下図のようにして、新規WebResourceを加える手続きを開始します。
フォームに必要な項目を入力します。ローカルのマシーンからアップロードするファイルを選び、他には名前などのメタ情報を指定します。
一旦、保存します。するとこのWebResourceのURLが生成されます。後で確認のためにこのURLにアクセスします。
ステップ6 カスタマイゼーションを確認する
今回はWebResourceとしてPNGイメージファイルを加えました。前述のURLを使ってブラウザにイメージを表示させてみます。
上手く行きました。このイメージファイルはCDSに保存されていることが確認できます。(この要領でHTMLやJSなどを加えれば、完全に独自のUIも加えることが出来ます。ただこれは「最終手段」で、他にフォーム等のカスタマイズのやり方があるのでそちらを先に確認しましょう)
ステップ7 カスタマイズしたソリューションをエクスポートする(バージョン管理のため)
開発用サイトからExport
を選びます。マネージドとアンマネージド、両方のソリューションを別々にダウンロードします。
(レガシーなやり方。新しい方で上手くいかなかったらこちらで)
ダウンロードした.zipファイル、2つとも、ソリューションプロジェクトのルートにコピーします。
この.zipファイルを入力として取るSolutionPackager.exe
というツールを次に実行します。
ステップ8 エクスポートしたソリューションの内容を抽出・展開する
このSolutionPackager.exe
ツールはソリューション(.zip)ファイルからカスタマイズした内容を取り出し、カスタマイズの項目ごとに、管理しやすいように展開してくれます。例えば、今回のカスタマイズは新規WebResourceのみでしたが、これ以外にカスタムエンティティやサイトマップなどのカスタマイズを含む場合は、それに対応したフォルダーを作成してくれます。この状態でGitなどのバージョン管理レポジトリに保存するのが望ましいです。
$solutionPackagerExe = $env:UserProfile + "\.nuget\packages\microsoft.crmsdk.coretools\9.1.0.39\content\bin\coretools\SolutionPackager.exe"
$solutionPackagerArgs = "/n /action:Extract /zipfile:yoshi_core_1_3.zip /folder:src /packageType:Both"
$solutionPackagerArgs = $solutionPackagerArgs.Split(" ")
& $solutionPackagerExe $solutionPackagerArgs
*注意:バージョンが1_3
になっていますが、当然これはバージョンを更新するたびに変更してください(もしくはダウンロードした.zipファイルからバージョンの部分を取り除く)
ステップ9 カスタマイズ(変更)をバージョン管理する
ソリューションのカスタマイゼーションを抽出・展開した結果、以下の変更が確認できます。
-
Solutions.xml
が更新されています。あたらに<RootComponents>
として新規WebResourceが確認できます -
WebResources
というサブディレクトリが作成されています。その下にはPNGイメージファイルとそれに関するメタ情報ファイルが追加されています。
この状態でGitレポジトリ等にコミット・プッシュします。
ステップ10 バージョン管理されたソースからビルドしてデプロイする
このステップは無駄のように見えますが必要です。カスタマイズを行ったCDSオーガニゼーションからエクスポートしたマネージドソリューションがすでにあるのでそれを使えばよい、と考えてしまいますが、その成果物のソースはカスタマイズを行ったCDSオーガニゼーションです。もしそのオーガニゼーションが無くなってしまうと、二度とこの成果物をエクスポートできなくなってしまいます。
幸い、このステップは「ステップ3 ソリューション(.zip)をビルドして生成する」をそっくりそのまま繰り返すだけです。
以下、最新のカスタマイゼーションを含んだソリューションが生成されました。このソリューションをテスト用CDSオーガニゼーションにインポートして動作確認し、最終的には本番のCDSオーガニゼーションにデプロイして一連の開発サイクルのゴールに到達します。