[[Open棟梁Project>http://opentouryo.osscons.jp/]] - [[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]

-[[戻る>Dynamicsのカスタマイズ]]

* 目次 [#g3778851]
#contents

*概要 [#be1bd860]
-マーケティング・モジュール
-営業モジュール
-サービス・モジュール 

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

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

*構成 [#x323f671]
カスタマイズは

-[[ソリューション コンポーネント>#cb6cf5ad]]
-[[外部コンポーネント>#o57e5a1d]]

から構成される。

*方法 [#r91122d1]
カスタマイズの方法には

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

-外部アプリケーション
-レポート サービス
--フィルター ビュー
--Webサービス
---SDKによるプラグイン開発

などがある。

-アドオン
--[[.NET>.NET開発]]
--[[ADO.NET]]
--[[WCF]]
--[[WF]]
--T-SQL

-Webコンテンツ
--JavaScript
--HTML
--[[Silverlight]]

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

-サポートされる Microsoft Dynamics CRM の拡張機能~
https://msdn.microsoft.com/ja-jp/library/gg328350.aspx

**ポイント アンド クリック [#x21f60d4]
設計情報の入力I/Fに専用ツール(デザイナ型)を採用し、GUIツールだけで変更可能

***手法 [#q36ff5e0]
GUIツールだけで変更可能な手法
-Web アプリケーション
--設定
--カスタマイズ ツール

***対象 [#d99222be]
-[[エンティティ>#v7cf2804]]
--[[下位コンポーネント>#kae3c146]]
---[[フィールド>#e88ddc32]]
---[[フォーム>#cfef2139]]
---[[ビュー>#y55bd4a1]]
---[[グラフ>#tdb7f377]]

**JavaScript [#t32abf6c]
***手法 [#oacaedd6]
-JavaScript
-Web アプリケーションの設定

***対象 [#f9955ec3]
-フォーム スクリプト イベント ハンドラー~
フォーム イベント ハンドラーが JavaScript Web リソースで定義された関数を呼び出すように構成する。

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

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

**プラグイン [#ybca4a58]
-ビジネス ロジックのプラグイン メカニズム。
-Dynamics CRM SDK、Visual Studio、Excel等の開発ツールを併用する必要がある。
-設置型、IFD、およびOnline(分離モード) の Microsoft Dynamics CRM 展開で使用可能。

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

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

***手法 [#f4a66a75]
-Microsoft Dynamics CRM SDK 
-Web アプリケーションの設定

***種類 [#u83fe2e1]

-同期・非同期
--同期ビジネスロジック・プラグイン~
(イベント実行・パイプライン)
---プレイベント・プラグイン
---プラットフォーム・コア操作プラグイン
---ポストイベント・プラグイン

--非同期ビジネスロジック・プラグイン
---ユーザ定義プラグイン
---カスタムワークフロー・プラグイン

-イベント実行パイプライン~
https://msdn.microsoft.com/ja-jp/library/gg327941.aspx

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

**WCF Webサービスの使用 [#lfd40f04]
***手法 [#g4ba5764]
Webサービスを使用した外部アプリケーションの開発

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

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

-Organization Data Service
--OData エンドポイント

-DeploymentService

***対象 [#r7a90249]
Webサービスを使用した

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

**データ アクセス [#o27ef818]

***手法 [#i9396aba]
-Microsoft Dynamics CRM SDKを使用し、~
Web サービス経由でデータ アクセス

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

-ビュー経由でデータ アクセス
--フィルターされたビュー(Filtered views)

***対象 [#i50b5597]
データ アクセスする、
-外部アプリケーション
-レポート サービス
-Webサービス
-プラグイン

**セキュリティ [#a097d1f6]
***ロールベース セキュリティ [#cb0a405c]
-特権
-アクセス レベル

***オブジェクトベースのセキュリティ [#vc86fed0]
-レコードベースのセキュリティ
-フィールドベースのセキュリティ

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

***認証方法 [#w3d46257]

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

*ソリューション [#g27fd4e3]

**概要 [#rc6f1531]
-[[ソリューション コンポーネント>#cb6cf5ad]]をグループ化したもの。

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

-一連のカスタマイズ([[ソリューション コンポーネント>#cb6cf5ad]])をパッケージ化。
-一部のユーザー or 全てのユーザーに必要となる機能を提供する。

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

**利点 [#xbf01385]
-他のコンポーネントに気を取られること無く、~
必要なコンポーネントのみに取り組むことができる。

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

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

**構成 [#ff24d2ea]
-ソリューションの概要~
https://msdn.microsoft.com/ja-jp/library/Gg334576.aspx

***システム ソリューション [#gc84622f]
-Microsoft Dynamics CRM 内に定義された既定のソリューション コンポーネント
-組織作成時に作成され、システムの全コンポーネントを含んでいる。
-既定のアプリケーションの動作を定義している。

-既定のソリューションは、
--エクスポート・インポートが可能だが、
--マネージド ソリューションとしてのエクスポートが不可能。
--全体を[[Dynamics CRM Online]]に展開することが不可能。

-システムが複雑化すると、既定のソリューションを使用した方法では対応が困難になる。~
このため、カスタム ソリューションを使用して、コンポーネントを分割する。

***マネージド ソリューション [#q56e227d]
-主に、ISVがアドオンを顧客に販売するような配布のケースで使用する。

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

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

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

***アンマネージド ソリューション [#wfd44e9f]
-配布を目的としない、展開で使用。
--開発中のソリューション展開
--社内的な変更の展開

-アンマネージド カスタマイズをグループ化したもの。

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

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

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

-始め、開発のためのアンマネージド ソリューションを作成する。
-開発中のアンマネージド カスタマイズの実体は、すべて既定のソリューションに含まれる。
-アンマネージド ソリューションは、アンマネージド カスタマイズの参照のみ保持する。

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

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

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

***手順 [#b17bd4a1]
-ナビゲーション バーの[Microsoft Dynamics CRM]の[設定]、[ソリューション]、[新規]。
-[新しいソリューション]フォームが表示される。

-必要事項を入力し保存。
--表示名:ソリューションの呼称(変更可能)
--名前:英数字のみ(変更不可能)

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

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

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

--構成ページ

--バージョン:バージョン番号(数字のみ)
---メジャー.マイナー.ビルド.リビジョン
---推奨:年.月.日.リビジョン

--説明:ソリューションの機能の概要(2,000文字)

-エクスポート時のファイル名~
"名前"+"バージョン"

**複数ソリューションの用例 [#e4505cdb]
***開発 [#j40e4373]
複数のカスタマイザーによるカスタマイズ

-利点
--並行作業
--開発、マージ、テスト

-欠点
--競合の類の検出の遅延。

***バージョン [#t28d8a73]
完了した作業に新しい要件が追加された時。

-以下の場合は旧ソリューションに変更を行う。
--バグ修正(リビジョン・アップ)

-以下の場合は新ソリューションに、新コンポーネント追加を行う。
--当該ソリューションへの更新が枯れている場合

**エクスポート・インポート [#i9e9548d]
***エクスポート [#se1d5735]

-ZIP形式でのエクスポート~
以下が同梱されている。
--XML
--DLL
--XAML
--画像ファイル

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

***インポート [#q7ab7315]
-バージョン番号で管理されている。
--インポート元の方がバージョン番号が大きい場合はインポート不可能。

-コンポーネントを含まないソリューションをインポートしてもコンポーネントは削除されない。

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

*ソリューション コンポーネント [#cb6cf5ad]
カスタマイズ ツールまたは API を使用して作成され、アプリケーション内で完全にホストされる。

**種類 [#sdfb9efd]
***スキーマ [#x91cdfa4]
-[[エンティティ>#v7cf2804]]
--フィールド
--フォーム
--ビュー
--グラフ

-関連付け
-接続とつながりロール

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


***ユーザインターフェイス [#oabd80a4]
-アプリケーション リボン
-サイトマップ
-フォーム
-エンティティ リボン
-Webリソース

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

***プロセス/コード [#ped8aa8f]
-プロセス
--ダイアログとワークフロー
-プラグイン
--アセンブリ
--処理手順

***テンプレート [#rba84b8e]
-差し込み印刷
-電子メール
-契約
-記事

***セキュリティ [#o70a626f]
-セキュリティ ロール
-フィード レベルのセキュリティ プロファイル

***データ レコード [#hc07537e]
-データ レコード
--ユーザ
--チーム、部署
--キュー
--目標
--情報カテゴリの階層
--製品カタログに関連したもの

-データレコードを使用したソリューション コンポーネント
--ビュー
--レポート
--カスタム コード

-信頼性を担保する方法。
--データインポートウィザードを使用する。
--インポートフィアルにレコードのGUIDを含める。

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

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

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

**新規作成 [#b8cf8b40]
-ソリューション コンポーネントの追加~
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

***ロール [#w2f87354]
同上

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

*エンティティ [#v7cf2804]

**下位コンポーネント [#kae3c146]

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

***[[フィールド>#n8544fb0]] [#e88ddc32]
-エンティティのプロパティ
-DBやビューの列に対応
-フォームのInput, Output, Editフィールドに対応するコントロール

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

***[[ビュー>#d2b182f1]] [#y55bd4a1]
-所謂ビューだが、SQLを使用していない。
-格納先:SavedView

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

**エンティティの種類 [#babcc518]

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

***[[カスタム エンティティ>CRM エンティティのカスタマイズ]] [#g138a27f]
-カスタマイズで追加したエンティティ。
-関連付けなどの依存関係を削除した後に削除可能。

**依存関係 [#nc08e30d]
***依存関係の例 [#s699405d]
-サブコンポーネント
-関連付け
-接続とつながりロール

-利用?
--ダッシュボードにグラフを含める等。

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

**エンティティとDBMSスキーマ [#wb5d458b]
-フィルター ビューによりエンティティが提供される。

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

-必要なデータは外部キーを使用して結合される。

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

*データ アクセス [#lca67058]

**概要 [#k73ae132]
DBテーブルにアクセスする方法

**アクセス方法 [#o10b4c43]
***Microsoft Dynamics CRM SDKを使用 [#bed7f545]

-エンティティ
--Execute メソッド

-クエリを使用してデータを取得する~
https://msdn.microsoft.com/ja-jp/library/gg334607.aspx
--QueryExpression
--QueryByAttribute
--FetchXML
--LINQ クエリ

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

**制限事項(Dynamics CRM Onlineで) [#lf63e3ee]
***利用できない [#d1bff232]
SQLとして実行されるため、~

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

***利用できる [#m0567c50]
Web サービス経由でクエリが実行されるため。

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

**エンティティ [#hc5f6da7]
-Create メソッド
-Retrieve メソッド
-Update メソッド
-Delete メソッド
-RetrieveMultipleMethod メソッド

***事前バインディング [#o54c745d]
参照設定ではなく、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

***遅延バインディング [#db7bb6be]
-Entityクラス
--ハッシュテーブル

-EntityCollectionクラス~
主要なメンバ
--Entities
--EntityName
--ExtensionData
--Item
--MoreRecords
--PagingCookie
--TotalRecordCount
--TotalRecordCountLimitExceeded

**FetchXML、QueryExpression、QueryByAttribute [#b63e6439]
オブジェクトやXMLの階層構造でSQLを表現する。

-サンプル: Fetch と QueryExpression の間でクエリを変換する~
https://msdn.microsoft.com/ja-jp/library/hh547457.aspx

***QueryExpression [#h041bf5e]
-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

***QueryByAttribute [#eb6323a4]
-プロパティ
--EntityName
--ColumnSet
--Attributes
--Values
--Orders
--PageInfo

-参考
--サンプル: QueryByAttribute クラスを使用した複数取得~
https://msdn.microsoft.com/ja-jp/library/gg334708.aspx

***FetchXML [#cf8619e5]
-FetchXML を使用したクエリの構築~
https://msdn.microsoft.com/ja-jp/library/gg328332.aspx

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

**[[LINQ]] [#v3640c04]

-[[LINQ]] to CRM~
Microsoft Dynamics CRM Online 2015 更新プログラム クエリ プロバイダー

-[[LINQ]] (.NET 統合言語クエリ) を使用してクエリを作成する~
https://msdn.microsoft.com/ja-jp/library/gg328028.aspx

**フィルターされたビュー(Filtered views) [#k550a733]
-Microsoft Dynamics CRM データベース(SQL Server)を直接クエリできる。
-設置型のみでサポートされるため、オンライン環境へ移行することができない。

**Execute メソッド [#r0fd728c]
-Execute メソッドにRequestオブジェクトを渡す。
-Responseオブジェクトを取得する。

***エンティティ共通のRequest [#mc9c62d3]
-CreateRequest
-DeleteRequest
-RetrieveRequest
-RetrieveMultipleRequest
-UpdateRequest

***エンティティ固有のRequest [#f10244a2]
-SendEmailRequest
-GenerateQuoteFromOpportunityRequest

***汎用のRequest [#i0e31d47]
WhoAml

**参考 [#c343dfcd]

-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

*[[CRM セキュリティモデルの作成]] [#td5e52c1]
*[[CRM エンティティのカスタマイズ]] [#w034200d]
*[[CRM フィールドのカスタマイズ]] [#n8544fb0]
*[[CRM 関連付けの管理]] [#hf9ff03d]
*[[CRM フォームのカスタマイズ]] [#vb691813]
*[[CRM 業務ルールの構成]] [#jea0bdd5]
*[[CRM ビューのカスタマイズ]] [#d2b182f1]
*[[CRM グラフのカスタマイズ]] [#h33d89ea]
*[[CRM ダッシュボードのカスタマイズ]] [#h33d89ea]
*[[CRM 追加のセキュリティ オプション]] [#i7bacd93]
*[[CRM 業務プロセス フロー]] [#d91d3743]

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS