MS_CRMCustomization - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
-
TOP > ビジネス・アプリケーション > Dynamics > Dynamicsのカスタマイズ
- CRMのカスタマイズ
- Dynamics AX開発(AOT)
分野における CRM(顧客関係管理)を中心に構築されている。
その一方で、民間・政府・非営利のあらゆる部門における広範囲な
機能を制御可能な多様性から xRM という言葉が使われるようになってきている。
補足(xRM という語は Dataverse に吸収された): 「CRM の基盤を
顧客管理以外にも使う」という xRM の発想は、その後
Common Data Service → Dataverse として製品化され、
Power Apps の基盤になった。
つまり本ページの言う xRM は、現在では
Dataverse 上のモデル駆動型アプリとして実現されている。
「xRM」という語自体は現在ほとんど使われない。
カスタマイズは
から構成される。
カスタマイズの方法には
-
Web アプリケーションの
- 設定
- カスタマイズ ツール
-
外部アプリケーション
-
レポート サービス
- フィルター ビュー
- Web サービス
- SDK によるプラグイン開発
などがある。
-
アドオン
-
Web コンテンツ
- JavaScript
- HTML
- Silverlight
を除き、コンフィギュレーションのみでコードは書かないので
外部アプリケーションを除き、柔軟性の高いスクラッチ開発は不可能。
- サポートされる Microsoft Dynamics CRM の拡張機能
https://msdn.microsoft.com/ja-jp/library/gg328350.aspx
移行メモ: 元ページの「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
- 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 を直接編集。
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 データベースへのデータ格納方法
-
ソリューション コンポーネントの追加
http://www.microsoft.com/ja-jp/dynamics/crm-customer-center/add-a-solution-component.aspx -
既定のソリューション コンポーネントの表示または編集
http://www.microsoft.com/ja-jp/dynamics/crm-customer-center/view-or-edit-default-solution-components.aspx
同上。
- ナビゲーション バーの[Microsoft Dynamics CRM]の[設定]、[ソリューション]、目的のソリューションをダブル クリック。
- ソリューション エクスプローラーのナビゲーション ウィンドウで[コンポーネント]をクリック。
- [コンポーネントの種類]の一覧で追加する種類をクリックし、コマンド バーで、[新規]または[既存の追加]を選択。
移行メモ: 現在、Dataverse では「エンティティ」は
テーブル、「フィールド」は列、「関連付け」は
リレーションシップという呼称に変更されている。
本ページの用語は当時のもの。
また、エンティティを作成すると以下のコンポーネント
(for メタデータ・体裁)が自動的に作成され、個別の削除は不可能。
内部的には、エンティティに対応した DB のテーブルも作成されている。
- エンティティのプロパティ
- DB やビューの列に対応
- フォームの Input, Output, Edit フィールドに対応するコントロール
- エンティティに対応するフォーム UI
- 以下の各種コンポーネントが含まれる。
- フィールド
- サブグリッド
- レイアウト
- イベントハンドラ&スクリプト
- 格納先:SystemForm
- 所謂ビューだが、SQL を使用していない。
- 格納先:SavedView
- 常にビューとペアで使用される。
- データセットから棒、折れ線などの各種グラフを生成して表示。
- 一部エンティティには既成のグラフがあり、このカスタマイズも可能。
- システム開始時に事前に定義されるエンティティ(カスタマイズ可能)
- 関連付けなど、依存関係があるコンポーネントは削除できない。
- カスタマイズで追加したエンティティ。
- 関連付けなどの依存関係を削除した後に削除可能。
-
サブコンポーネント
-
関連付け
-
接続とつながりロール
-
利用?
- ダッシュボードにグラフを含める等。
- 必須コンポーネント リストに表示される。
- しかし、エンティティの削除を妨げない。
- 必須コンポーネントが一度でもエクスポートされていれば以降ソリューションへの追加は不要。
- 多くの必須コンポーネントはシステム エンティティのため(、警告が表示されても)、ソリューション追加は不要。
-
フィルター ビューによりエンティティが提供される。
-
DBMS 構造を意識する必要はない
- 旧バージョンではシステムフィールドとカスタムフィールドでテーブルが分割されていた。
- 新バージョンではテーブル統合されたがフィルター ビューによりアプリケーションは影響を受けない。
- 外部スキーマ(フィルター ビュー)により、概念スキーマ(製品のテーブル設計)変更の影響を受けない。
-
必要なデータは外部キーを使用して結合される。
-
概念スキーマ(テーブル)にインデックスを付与することはサポートされている。
補足(三層スキーマの好例): ここで著者が述べているのは、
ANSI/SPARC の三層スキーマ(外部・概念・内部)が
パッケージ製品で実際に効いている例である。
ベンダーが概念スキーマ(テーブル設計)を作り変えても、
外部スキーマ(フィルター ビュー)が同じであれば
顧客のレポートやカスタム アプリは壊れない。
DB テーブルにアクセスする方法。
-
エンティティ
- Execute メソッド
-
クエリを使用してデータを取得する
https://msdn.microsoft.com/ja-jp/library/gg334607.aspx- QueryExpression
- QueryByAttribute
- FetchXML
- LINQ クエリ
SQL での直接アクセスはサポートされない。
- 直接アクセスはフィルターされたビュー(Filtered views)のみサポート。
- 更新は不可能、参照系(更新は不可)の外部アプリケーションの開発で利用可能。
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 を使用する。
-
ヘルパー プロキシ クラス
-
参考
- コード生成ツール (CrmSvcUtil.exe) を使用して事前バインド型エンティティ クラスを作成する
https://msdn.microsoft.com/ja-jp/library/gg327844.aspx - 【C#】【Dynamics CRM】事前バインディングの手順 - Morning Girl
http://kageura.hatenadiary.jp/entry/2015/04/07/135500 - [Dynamics CRM 2011] crmsvcutil.exe を使用した事前バインドクラスの生成 - Netplanetes
http://www.pine4.net/Memo/Article/Archives/349
- コード生成ツール (CrmSvcUtil.exe) を使用して事前バインド型エンティティ クラスを作成する
-
Entity クラス
- ハッシュテーブル
-
EntityCollection クラス
主要なメンバ- Entities
- EntityName
- ExtensionData
- Item
- MoreRecords
- PagingCookie
- TotalRecordCount
- TotalRecordCountLimitExceeded
オブジェクトや XML の階層構造で SQL を表現する。
- サンプル: Fetch と QueryExpression の間でクエリを変換する
https://msdn.microsoft.com/ja-jp/library/hh547457.aspx
-
FilterExpression
-
ConditionExpression
-
ColumnSet
-
RetrieveMultiple
-
QueryExpression
- EntityName
- ColumnSet
- Criteria
- Distinct
- LinkEntities
- Orders
- PageInfo
- TotalRecordCount
-
参考
- QueryExpression でクエリを作成する
https://msdn.microsoft.com/ja-jp/library/gg328300.aspx - サンプル: QueryExpression クラスを使用した複数取得
https://msdn.microsoft.com/ja-jp/library/gg328149.aspx
- QueryExpression でクエリを作成する
-
プロパティ
- EntityName
- ColumnSet
- Attributes
- Values
- Orders
- PageInfo
-
参考
- サンプル: QueryByAttribute クラスを使用した複数取得
https://msdn.microsoft.com/ja-jp/library/gg334708.aspx
- サンプル: QueryByAttribute クラスを使用した複数取得
-
FetchXML を使用したクエリの構築
https://msdn.microsoft.com/ja-jp/library/gg328332.aspx- Dynamics CRM でサポートされるクエリ言語。
- T-SQL の機能に似た内容をサポート。
- Dynamics CRM のセキュリティに準じた結果セットを取得できる。
- ユーザービューやシステムビューの保存や、高度な検索の実行で利用される。
- 高度な検索で利用したクエリを FetchXML として取得できる。
-
LINQ to CRM
Microsoft Dynamics CRM Online 2015 更新プログラム クエリ プロバイダー -
LINQ(.NET 統合言語クエリ)を使用してクエリを作成する
https://msdn.microsoft.com/ja-jp/library/gg328028.aspx
補足(LINQ プロバイダーの制約): CRM の LINQ プロバイダーは
内部的に QueryExpression に変換されるため、
LINQ to Objects や Entity Framework と同じ表現力はない。
結合数の上限、Unionや一部の集計が使えない等の制約があり、
複雑なクエリは FetchXML で書いた方が確実である。
- Microsoft Dynamics CRM データベース(SQL Server)を直接クエリできる。
- 設置型のみでサポートされるため、オンライン環境へ移行することができない。
- Execute メソッドに Request オブジェクトを渡す。
- Response オブジェクトを取得する。
- CreateRequest
- DeleteRequest
- RetrieveRequest
- RetrieveMultipleRequest
- UpdateRequest
- SendEmailRequest
- GenerateQuoteFromOpportunityRequest
- WhoAmIRequest
移行メモ(正誤): 元ページの「WhoAml」は、
WhoAmI(Who Am I)の
綴り誤り(Iをlと表記)と判断し、
SDK 上の型名であるWhoAmIRequestに修正した。
- Japan Dynamics CRM Team Blog - Site Home - MSDN Blogs
- Dynamics CRM 2011 カスタムレポート
- その 1 - フィルター化されたビュー vs. FetchXML
http://blogs.msdn.com/b/crmjapan/archive/2013/01/07/dynamics-crm-2011-custom-reporting-in-microsoft-dynamics-crm-fetch-vs-filtered-views.aspx - その 2 - FetchXML を利用したカスタム活動レポート
http://blogs.msdn.com/b/crmjapan/archive/2013/07/02/dynamic-activity-reporting-using-fetchxml.aspx
- その 1 - フィルター化されたビュー vs. FetchXML
- Dynamics CRM 2011 カスタムレポート
- CRM セキュリティモデルの作成
- CRM エンティティのカスタマイズ
- CRM フィールドのカスタマイズ
- CRM 関連付けの管理
- CRM フォームのカスタマイズ
- CRM 業務ルールの構成
- CRM ビューのカスタマイズ
- CRM グラフのカスタマイズ
- CRM ダッシュボードのカスタマイズ
- CRM 追加のセキュリティ オプション
- CRM 業務プロセス フロー
Tags: Dynamics CRM