################################################################################################
連絡先のインポートウィザードにカスタムコンタクトファセットを含めるように設定します
################################################################################################
リストマネージャーでは、CSVファイルから連絡先をインポートする際に、インポートしたファイルのフィールドを以下のデフォルトのSitecoreフィールドにマッピングすることができます。
* 識別子
* 識別子のソース
* メールアドレス
* ファーストネーム
* 苗字
.. image:: images/15ed64a23b09c5.png
:align: center
:width: 400px
:alt: 連絡先のインポートウィザード
インポートしたファイルフィールドをマッピングするために、追加のSitecoreフィールドが必要な場合は、連絡先のイン ポートウィザードを拡張して追加することができます。
* 定義済みコンタクトファセット - 連絡先のインポートウィザードに追加できる定義済みコンタクトファセットは以下の通りです。
* 個人情報
* 電子メールアドレスリスト
* アドレスリスト
* 電話番号リスト
* 同意情報
* リストサブスクリプション
* オートメーションプラン終了
* オートメーションプラン登録キャッシュ
* アバター
* 新しいカスタム連絡先ファセット - カスタムファセットを作成し、モデル構成を更新して連絡先のインポートウィザードに含めることができます。
***********************************************************
定義済みのファセットをマッピングフィールドとして追加する
***********************************************************
リスト マネージャには、定義済みの連絡先マッピング フィールドのリストがあります。連絡先のインポート ウィザードを拡張するには、コア データベースでブランチを使用して、利用可能なマッピング フィールドの 1 つを追加します。
定義済みのマッピング フィールドを追加するには
1. Core データベースのコンテンツ エディタで、/sitecore/client/Applications/List Manager/Dialogs/ImportWizardDialog/PageSettings/TabControl Parameters/Map/ImportModel フォルダに移動します。
2. ImportModelフォルダを右クリックし、[挿入]をクリックしてから、事前に定義された連絡先マッピングフィールドの1つをクリックします。
.. image:: images/15ed64a23b6916.png
:align: center
:width: 400px
:alt: 定義済みのファセットをマッピングフィールドとして追加する
***********************************************************
マッピングフィールドとして新しいファセットを追加する
***********************************************************
連絡先のインポートウィザードを拡張して、定義済みのファセットをSitecoreマッピングフィールドとして表示するには、コンテンツエディタで定義済みのファセットのインポートモデルフィールドを新規に作成します。
新しいファセットをマッピングフィールドとして追加するには、以下の手順に従います。
1. Coreデータベースで、Content Editorで、/sitecore/client/Applications/List Manager/Dialogs/ImportWizardDialog/PageSettings/TabControl Parameters/Map/ImportModel フォルダに移動します。
2. /sitecore/client/Applications/List Manager/Templates/ImportModelField テンプレートに基づいて、新しいImportモデルフィールドアイテムを作成します。これを行うには、ImportModelフォルダ内で、既存のアイテムの1つを複製します。
3. 新しいアイテムを変更するには、FieldNameフィールドで、Import contactsウィザードで表示するSitecoreマッピングフィールドの名前を指定します。
4. DataField フィールドでは、インポートされた値を格納する場所の xConnect ファセット プロパティを認識するために Facet Mapper が使用するキーを指定します。例えば、Personal_Suffix という名前を付け、後でこのキーを使用して Personal ファセットの Suffix フィールドを埋めるようにします。
.. image:: images/15ed64a23bb203.png
:align: center
:width: 400px
:alt: マッピングフィールドとして新しいファセットを追加する
必須フィールドは、連絡先のインポート ウィザードのマップ タブでフィールド マッピングを指定する必要があるかどうかを指定します。これはUIの検証のみです。マッピングフィールドを必須フィールドとしてマークしたい場合は、Sitecore.ListManagement.Import.RequiredFieldsの設定で、Sitecore.ListManagement.Configファイルの必須フィールドのリストにマッピングフィールドを追加する必要があります。
.. code-block:: xml
.. note:: インポート中、必須フィールドが空の場合、インポート ファイルからの行全体がスキップされます。リスト マネージャのデフォルトの必須フィールドは以下の通りです。識別子、電子メール、姓、名。
***************************************
既存のインポートマッパーを拡張する
***************************************
リストマネージャは、デフォルトのファセットマッパーの範囲を提供していますが、必要に応じて、これらのファセットマッパーを拡張することができます。例えば、EmailAddressList ファセットには、Others と呼ばれる電子メールの高度な辞書が含まれています。
次の例では、既存の PreferredEmailMapper クラスを装飾して、個人用および仕事用の電子メールを EmailAddressList.Others 辞書に追加できるようにしています。
既存のImportマッパーを拡張するには
1. 既存の PreferredEmailFacetMapper クラスを装飾するために、ExtendedEmailFacetMapperSample クラスを作成して実装します。
.. code-block:: c#
public class ExtendedEmailFacetMapperSample : IFacetMapper
{
private readonly PreferredEmailFacetMapper mapper;
// Decorate the existing PreferredEmailMapper
public ExtendedEmailFacetMapperSample(
PreferredEmailFacetMapper mapper)
{
this.mapper = mapper;
}
public MappingResult Map(
string facetKey,
Facet facet,
ContactMappingInfo mappings,
string[] data)
{
// Call the existing email mapper to map all the basic email fields
var result = this.mapper.Map(facetKey, facet, mappings, data);
var facetMappedResult = result as FacetMapped;
if (facetMappedResult == null)
{
return result;
}
var partiallyMappedFacet = facetMappedResult.Facet as EmailAddressList;
if (partiallyMappedFacet == null)
{
return result;
}
// Set Personal email
var personalEmail = mappings.GetValue("Emails_Others_Personal", data);
if (!string.IsNullOrWhiteSpace(personalEmail))
{
partiallyMappedFacet.Others["Personal"] = new EmailAddress(personalEmail, false);
}
// Set Work email
var workEmail = mappings.GetValue("Emails_Others_Work", data);
if (!string.IsNullOrWhiteSpace(workEmail))
{
partiallyMappedFacet.Others["Work"] = new EmailAddress(workEmail, false);
}
return result;
}
}
2. Sitecore.ListManagement.config ファイルの sitecore/import/facetMapper セクションにファセットマッパーを登録します。
.. code-block:: xml
****************************************
新しいインポートマッパーを作成します
****************************************
既存のインポートマッパーを使用できない場合は、カスタムのインポートマッパー、例えば PreferredAddressFacetMapper を作成することができます。
新しいインポートマッパーを作成するには
1. Sitecore.ListManagement.XConnect.Web.Import.IFacetMapperSitecore.ListManagement.Import.IFacetMapper を実装した新しい PreferredAddressFacetMapper を作成します。
.. code-block:: c#
public class PreferredAddressFacetMapper : IFacetMapper
{
public PreferredAddressFacetMapper()
: this(CollectionModel.FacetKeys.AddressList)
{
}
public PreferredAddressFacetMapper(string facetName)
{
Assert.ArgumentNotNull(facetName, nameof(facetName));
this.FacetName = facetName;
}
public string FacetName { get; }
public MappingResult Map(
string facetKey,
Facet source,
ContactMappingInfo mappings,
string[] data)
{
if (facetKey != this.FacetName)
{
return new NoMatch();
}
var preferredAddress = new Address();
var addressLine1 = mappings.GetValue(nameof(preferredAddress.AddressLine1), data);
var addressLine2 = mappings.GetValue(nameof(preferredAddress.AddressLine2), data);
var addressLine3 = mappings.GetValue(nameof(preferredAddress.AddressLine3), data);
var addressLine4 = mappings.GetValue(nameof(preferredAddress.AddressLine4), data);
var city = mappings.GetValue(nameof(preferredAddress.City), data);
var country = mappings.GetValue(nameof(preferredAddress.CountryCode), data);
var postalCode = mappings.GetValue(nameof(preferredAddress.PostalCode), data);
var stateProvince = mappings.GetValue(nameof(preferredAddress.StateOrProvince), data);
if (!string.IsNullOrWhiteSpace(addressLine1)) { preferredAddress.AddressLine1 = addressLine1; }
if (!string.IsNullOrWhiteSpace(addressLine2)) { preferredAddress.AddressLine2 = addressLine1; }
if (!string.IsNullOrWhiteSpace(addressLine3)) { preferredAddress.AddressLine3 = addressLine1; }
if (!string.IsNullOrWhiteSpace(addressLine4)) { preferredAddress.AddressLine4 = addressLine1; }
if (!string.IsNullOrWhiteSpace(city)) { preferredAddress.City = city; }
if (!string.IsNullOrWhiteSpace(country)) { preferredAddress.CountryCode = country; }
if (!string.IsNullOrWhiteSpace(postalCode)) { preferredAddress.PostalCode = postalCode; }
if (!string.IsNullOrWhiteSpace(stateProvince)) { preferredAddress.StateOrProvince = stateProvince; }
var facet = source as AddressList ?? new AddressList(preferredAddress, "Preferred");
return new FacetMapped(facetKey, facet);
}
}
2. Sitecore.ListManagement.config ファイルの sitecore/import/facetMapper セクションで、マッパーを登録します。
.. code-block:: xml
3. Sitecore.ListManagement.configファイルにAddressesファセット名を追加して、マッピング先のファセットリストを拡張します。
.. code-block:: xml
.. note::
この例では、コンテンツ・エディタの DataField セクションの PreferredAddressFacetMapper アイテムには、AddressList ファセットのプロパティの 1 つに関連するキー、例えば、City、AddressLine1、CountryCode などが含まれている必要があります。
.. tip:: 英語版 https://doc.sitecore.com/users/93/sitecore-experience-platform/en/configure-the-import-contacts-wizard-to-include-custom-contact-facets.html