LoginSignup
1
0

More than 3 years have passed since last update.

Power Apps component framework (PCF) のCLIツールを軸にしたCDSソリューションの開発サイクル

Posted at

(ほぼ備忘録です。日本ではあまり需要はないでしょうね・・)

ステップ1 ソリューションの最低限のプロジェクトを作成する

pac solution init --publisher-name yoshi --publisher-prefix yoshi

結果。CDSソリューションの最低限のファイルと、MSBuildでビルド出来るプロジェクトファイル(.csproj)が出力される。

image.png

ステップ2 プロジェクトがソリューション(.zip)を出力するように設定を変更する

ステップ1で生成された.csprojファイルでは、肝心の部分がコメントアウトされています。

yoshi_core.csproj
  <!-- Solution Packager overrides, un-comment to use: SolutionPackagerType (Managed, Unmanaged, Both)
  <PropertyGroup>
    <SolutionPackageType>Managed</SolutionPackageType>
  </PropertyGroup>
  -->

コメントを外し、なおかつソリューションのパッケージタイプをBothに設定します。Bothで無く、ManagedUnmanagedも選択可能ですが、どちらにも対応できる方がいいです。違いの意味が分からない場合もBothで良いです。

yoshi_core.csproj
  <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オーガニゼーションにインポートできます。

image.png

ステップ4 アンマネージドのソリューションをインポートする

この記事ではソリューションを変更する(=環境をカスタマイズする)手順を解説するのでアンマネージドのソリューション(unmanaged solution)をインポートします。アンマネージドのソリューションしか変更を加えられません。

インポート後の様子。

image.png

ステップ5 ソリューションをカスタマイズする(開発する)

ソリューションをビジネスに合わせてカスタマイズします。

カスタマイズ(拡張性)は極めた高く、それだけで1冊の本になってしまいます。

簡単な例としてWebResourceとしてイメージファイルを加えます(例えばこのやり方で会社のロゴをアップロードして、CRMの任意の位置に会社ロゴを表示したりできます)

カスタマイズするには開発用サイトから行います。

image.png

Solutions メニューを選び、自分のソリューションを選択すると、そこからカスタマイゼーションの作業が出来ます。下図のようにして、新規WebResourceを加える手続きを開始します。

image.png

フォームに必要な項目を入力します。ローカルのマシーンからアップロードするファイルを選び、他には名前などのメタ情報を指定します。

image.png

一旦、保存します。するとこのWebResourceのURLが生成されます。後で確認のためにこのURLにアクセスします。

image.png

ステップ6 カスタマイゼーションを確認する

今回はWebResourceとしてPNGイメージファイルを加えました。前述のURLを使ってブラウザにイメージを表示させてみます。

image.png

上手く行きました。このイメージファイルはCDSに保存されていることが確認できます。(この要領でHTMLやJSなどを加えれば、完全に独自のUIも加えることが出来ます。ただこれは「最終手段」で、他にフォーム等のカスタマイズのやり方があるのでそちらを先に確認しましょう)

 ステップ7 カスタマイズしたソリューションをエクスポートする(バージョン管理のため)

開発用サイトからExportを選びます。マネージドとアンマネージド、両方のソリューションを別々にダウンロードします。

image.png

(レガシーなやり方。新しい方で上手くいかなかったらこちらで)
image.png

ダウンロードした.zipファイル、2つとも、ソリューションプロジェクトのルートにコピーします。

image.png

この.zipファイルを入力として取るSolutionPackager.exeというツールを次に実行します。

ステップ8 エクスポートしたソリューションの内容を抽出・展開する

このSolutionPackager.exeツールはソリューション(.zip)ファイルからカスタマイズした内容を取り出し、カスタマイズの項目ごとに、管理しやすいように展開してくれます。例えば、今回のカスタマイズは新規WebResourceのみでしたが、これ以外にカスタムエンティティやサイトマップなどのカスタマイズを含む場合は、それに対応したフォルダーを作成してくれます。この状態でGitなどのバージョン管理レポジトリに保存するのが望ましいです。

image.png

$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 カスタマイズ(変更)をバージョン管理する

ソリューションのカスタマイゼーションを抽出・展開した結果、以下の変更が確認できます。

image.png

  • Solutions.xmlが更新されています。あたらに<RootComponents>として新規WebResourceが確認できます
  • WebResourcesというサブディレクトリが作成されています。その下にはPNGイメージファイルとそれに関するメタ情報ファイルが追加されています。

この状態でGitレポジトリ等にコミット・プッシュします。

ステップ10 バージョン管理されたソースからビルドしてデプロイする

このステップは無駄のように見えますが必要です。カスタマイズを行ったCDSオーガニゼーションからエクスポートしたマネージドソリューションがすでにあるのでそれを使えばよい、と考えてしまいますが、その成果物のソースはカスタマイズを行ったCDSオーガニゼーションです。もしそのオーガニゼーションが無くなってしまうと、二度とこの成果物をエクスポートできなくなってしまいます。

幸い、このステップは「ステップ3 ソリューション(.zip)をビルドして生成する」をそっくりそのまま繰り返すだけです。

以下、最新のカスタマイゼーションを含んだソリューションが生成されました。このソリューションをテスト用CDSオーガニゼーションにインポートして動作確認し、最終的には本番のCDSオーガニゼーションにデプロイして一連の開発サイクルのゴールに到達します。

image.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0