MS_CRMCustomization - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

CRMのカスタマイズ

概要

分野における CRM(顧客関係管理)を中心に構築されている。

その一方で、民間・政府・非営利のあらゆる部門における広範囲な
機能を制御可能な多様性から xRM という言葉が使われるようになってきている。

補足(xRM という語は Dataverse に吸収された): 「CRM の基盤を
顧客管理以外にも使う」という xRM の発想は、その後
Common Data Service → Dataverse として製品化され、
Power Apps の基盤になった。
つまり本ページの言う xRM は、現在では
Dataverse 上のモデル駆動型アプリとして実現されている。
「xRM」という語自体は現在ほとんど使われない。

構成

カスタマイズは

から構成される。

方法

カスタマイズの方法には

  • Web アプリケーションの

    • 設定
    • カスタマイズ ツール
  • 外部アプリケーション

  • レポート サービス

    • フィルター ビュー
    • Web サービス
      • SDK によるプラグイン開発

などがある。

を除き、コンフィギュレーションのみでコードは書かないので
外部アプリケーションを除き、柔軟性の高いスクラッチ開発は不可能。

移行メモ: 元ページの「WF」のリンク先は元 Wiki 側に存在せず、
リンク切れだったため、プレーン テキストとし
正式名称(Windows Workflow Foundation)を補った。
なお Silverlight は 2021 年にサポートが終了しており、
Dynamics CRM 側でも Silverlight Web リソースは廃止されている。
現在のクライアント側拡張は **JavaScript(Client API)**と
**PCF(Power Apps Component Framework)**が標準の手段である。

ポイント アンド クリック

設計情報の入力 I/F に専用ツール(デザイナ型)を採用し、GUI ツールだけで変更可能。

手法

GUI ツールだけで変更可能な手法。

  • Web アプリケーション
    • 設定
    • カスタマイズ ツール

対象

JavaScript

手法

  • JavaScript
  • Web アプリケーションの設定

対象

  • フォーム スクリプト イベント ハンドラー
    フォーム イベント ハンドラーが JavaScript Web リソースで定義された関数を呼び出すように構成する。

  • コマンドバー(リボン)コマンド
    <CustomRule>(RibbonDiffXml) or <JavaScriptFunction>(RibbonDiffXml)
    要素を使用し、JavaScript Web リソース内に定義された関数を呼び出すアクションを定義する。

  • Web リソースと IFRAME
    HTML Web リソース内で JavaScript Web リソースを使用、親子で対話できる。

プラグイン

  • ビジネス ロジックのプラグイン メカニズム。

  • Dynamics CRM SDK、Visual Studio、Excel 等の開発ツールを併用する必要がある。

  • 設置型、IFD、および Online(分離モード)の Microsoft Dynamics CRM 展開で使用可能。

  • アセンブリの %installdir%\server\bin\ フォルダーへの追加は、
    設置型および IFD サーバー インストール型のみでサポートされている。

  • プラグインの開発
    https://msdn.microsoft.com/ja-jp/library/gg328490.aspx

手法

  • Microsoft Dynamics CRM SDK
  • Web アプリケーションの設定

種類

  • 同期・非同期

    • 同期ビジネスロジック・プラグイン
      (イベント実行・パイプライン)

      • プレイベント・プラグイン
      • プラットフォーム・コア操作プラグイン
      • ポストイベント・プラグイン
    • 非同期ビジネスロジック・プラグイン

      • ユーザ定義プラグイン
      • カスタムワークフロー・プラグイン
  • イベント実行パイプライン
    https://msdn.microsoft.com/ja-jp/library/gg327941.aspx

補足(プラグイン登録の実際): プラグインは
Plug-in Registration Tool でアセンブリを登録し、
「メッセージ(Create/Update/…)× エンティティ × ステージ」の組で
ステップとして関連付ける。
本文の「プレイベント/コア操作/ポストイベント」は、
このステージ(PreValidation / PreOperation / MainOperation /
PostOperation)に対応している。
現在は Dataverse のプラグインとして同じ仕組みが引き継がれているが、
登録ツールは Power Platform CLI に統合されつつある。

XMLを直接編集

エクスポートしたソリューション パッケージの XML を直接編集。

WCF Webサービスの使用

手法

Web サービスを使用した外部アプリケーションの開発。

  • DiscoveryService(探索サービス)

    • マルチテナント環境下でユーザが所属する組織を判別
  • OrganizationService(組織サービス)

    • Microsoft Dynamics CRM SDK のメイン Web サービス
    • CRM のデータ、メタデータにアクセスするコードを記述するためのメソッドを含む
    • 最近のアプリケーションの SOAP エンドポイント
  • Organization Data Service

    • OData エンドポイント
  • DeploymentService

補足(現在は Web API に一本化): ここに挙がっている
SOAP エンドポイント(OrganizationService)と
OData v2 の Organization Data Service は、いずれも非推奨となり、
現在は **Dataverse Web API(OData v4 + REST)**に一本化されている。
.NET から使う場合は ServiceClient(旧 CrmServiceClient)が
Web API をラップしており、IOrganizationService
プログラミング モデル自体は維持されている。

対象

Web サービスを使用した

  • 外部アプリケーション
  • レポート サービス
  • プラグイン

データ アクセス

手法

  • Microsoft Dynamics CRM SDK を使用し、
    Web サービス経由でデータ アクセス

    • エンティティ
    • QueryExpression
    • QueryByAttribute
    • FetchXML
    • LINQ クエリ
    • Execute メソッド
  • ビュー経由でデータ アクセス

    • フィルターされたビュー(Filtered views)

対象

データ アクセスする、

  • 外部アプリケーション
  • レポート サービス
  • Web サービス
  • プラグイン

セキュリティ

ロールベース セキュリティ

  • 特権
  • アクセス レベル

オブジェクトベースのセキュリティ

  • レコードベースのセキュリティ
  • フィールドベースのセキュリティ

セキュリティ プリンシパル(ユーザーまたはチーム)

詳しくは「CRM セキュリティモデルの作成」を参照。

認証方法

展開 認証モデル
Dynamics CRM Online クレームベース認証
Dynamics CRM 2013 設置型 ケルベロス認証クレームベース認証
Dynamics CRM 2013 IFD ケルベロス認証クレームベース認証

補足(現在は OAuth 2.0 / Entra ID): 現在の Dataverse への認証は
Microsoft Entra ID(旧 Azure AD)の OAuth 2.0 に統一されており、
上表の「クレームベース認証(WS-Federation / AD FS)」は
設置型の残存構成でのみ使われる。
CRMインターネット展開用の構成(IFD)

ソリューション

概要

  • ソリューション コンポーネントをグループ化したもの。

  • 特定のビジネス要件一式を満たすために
    システムに対して行うカスタマイズを整備するための手段。

  • 一連のカスタマイズ(ソリューション コンポーネント)をパッケージ化。

  • 一部のユーザー or 全てのユーザーに必要となる機能を提供する。

  • カスタマイズ

    • カスタマイズに対応するカスタム ソリューションを新規作成する。
    • 既定のソリューションを直接編集することもできる。
    • 推奨:ビジネス要件のまとまり毎にカスタム ソリューションを新規作成する。

利点

  • 他のコンポーネントに気を取られること無く、
    必要なコンポーネントのみに取り組むことができる。

  • 元の要件に複数のソリューションを関連付けることで、変更を記録できる。

  • 開発環境からのエクスポートと、テスト運用環境へのインポートが可能。

    • エクスポートに含まれるのは差分のみ。サイズが小さくて済み管理も容易。
    • エクスポートは、変更管理レコードの一部として保存できる。
    • 過去のソリューションを使用して変更をロールバックできる。

移行メモ(正誤): 元ページの「サイズが小さくて済管理も容易」は
「済み」の脱字と判断し、補った。

構成

システム ソリューション

  • Microsoft Dynamics CRM 内に定義された既定のソリューション コンポーネント

  • 組織作成時に作成され、システムの全コンポーネントを含んでいる。

  • 既定のアプリケーションの動作を定義している。

  • 既定のソリューションは、

    • エクスポート・インポートが可能だが、
    • マネージド ソリューションとしてのエクスポートが不可能。
    • 全体を Dynamics CRM Online に展開することが不可能。
  • システムが複雑化すると、既定のソリューションを使用した方法では対応が困難になる。
    このため、カスタム ソリューションを使用して、コンポーネントを分割する。

マネージド ソリューション

  • 主に、ISV がアドオンを顧客に販売するような配布のケースで使用する。

  • 開発用途のアンマネージド ソリューションをエクスポート&パッケージ化したもの。

  • 配布とインストールを目的とする完成したソリューション。

  • インポート・エクスポート

    • システム コンポーネントは変更されない。
    • アンマネージド ソリューションの部分はロールバックできる。
    • アプリケーションの動作は、マネージド ソリューションの変更の組み合わせになる。

移行メモ(正誤): 元ページの「開発用用途の」は「開発用途の」の
重複と判断し、修正した。

アンマネージド ソリューション

  • 配布を目的としない、展開で使用。

    • 開発中のソリューション展開
    • 社内的な変更の展開
  • アンマネージド カスタマイズをグループ化したもの。

  • インポート・エクスポート

    • システム コンポーネントを変更する。
    • 変更の上書き&上書きの動作になる。
    • ロールバックできない(コンポーネントは削除されない)。
    • インポート順が異なると、結果が異なってくることがある。

アンマネージド カスタマイズ

  • 開発中のアンマネージド カスタマイズの実体は、すべて既定のソリューションに含まれる。
  • システム ソリューションはアンマネージド カスタマイズできる。
  • マネージド ソリューションはアンマネージド カスタマイズできる。

補足(現在の推奨は「マネージドで本番へ」): 現在の Power Platform では、
開発環境ではアンマネージド、テスト/本番へはマネージドで配布するという
ALM(Application Lifecycle Management)が公式に推奨されている。
マネージド ソリューションはアンインストールで変更を取り消せるため、
本ページの「ロールバックできる/できない」という差は、
現在も運用方針を決める要点であり続けている。
Azure DevOps

新規作成

ソリューション(カスタム ソリューション)を新規作成する。

  • 始め、開発のためのアンマネージド ソリューションを作成する。

  • 開発中のアンマネージド カスタマイズの実体は、すべて既定のソリューションに含まれる。

  • アンマネージド ソリューションは、アンマネージド カスタマイズの参照のみ保持する。

  • アンマネージド ソリューションを削除すると、
    既定のソリューションからアンマネージド カスタマイズも削除される。

移行メモ(正誤): 直前の記述(アンマネージド ソリューションは
「参照のみ保持する」)と整合しない。
実際には、アンマネージド ソリューションを削除しても
コンポーネントの実体(既定のソリューション内のカスタマイズ)は削除されない

実体まで消したい場合は、ソリューション内で各コンポーネントを
個別に削除する必要がある。

ロール

以下のロールを持つユーザで CRM の組織にサインイン。

  • システム カスタマイザー
  • システム管理者

手順

  • ナビゲーション バーの[Microsoft Dynamics CRM]の[設定]、[ソリューション]、[新規]。

  • [新しいソリューション]フォームが表示される。

  • 必要事項を入力し保存。

    • 表示名:ソリューションの呼称(変更可能)

    • 名前:英数字のみ(変更不可能)

    • 発行元:マネージド ソリューションで特に重要になる。

      • ソリューション・コンポーネントの発行元を特定可能な接頭辞を定義する。
        ・カスタマイズした組織:カスタマイザー(個人、組織、企業)
        ・ビジネス要件:カスタマイズ(モジュール名)

      • 接頭辞:8 文字以内
        ・新規コンポーネント名の先頭に付与され名称の衝突を抑止する。
        ・接頭辞 = カスタマイズした組織 + ビジネス要件などとする。

      • 補足:組織を作成すると、「既定の発行者」という発行元が自動的に作成される。

    • 構成ページ

    • バージョン:バージョン番号(数字のみ)

      • メジャー.マイナー.ビルド.リビジョン
      • 推奨:年.月.日.リビジョン
    • 説明:ソリューションの機能の概要(2,000 文字)

  • エクスポート時のファイル名
    「名前」+「バージョン」

複数ソリューションの用例

開発

複数のカスタマイザーによるカスタマイズ。

  • 利点

    • 並行作業
    • 開発、マージ、テスト
  • 欠点

    • 競合の類の検出の遅延。

バージョン

完了した作業に新しい要件が追加された時。

  • 以下の場合は旧ソリューションに変更を行う。

    • バグ修正(リビジョン・アップ)
  • 以下の場合は新ソリューションに、新コンポーネント追加を行う。

    • 当該ソリューションへの更新が枯れている場合

エクスポート・インポート

エクスポート

  • ZIP 形式でのエクスポート
    以下が同梱されている。

    • XML
    • DLL
    • XAML
    • 画像ファイル
  • 用途

    • 開発 - リリースまで。
      • 開発 - テスト - 運用環境
      • 受け入れテスト、トレーニング

インポート

  • バージョン番号で管理されている。

    • インポート元の方がバージョン番号が大きい場合はインポート不可能。
  • コンポーネントを含まないソリューションをインポートしてもコンポーネントは削除されない。

  • ダウン・レベリング
    CRM のマイナーバージョンが違う場合で、旧バージョンの CRM がインポートする場合、
    旧バージョンでサポートされない機能(コンポーネント/プロパティ)を削除する。

移行メモ(正誤): 「インポート元の方がバージョン番号が大きい場合は
インポート不可能」は、記述が逆と判断される。
実際に拒否されるのは、
インポート先に既にある同名ソリューションの方がバージョンが新しい場合
(=古いバージョンを上書きしようとした場合)である。
元の意図は「インポート先より古いソリューションはインポートできない」と
解釈した。

ソリューション コンポーネント

カスタマイズ ツールまたは API を使用して作成され、アプリケーション内で完全にホストされる。

種類

スキーマ

  • エンティティ

    • フィールド
    • フォーム
    • ビュー
    • グラフ
  • 関連付け

  • 接続とつながりロール

  • グローバル オプション セット

ユーザインターフェイス

  • アプリケーション リボン

  • サイトマップ

  • フォーム

  • エンティティ リボン

  • Web リソース

  • 分析

    • ダッシュボード
    • レポート
    • グラフ
    • ビジュアル化

プロセス/コード

  • プロセス
    • ダイアログとワークフロー
  • プラグイン
    • アセンブリ
    • 処理手順

テンプレート

  • 差し込み印刷
  • 電子メール
  • 契約
  • 記事

セキュリティ

  • セキュリティ ロール
  • フィード レベルのセキュリティ プロファイル

データ レコード

  • データ レコード

    • ユーザ
    • チーム、部署
    • キュー
    • 目標
    • 情報カテゴリの階層
    • 製品カタログに関連したもの
  • データレコードを使用したソリューション コンポーネント

    • ビュー
    • レポート
    • カスタム コード
  • 信頼性を担保する方法。

    • データインポートウィザードを使用する。
    • インポートファイルにレコードの GUID を含める。

移行メモ(正誤): 元ページの「インポートフィアル」は
「インポートファイル」の誤記と判断し、修正した。

補足(現在は Configuration Migration ツール): データ レコードを
環境間で移送する用途には、現在は SDK 同梱の
Configuration Migration Tool を使うのが標準である。
GUID を維持したまま移送できるため、本文が挙げている
「レコードの GUID を含める」という要件を自動的に満たす。

外部コンポーネント

アプリケーションの外部で動作するソフトウェアは、
インストーラー プログラムなど、従来の方法で
アプリケーションをパッケージ化してインストールする。

メタデータ

コンポーネントの中にはメタデータを形成しているものもある。

  • コンポーネント間の連携
  • コンポーネントの体裁(見た目)
  • SQL データベースへのデータ格納方法

新規作成

ロール

同上。

手順

  • ナビゲーション バーの[Microsoft Dynamics CRM]の[設定]、[ソリューション]、目的のソリューションをダブル クリック。
  • ソリューション エクスプローラーのナビゲーション ウィンドウで[コンポーネント]をクリック。
  • [コンポーネントの種類]の一覧で追加する種類をクリックし、コマンド バーで、[新規]または[既存の追加]を選択。

エンティティ

移行メモ: 現在、Dataverse では「エンティティ」は
テーブル、「フィールド」は、「関連付け」は
リレーションシップという呼称に変更されている。
本ページの用語は当時のもの。

下位コンポーネント

また、エンティティを作成すると以下のコンポーネント
(for メタデータ・体裁)が自動的に作成され、個別の削除は不可能。
内部的には、エンティティに対応した DB のテーブルも作成されている。

フィールド

  • エンティティのプロパティ
  • DB やビューの列に対応
  • フォームの Input, Output, Edit フィールドに対応するコントロール

CRM フィールドのカスタマイズ

フォーム

  • エンティティに対応するフォーム UI
  • 以下の各種コンポーネントが含まれる。
    • フィールド
    • サブグリッド
    • レイアウト
    • イベントハンドラ&スクリプト
  • 格納先:SystemForm

CRM フォームのカスタマイズ

ビュー

  • 所謂ビューだが、SQL を使用していない。
  • 格納先:SavedView

CRM ビューのカスタマイズ

グラフ

  • 常にビューとペアで使用される。
  • データセットから棒、折れ線などの各種グラフを生成して表示。
  • 一部エンティティには既成のグラフがあり、このカスタマイズも可能。

CRM グラフのカスタマイズ

エンティティの種類

システム エンティティ

  • システム開始時に事前に定義されるエンティティ(カスタマイズ可能)
  • 関連付けなど、依存関係があるコンポーネントは削除できない。

カスタム エンティティ

  • カスタマイズで追加したエンティティ。
  • 関連付けなどの依存関係を削除した後に削除可能。

CRM エンティティのカスタマイズ

依存関係

依存関係の例

  • サブコンポーネント

  • 関連付け

  • 接続とつながりロール

  • 利用?

    • ダッシュボードにグラフを含める等。

必須コンポーネント

  • 必須コンポーネント リストに表示される。
  • しかし、エンティティの削除を妨げない。
  • 必須コンポーネントが一度でもエクスポートされていれば以降ソリューションへの追加は不要。
  • 多くの必須コンポーネントはシステム エンティティのため(、警告が表示されても)、ソリューション追加は不要。

エンティティとDBMSスキーマ

  • フィルター ビューによりエンティティが提供される。

  • DBMS 構造を意識する必要はない

    • 旧バージョンではシステムフィールドとカスタムフィールドでテーブルが分割されていた。
    • 新バージョンではテーブル統合されたがフィルター ビューによりアプリケーションは影響を受けない。
    • 外部スキーマ(フィルター ビュー)により、概念スキーマ(製品のテーブル設計)変更の影響を受けない。
  • 必要なデータは外部キーを使用して結合される。

  • 概念スキーマ(テーブル)にインデックスを付与することはサポートされている。

補足(三層スキーマの好例): ここで著者が述べているのは、
ANSI/SPARC の三層スキーマ(外部・概念・内部)が
パッケージ製品で実際に効いている例である。
ベンダーが概念スキーマ(テーブル設計)を作り変えても、
外部スキーマ(フィルター ビュー)が同じであれば
顧客のレポートやカスタム アプリは壊れない。

データ アクセス

概要

DB テーブルにアクセスする方法。

アクセス方法

Microsoft Dynamics CRM SDKを使用

フィルターされたビュー(Filtered views)

SQL での直接アクセスはサポートされない。

  • 直接アクセスはフィルターされたビュー(Filtered views)のみサポート。
  • 更新は不可能、参照系(更新は不可)の外部アプリケーションの開発で利用可能。

制限事項(Dynamics CRM Onlineで)

利用できない

SQL として実行されるため、

  • フィルターされたビュー(Filtered views)

利用できる

Web サービス経由でクエリが実行されるため。

  • エンティティ
  • QueryExpression
  • QueryByAttribute
  • FetchXML
  • LINQ クエリ
  • Execute メソッド

補足(現在は TDS エンドポイントがある): 「Dynamics CRM Online では
SQL による直接クエリができない」という本ページの前提に対し、
現在の Dataverse には
TDS(Tabular Data Stream)エンドポイントが用意されており、
SSMS や Power BI の DirectQuery から
読み取り専用の T-SQL を実行できる。
更新ができない点は本ページと同じ。

エンティティ

  • Create メソッド
  • Retrieve メソッド
  • Update メソッド
  • Delete メソッド
  • RetrieveMultiple メソッド

移行メモ(正誤): 元ページの「RetrieveMultipleMethod メソッド」は
「メソッド」の重複と判断し、RetrieveMultiple メソッドとした。

事前バインディング

参照設定ではなく、CrmSvcUtil.exe を使用する。

遅延バインディング

  • Entity クラス

    • ハッシュテーブル
  • EntityCollection クラス
    主要なメンバ

    • Entities
    • EntityName
    • ExtensionData
    • Item
    • MoreRecords
    • PagingCookie
    • TotalRecordCount
    • TotalRecordCountLimitExceeded

FetchXML、QueryExpression、QueryByAttribute

オブジェクトや XML の階層構造で SQL を表現する。

QueryExpression

QueryByAttribute

FetchXML

  • FetchXML を使用したクエリの構築
    https://msdn.microsoft.com/ja-jp/library/gg328332.aspx

    • Dynamics CRM でサポートされるクエリ言語。
    • T-SQL の機能に似た内容をサポート。
    • Dynamics CRM のセキュリティに準じた結果セットを取得できる。
    • ユーザービューやシステムビューの保存や、高度な検索の実行で利用される。
    • 高度な検索で利用したクエリを FetchXML として取得できる。

LINQ

補足(LINQ プロバイダーの制約): CRM の LINQ プロバイダーは
内部的に QueryExpression に変換されるため、
LINQ to Objects や Entity Framework と同じ表現力はない
結合数の上限、Union や一部の集計が使えない等の制約があり、
複雑なクエリは FetchXML で書いた方が確実である。

フィルターされたビュー(Filtered views)

  • Microsoft Dynamics CRM データベース(SQL Server)を直接クエリできる。
  • 設置型のみでサポートされるため、オンライン環境へ移行することができない。

Execute メソッド

  • Execute メソッドに Request オブジェクトを渡す。
  • Response オブジェクトを取得する。

エンティティ共通のRequest

  • CreateRequest
  • DeleteRequest
  • RetrieveRequest
  • RetrieveMultipleRequest
  • UpdateRequest

エンティティ固有のRequest

  • SendEmailRequest
  • GenerateQuoteFromOpportunityRequest

汎用のRequest

  • WhoAmIRequest

移行メモ(正誤): 元ページの「WhoAml」は、WhoAmI(Who Am I)の
綴り誤り(Il と表記)と判断し、
SDK 上の型名である WhoAmIRequest に修正した。

参考

個別のカスタマイズ

参考


Tags: Dynamics CRM

⚠️ **GitHub.com Fallback** ⚠️