[Sitecore Integration] CRM Security Provider をインストールするの記事で、 Sitecore に CRM Security Provider をインストールしました。今回は、インストールした CRM Security Provider を設定してみます。

検証環境

  • Windows Server 2012 上に Dynamics CRM 2011, Sitecore CMS 6.6 がインストールされた環境
  • CRM Security Provider の version - Microsoft Dynamics CRM Security Provider 2.0.0 rev. 130731

CRM Security Provider の構成の詳細についてはSDNの以下のドキュメントを参照してください。

Dynamics CRM Security Provider Module Guide
http://sdn.sitecore.net/Products/Dynamics%20CRM%20Campaign%20Integration/DCRMCI20/Documentation.aspx

CRM Security Provider を構成することで contact エンティティ (取引先担当者) を Sitecore のユーザーとして統合できるようになります。また、 list エンティティ(マーケティング リスト) をサイトコアのロールとして統合することができるようになります。

1. CRM Security Providerを設定する

1.1 接続文字列の設定

最初にCRMと連携するための接続文字列を設定します。接続文字列は Dynamics CRM のインストール環境(On Premise, IFD, Online)によって異なります。今回は OnPremise 環境にインストールされた CRM するので次のような文字列を設定しました。展開の種類に応じた適切な接続文字列は SDN のドキュメントを参照してください。

<add name="CRMConnString" connectionString="CRM:url=http://crm-w2k12:5555/dyn2/XRMServices/2011/Organization.svc;user id=SCCRM\XXXXX;password=AAAAA;organization=dyn2;authentication type=0"/>

上記接続文字列の設定では、 連携するCRM(http://crm-2k12:5555)上の組織はdyn2、連携するCRM上のユーザーは SCCRM\XXXX, パスワードは AAAAA としていますが、環境に応じて適切な文字列を設定してください。

接続文字列の名前は CRMConnString としています。CRM 統合モジュールで使用する接続文字列の既定値はCRMConnString なので CRMConnString にしておくのが無難です。

CRMConnString 以外の接続文字列の名前の場合は、 crm.config の次の要素の値を変更してください。
<setting name="Crm.ConnectionStringName" value="CRMConnString" />

1.2 ドメインの追加

/App_Config/Security/Domain.config.xml に CRM Security Provider 用のドメインを追加します。今回は crm という名前でドメインを追加しました。

<domain name="crm" ensureAnonymousUser="false" defaultProfileItemID="{DDEDA46F-169B-4A70-8732-DBD3F407AF2E}"/>

1.3 Switching プロバイダ設定の変更

CRM Security Provider では CRMの contact, list エンティティと統合するために Membership Provider, Role Provider,  Profile Provider が提供されます。各プロバイダーの設定を行っていきます。

Web.config を編集していきます。system.web要素 配下の membership 要素配下の name="sitecore" となっているMembershipProviderの定義の realProvider を sql から switcher に変更します。

<add name="sitecore" type="Sitecore.Security.SitecoreMembershipProvider, Sitecore.Kernel" realProviderName="sql" providerWildcard="%" raiseEvents="true"/>

を次のように変更します。

<add name="sitecore" type="Sitecore.Security.SitecoreMembershipProvider, Sitecore.Kernel" realProviderName="switcher" providerWildcard="%" raiseEvents="true"/>

同じく system.web 要素配下の roleManager 要素配下のname="sitecore" となっているロールプロバイダ定義の realProvider を sql から switcher に変更します。

<add name="sitecore" type="Sitecore.Security.SitecoreRoleProvider, Sitecore.Kernel" realProviderName="sql" raiseEvents="true"/>

を次のように変更します。

<add name="sitecore" type="Sitecore.Security.SitecoreRoleProvider, Sitecore.Kernel" realProviderName="switcher" raiseEvents="true"/>

system.web 要素配下の profile 要素のdefaultProvider をsqlからswitcherに変更します。

<profile defaultProvider="sql" enabled="true" inherits="Sitecore.Security.UserProfile, Sitecore.Kernel">

を次のように変更します。

<profile defaultProvider="switcher" enabled="true" inherits="Sitecore.Security.UserProfile, Sitecore.Kernel">

以上でドメインごとにプロバイダーを変更できるように  プロバイダーをswitcher に切り替える設定を行いました。

今度は Switching プロバイダーの設定を行います。

Web.config の sitecore/switchingProviders/membership 要素に次の要素を追加します。今回は crm というドメインをCRM連携用のドメインに追加したので、crmという名前のドメインに対して crmという名前のメンバシッププロバイダを使用する設定を追加しました。crmという名前のメンバシッププロバイダの追加は後で行います。

<provider providerName="crm" storeFullNames="false" wildcard="%" domains="crm" />

同じく、sitecore/switchingProviders/roleManager 要素に次の要素を追加します。CRMという名前でCRM連携用のドメインを追加したので、crmというドメインように crmという名前のロールプロバイダを使用するように設定しています。crmという名前のロールプロバイダー定義はあとで作成します。

<provider providerName="crm" storeFullNames="false" wildcard="%" domains="crm" />

最後に、 sitecore/switchingProviders/profile  要素に次の要素を追加します。profileに関しては providerName="sql" となっているprovider要素よりに追加する必要があります。同じくcrmという名前のドメインのときに、後で追加するcrmという名前のプロファイルプロバイダーを使用する設定を追加しています。

<provider providerName="crm" storeFullNames="false" wildcard="%" domains="crm" />

1.4. CRM統合用の Membership, Role, Profiler プロバイダーを追加

SwitchingProvider の設定まで行いました。あとは、CRM連携用の Membership, Role, Profiler プロバイダーの定義を行います。

Web.config の system.web要素配下の membership 要素にMembership Provider の定義を追加します。

<add name="crm" type="CRMSecurityProvider.CRMMembershipProvider, CRMSecurityProvider"
     readOnly="false" connectionStringName="CRMConnString" applicationName="sitecore"
     minRequiredPasswordLength="1" minRequiredNonalphanumericCharacters="0"
     passwordStrengthRegularExpression=".*" requiresUniqueEmail="false"
     passwordFieldName="new_sitecorepassword" autoCreatePasswordField="false"
/>

それぞれの属性の意味は SDNのドキュメントを参照してください。connectionStringName は ConnectionStrings.config で定義したDynamics CRM接続用の接続文字列の名前になります。passwordFieldName は パスワードを保存する contact エンティティのフィールド名です。パスワードを保存しないようにするには passwordFieldNameをブランクにします。この場合contactエンティティのユーザーはログインに使用することができなくなります。

今度は、system.web要素 配下の roleManager にCRM連携用のロールプロバイダ定義を追加します。属性の意味は CRMMembershipProvider の定義で使用したものと同じです。

<add name="crm" type="CRMSecurityProvider.CRMRoleProvider, CRMSecurityProvider" 
           connectionStringName="CRMConnString" readOnly="false"/>

最後にプロファイルプロバイダーの定義をsystem.web配下の profile 要素に追加します。

<add name="crm" type="CRMSecurityProvider.CRMProfileProvider, CRMSecurityProvider"
     connectionStringName="CRMConnString" readOnly="false"/>

プロファイルプロバイダーの定義を追加した後、連携するプロパティの定義を追加します。system.web の profile/properties 要素配下に次の要素を追加します。

<add type="System.String" name="Country" customProviderData="crm|address1_country"/>
<add type="System.String" name="City" customProviderData="crm|address1_city"/>
<add type="System.String" name="BirthDate" customProviderData="crm|birthdate"/>
<add type="System.String" name="DoNotEmail" customProviderData="crm|donotemail"/>

連携するプロパティを増やしたい場合 SDNのドキュメントの Adding a Profile Property, Extending the Sitecore Profile Item Template を参照してください。

1.5 その他の設定

contact entity のレコードを一意に特定するために使用するユニークキーのフィールドが emailaddress1 以外の場合は App_Config/Include/crm.config の Crm.UniqueKeyProperty を変更してください。

CRM Security Provider の ログレベルやキャッシュの設定に関しては 冒頭で紹介したSDNのドキュメントの 2.2.7 Other Settingsを参照してください。CRM Security Provider のパフォーマンスを確認したい場合はSDNのドキュメントDynamics CRM Security Provider Module Guideの  2.2.8 Configuring Module to Collect Performance Statistics を参照してください。ドキュメントに従って構成をしていただき、/sitecore/admin/CRMProviderProfiler.aspx にアクセスすると CRM Security Provider のパフォーマンスプロファイルを確認できます。

1.6 パスワードフィールドをcontact エンティティに追加

CRM連携用のプロバイダ定義の passwordFieldName で指定した 取引先担当者エンティティのパスワード用のフィールドが未作成の場合は、 Dynamics CRM 上で フィールドを作成します。

作成するには、 Dynamics CRM にログインしてソリューションを作成します。ソリューションに contact (取引先担当者) エンティティを含めtえ、下図のように passwordFieldName で指定した名前の 1行テキストのフィールドを追加します。本例では new_sitecorepassword というフィールドにパスワードを保存するため、下図のように new_sitecorepassword というフィールドを作成しました。

フィールドを作成した後、 ソリューションのダイアログ上部の すべてのカスタマイズの公開 ボタンをクリックして、カスタマイズの公開を忘れずに行ってください。

以上で CRM 連携用の Security Provider の準備が行えました。

2. 動作確認

Security Provider の構成を行って、コンタクトエンティティとマーケティングリストエンティティのレコードをそれぞれサイトコアのユーザー、ロールとして統合できるようになりました。実際にDynamics CRM上で下図のようなテスト連携用の取引先エンティティのレコードを作成してみます。このとき忘れずに電子メールフィールドを入力してください。ユニークキーとして指定したフィールドがブランク(NULL)の場合、そのレコードはサイトコアと連携できません。

サイトコアデスクトップにログインしてユーザーマネージャーを起動すると、下図のように Dynamics CRM のコンタクトエンティティのレコードが連携されてユーザーとして表示されることが確認できます。ログインアカウントは一意のフィールドに指定したフィールドの値になります。取引先担当者のレコードを選択して、パスワード変更コマンドからパスワードを設定し、ユーザーをsitecore\Author ロールのメンバーなどにすることでサイトコアのユーザーインタフェースにログインさせることもできます。

実際には contact のユーザーがサイトコアコンテンツ編集環境のユーザーになるのではなく、例えばカスタマーポータルサイトのユーザーアカウントとして使用していくことが想定されます。もしくはECMモジュールからキャンペーンメールを送信対象のユーザーとして使用します。

サイトコアユーザーインタフェースにログインする場合は、サイトコアユーザーインタフェースへのログイン画面で ドメイン名付きのアカウント(本例の場合は crm) とパスワードを入力してログオンボタンをクリックします。

今度はロールの連携を確認します。テスト用にマーケティングリストを作成してみます。TestMarkethingListというレコードを作成しました(綴りがおかしいのは無視してください)。現在サポートされているのは静的なマーケティングリストです。メンバーの種類は contact (取引先担当者) entitye になります。

マーケティングリストのメンバーには テスト コンタクト という コンタクトレコードを含めておきます。

この状態で、サイトコアデスクトップにログオンし、ロールマネージャーを起動します。ロールマネージャーをみると、 TestMarketingList というマーケティングリストのエンティティがロールとして一覧に表示されていることが確認できます。

連携された crm\TestMarkethingList ロールのメンバーを見ると コンタクトエンティティのレコードが連携されて表示される。

マーケティングリストもサイトコアユーザーインタフェースを使うユーザーの管理というより、カスタマーポータルでの権限制御やECMのキャンペーンメール送信先の一覧を管理するために使用されます。

3.まとめ

説明は以上です。 誤り、間違いなどがありましたらご指摘ください。

CRM Security  Provider を構成することで Dynamics CRMのコンタクトとマーケティングリストをそれぞれ サイトコアのユーザーとロールとして統合することができるようになります。