完全に車輪の再発明ですが。
前提
- OSはWindows 10です
- PowerShell 7はクロスプラットフォームなので、CRM SDKの取得までは、PowerShell7ならばMac OSやLinuxでもできるはず
- でも、Mac OSやLinuxだとCrmSvcUtil.exeが動かないと思う
- たしかめてはいない
- 日本語と英語が混在しているが、気にしないでほしい
- 生成したクラスの使い方は別途記事にします
事前バインドとは
CDSのプラグインを開発して、レコードを作成したり更新したりする場合に2つのやり方があります]
- 事前バインド
- エンティティのメタデータに基づいて、ツールでクラスを生成する
- 生成したクラスを使って、コーディングする
- 遅延バインド
- エンティティのメタデータのLogicalNameを使用してコーディングする
メリット・デメリットの詳細は以下のDocsにまとまっています。
しかし、基本的には、事前バインドを使った方がよいです。
遅延バインドはクラスを生成しなくともすむので手軽なのですが、コンパイルエラーにならないので、デバッグやテストが辛いです。
エンティティの定義もソースで確認できて、CDSの画面やドキュメントを書くしないですむので、
コーディングスピードも上がると思います。
CrmSvcUtil.exeの使い方
事前バインドのためのクラスを生成してくれるツールがCrmSvcUtil.exeです。
本記事では、このツールの使い方の一例を記載します。
他にもいろいろなことができるので、Docsをみてください。
https://docs.microsoft.com/ja-jp/powerapps/developer/common-data-service/org-service/generate-early-bound-classes
組織サービスのエンドポイントの取得
- 環境を選択し、歯車のマークをクリックし、詳細設定をクリック
- Settingsの下向きの「>」をクリックし、Customizationsをクリック
- Developper Resourcesをクリック
- Organization ServiceのEndpointをコピー
CRM SDKのダウンロード・configファイルの編集
- PowerShellでCRM SDKをダウンロードする
- 以下のページにあるコマンドを叩く
- https://docs.microsoft.com/ja-jp/powerapps/developer/common-data-service/download-tools-nuget
- 上の手順にもありますが、新しくフォルダを切った方がよいです
- CRM SDKで検索すると、v8.xのCRM SDKがダウンロードできるページがでてきますが、最新版は上ページのコマンドで取得できます
- 以下のページにあるコマンドを叩く
- CrmSvcUtil.exeが格納されているフォルダを開く
- C:\PowerAppsDevToolsで1.のコマンドを実行した場合は以下
- C:\PowerAppsDevTools\Tools\Microsoft.CrmSdk.CoreTools.x.x.x.xx\content\bin\coretools
- Microsoft.CrmSdk.CoreTools.x.x.x.xxのxはSDKのバージョンになる
- C:\PowerAppsDevToolsで1.のコマンドを実行した場合は以下
- 2.のフォルダに格納されているCrmSvcUtil.exe.configを開く
- CrmSvcUtil.exe.configを編集して保存する
Before
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="MaxCrmConnectionTimeOutMinutes" value="20"/>
</appSettings>
After
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="MaxCrmConnectionTimeOutMinutes" value="20"/>
<add key="url" value="YourUrl"/>
<add key="o" value="C:\PowerAppsDevTools\MyCode\EntityDefinition.cs"/>
<add key="u" value="YourUser@YourOrganization.onmicrosoft.com"/>
<add key="p" value="YourPassword"/>
</appSettings>
- urlは「組織サービスのエンドポイントの取得」の4.で取得したURL
- oは生成したクラスの名前(絶対パスでフォルダも指定できます)
- ただし、フォルダは事前に作成していないと実行時にエラーになる
- uはユーザー名、認証を通すユーザーのメールアドレス
- pはuのパスワード
- ホントはnで、名前空間も指定した方がいいかな
- DocsにはURLパラメータは指定しないように書いてあるけど、その心がよくわからなかった
CrmSvcUtil.exeの実行
- コマンドプロンプトを起動
- PowerShellではダメ
- 「CRM SDKのダウンロード・configファイルの編集」の2.のフォルダに移動
- CrmSvcUtil.exeを実行
- 「CRM SDKのダウンロード・configファイルの編集」の4.のoに指定したフォルダ・名前でクラスが生成される