1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CDSのプラグインで事前バインドを行う

Last updated at Posted at 2020-07-16

完全に車輪の再発明ですが。

前提

  • 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

組織サービスのエンドポイントの取得

  1. 環境を選択し、歯車のマークをクリックし、詳細設定をクリック
    image.png
  2. Settingsの下向きの「>」をクリックし、Customizationsをクリック
    image.png
  3. Developper Resourcesをクリック
    image.png
  4. Organization ServiceのEndpointをコピー
    image.png

CRM SDKのダウンロード・configファイルの編集

  1. PowerShellでCRM SDKをダウンロードする
  2. 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のバージョンになる
  3. 2.のフォルダに格納されているCrmSvcUtil.exe.configを開く
  4. 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の実行

  1. コマンドプロンプトを起動
    • PowerShellではダメ
  2. 「CRM SDKのダウンロード・configファイルの編集」の2.のフォルダに移動
  3. CrmSvcUtil.exeを実行
  4. 「CRM SDKのダウンロード・configファイルの編集」の4.のoに指定したフォルダ・名前でクラスが生成される

image.png
image.png

1
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?