MacでMicrosoft Power Platform CLIを使用して Dynamics 365で用意したソリューションからプラン情報を追加したソリューションコンポーネントを作成する


はじめに

当記事は、Microsoft AppSourceDynamics 365用のアプリを公開する際に必要となるDynamics 365ソリューションコンポーネントMicrosoft Power Platform CLIを使用して作成することを目的としています。

ただ、Dynamics 365自体にソリューションのエクスポートするだけなら組織のサイトを開いて

設定(右にある歯車のアイコン) -> 詳細設定 -> 設定プルダウンメニュー ->ソリューション

で、ソリューション一覧画面を表示して、「パッケージの種類 = アンマネージド」を選択し、同画面のエクスポートでエクスポートの種類に「マネージド」を選択してエクスポートすれば、立派なマネージドソリューションコンポーネント(以降はソリューションと記す)が出来上がります。

しかしながら、上記方法でエクスポートしたソリューションの場合、ソリューションにライセンス情報を追加することが出来ない(多分ね)訳です。

前置きが長くなりましたが、当記事では、Microsoft Power Platform CLIを使用してライセンス情報を付加したソリューションを作成するための方法を紹介します。

ソリューションについて

ソリューションにはアンマネージドマネージドの2種類が存在します。

  • アンマネージドソリューション・・・組織にインポートした後にソリューションをカスタマイズできない(開発用)
  • マネージドソリューション・・・組織にインポートした後にその組織でソリューションをカスタマイズできる(リリース用)

公式ドキュメントソリューションの概念にそれぞれのソリューションについて説明されています。(日本語ドキュメントの文中では、"マネージド" "管理"と翻訳されていますのでご注意を)

また、マネージドソリューションは、カスタマイズ出来ないので、当然、マネージドソリューションをcloneしてプラン情報の追加はできません。

事前準備

Microsoft Power Platform CLI環境を用意する

Microsoftの公式ドキュメント「Microsoft Power Platform CLI とは」を読んでみると、環境構築ための選択肢が用意されていますがMacだと、VSCodeにPower Platform VS Code 機能拡張をインストールするしかない様です(2021/09/11現在)

と、言う訳で、Microsoft Power Platform CLI とはにVSCode + Power Platform VS Code 機能拡張環境で進める事とします。

尚、環境構築方法は「Microsoft Power Platform CLI とは」に掲載されていますので、そちらを参照して下さい。

作業ディレクトリの準備

作業をするためのディレクトリを準備して下さい。

当記事では

/Users/kobunhada/dynamics/

を作業ディレクトリとして説明していきます。

プラン情報をソリューションに追加ための準備

付録: ソリューションにライセンス情報を追加するライセンス ファイルを作成するを参照して、以下のファイル(csvファイル)を用意しておきましょう

  • プラン定義ファイル: Microsoftパートナーセンターで作成したオファープランの詳細を定義する
  • プラン マッピング ファイル: それらのプランをソリューションのコンポーネントにマッピングする

例として以下の名前のCSVファイルを定義したとします。

  • ISV_Plan_Definition_CSV.csv はプラン定義ファイル
  • ISV_Plan_Mapping_CSV.csv はプランマッピングファイル

この2ファイルを/Users/kobunhada/dynamicsに配置しておきます。

Microsoft Power Platform CLIを使う

以降の作業は、VSCode上で実行します。念の為、VSCodeでターミナルを表示する方法を紹介します。

VSCodeの"Terminal"メニューから"New Terminal"を選択して下さい。VSCodeの下部にターミナルが表示されると思います。以下の作業は、このターミナルで実施して下さい。

ソリューションを追加する環境の認証プロファイルの作成

大雑把に言うとMicrosoft ログインです。

Dynamics365のkobunhada組織にログインする場合
pac auth create --name myprofile --url https://kobunhada.crm7.dynamics.com/

--nameオプションは12文字以内の任意の名前で良いと思います。

Microsoftログイン画面が表示されるので、それ経由でログインします。

公式ドキュメント通りに --kindオプションや--username,--passwardオプションを指定すると、色々とエラーが出てきます。

どうしてもコマンドのみで行きたい場合は、以下を参考に色々と試してみて下さい。

pacコマンドの使用方法
使用法: pac auth create [--name] [--kind] [--url] [--username] [--password] [--applicationId] [--clientSecret] [--tenant] [--cloud]

  --name                      この認証プロファイルに指定する名前 (最大12文字) (エイリアス: -n)
  --kind                      作成する認証プロファイルの種類です。既定値は Dataverse です (エイリアス: -k)
  --url                       接続先のリソース URL (エイリアス: -u)
  --username                  任意: 認証に使用するユーザー名。指定しない場合は AAD ダイアログを表示します (エイリアス: -un)
  --password                  任意: 認証に使用するパスワード (エイリアス: -p)
  --applicationId             オプション: 認証に使用するアプリケーション ID (エイリアス: -id)
  --clientSecret              オプション: 認証に使用するクライアント シークレット (エイリアス: -cs)
  --tenant                    アプリケーション ID とシークレットを使用している場合のテナント ID です。 (エイリアス: -t)
  --cloud                     オプション: 認証に使用するクラウド インスタンス (エイリアス: -ci)
                              値: Public, Tip1, Tip2, UsGov, UsGovHigh, UsGovDod

ソリューションプロジェクトをclone

Dynamics365のkobunhada組織のアンマネージドソリューションKOBUN_HADAをclone
pac solution clone --name KOBUN_HADA --outputDirectory /Users/kobunhada/dynamics

マネージドソリューションはclone出来ないので注意して下さい

ソリューションプロジェクトにプラン情報をソリューションに追加する

pac solution add-license -pd /Users/kobunhada/dynamics/ISV_Plan_Definition_CSV.csv -pm /Users/kobunhada/dynamics/ISV_Plan_Mapping_CSV.csv

プロジェクトルートへ移動する

cd /Users/kobunhada/dynamics/KOBUN_HADA

ソリューションをBuildする

アンマネージドソリューションをBuildする

msbuild /t:build /restore

マネージドソリューションをBuildする

msbuild "KOBUN_HADA.cdsproj" /t:build /p:configuration=Release /restore

Buildしたソリューションファイルの出力先

  • プロジェクトroot/bin/Debug アンマネージドファイル
  • プロジェクトroot/bin/Release マネージドファイル

以上です。

おわりに

今の会社に入ってから Dynamics 365 の存在を初めて知った(Salesforceは名前だけは知っていたけどCRMやSFA、とはご縁のない人生を歩んで来ました)のですが、CRM業界では、Salesforceに遅れを取っている様です。

但し、つい最近、SalesforceがSlackを買収したことから、MicrosoftはDynamics 365に本腰を入れてシェアを奪いに行くつもりなのかなぁ、と。

これから Salesforce + Slack vs Dynamics + Teams の熾烈なバトルが展開されるのでしょうか・・・しらんけど。

個人的には Slackが改悪されないことを祈るばかりです。