カスタム コンタクト ファセットを含めるように [コンタクトをインポートする] ウィザードを設定する

概要

CSV ファイルからのカスタム コンタクト データのインポートを設定します。

リスト マネージャーでは、CSV ファイルからコンタクトをインポートするときに、インポートしたファイルのフィールドを次のデフォルトの Sitecore フィールドにマッピングできます。

  • 識別子

  • 識別子ソース

  • メール アドレス

Configure_the_Import_Wizard_to_include_custom_contact_facets-Picture_1-rId9-1362955973.png

インポートされたファイル フィールドをマッピングするために追加の Sitecore フィールドが必要な場合は、[コンタクトをインポートする] ウィザードを拡張して次のものを含めることができます。

  • 事前定義されたコンタクト ファセット – [コンタクトをインポートする] ウィザードに追加できる利用可能な事前定義されたコンタクト ファセットは次のとおりです。

    • PersonalInformation

    • EmailAddressList

    • AddressList

    • PhoneNumberList

    • ConsentInformation

    • ListSubscriptions

    • AutomationPlanExit

    • AutomationPlanEnrollmentCache

    • Avatar

  • 新しいカスタム コンタクト ファセット - カスタム ファセットを作成し、次にモデル構成を更新して [コンタクトをインポートする] ウィザードに含めることができます。

リスト マネージャーは、事前定義されたコンタクト マッピング フィールドのリストを提供します。[コンタクトをインポートする] ウィザードを拡張するには、Core database でブランチを使用し、使用可能なマッピング フィールドの 1 つを追加します。

次の手順で、事前定義されたマッピング フィールドを追加します。

  1. Core database のコンテンツ エディターで、[/サイトコア/クライアント/アプリケーション/リスト マネージャー/ダイアログ/インポート ウィザード ダイアログ/ページ設定/タブ コントロール パラメーター/マッピング/インポート モデル] フォルダーに移動します。

  2. ImportModel フォルダーを右クリックして [挿入] をクリックし、次に事前定義されたコンタクト マッピング フィールドの 1 つをクリックします。

    Configure_the_Import_Wizard_to_include_custom_contact_facets-Picture_2-rId11-927383026.png

[コンタクトをインポートする] ウィザードを拡張して事前定義されたファセットを Sitecore マッピング フィールドとして表示するには、コンテンツ エディターで事前定義されたファセットの新しいインポート モデル フィールドを作成します。

次の手順で、新しいファセットをマッピング フィールドとして追加します。

  1. Core database のコンテンツ エディターで、[/サイトコア/クライアント/アプリケーション/リスト マネージャー/ダイアログ/インポート ウィザード ダイアログ/ページ設定/タブ コントロール パラメーター/マッピング/インポート モデル] フォルダーに移動します。

  2. 新しいインポート モデル フィールド アイテムを [/サイトコア/クライアント/アプリケーション/リスト マネージャー/テンプレート/インポート モデル フィールド] に基づいて作成します。これを行うには、ImportModel フォルダで既存アイテムの 1 つを複製します。

  3. 新しいアイテムを変更するには、[フィールド名] フィールドに [コンタクトをインポートする] ウィザードで表示する Sitecore マッピング フィールドの名前を指定します。

  4. [データ フィールド] に、ファセット マッパーがインポートされた値を格納する xConnect ファセット プロパティを認識するために使用するキーを指定します。たとえば、Personal_Suffix という名前を付け、後でこのキーを使用してパーソナル ファセットの [サフィックス] フィールドに入力します。

    Configure_the_Import_Wizard_to_include_custom_contact_facets-Picture_6-rId12-1977402909.png

    [必須フィールド] には、フィールド マッピングを [コンタクトをインポートする] ウィザードの [マッピング] タブで指定する必要があるかどうかを指定します。これは UI 検証のみです。マッピング フィールドを必須としてマークする場合は、マッピング フィールドを Sitecore.ListManagement.config ファイルの ListManagement.Import.RequiredFields 設定で、必須フィールドのリストに追加する必要もあります。

    <!-- REQUIRED MAPPING FIELDS
    The list of the required mapping fields. If at least one of these fields is missing in a CSV file or is not mapped properly, the entire contact is skipped and not imported. Please note that the field names below should correspond to the Import Dialog mapping fields configured in the 'core' database (you may use predefined Branches to add new mapping fields):'/sitecore/client/Applications/List Manager/Dialogs/ImportWizardDialog/PageSettings/TabControl Parameters/Map/ImportModel'-->
    <setting name="ListManagement.Import.RequiredFields" value="Identifier|PreferredEmail_SmtpAddress|Personal_FirstName|Personal_LastName" />
    

注記

インポート中、必須フィールドが空の場合は、インポート ファイルの行全体がスキップされます。リスト マネージャーのデフォルトの必須フィールドには [コンタクト ID]、[メール]、[]、[] があります。

リスト マネージャーではさまざまなデフォルトのファセット マッパーが提供されますが、必要に応じてこれらのファセット マッパーを拡張できます。たとえば、EmailAddressList ファセットには Others というメールの高度な辞書が含まれています。

次のコード サンプルでは、既存の PreferredEmailMapper クラスを装飾し、個人用と仕事用のメールを EmailAddressList.Others 辞書に追加することができます。

次の手順で、既存のインポート マッパーを拡張します。

  1. ExtendedEmailFacetMapperSample クラスを作成して実装し、既存の PreferredEmailFacetMapper クラスを装飾します。

    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 セクションでファセット マッパーを登録します。

    <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
      <sitecore>
        <import>
          <facetMapper type="Sitecore.ListManagement.XConnect.Web.Import.CompositeFacetMapperCollection, Sitecore.ListManagement.XConnect.Web">
            <param resolve="true" type="Sitecore.Abstractions.BaseLog, Sitecore.Kernel"/>
            <facetMappers hint="list:Add">
              <facetMapper type="Sitecore.ListManagement.XConnect.Web.Import.ListSubscriptionMapper, Sitecore.ListManagement.XConnect.Web" />
              <facetMapper type="MyProject.ExtendedEmailFacetMapperSample, MyProject">
              <facetMapper type="Sitecore.ListManagement.XConnect.Web.Import.PreferredEmailFacetMapper, Sitecore.ListManagement.XConnect.Web" />
              <facetMapper type="Sitecore.ListManagement.XConnect.Web.Import.PersonalInformationFacetMapper, Sitecore.ListManagement.XConnect.Web" />
            </facetMappers>
          </facetMapper> 
        </import>
    </configuration>

既存のインポート マッパーを使用できない場合は、PreferredAddressFacetMapper などのカスタム インポート マッパーを作成できます。

次の手順で、新しいインポート マッパーを作成します。

  1. Sitecore.ListManagement.XConnect.Web.Import.IFacetMapper を実装する 新しい PreferredAddressFacetMapper を作成します。

    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 セクションで、マッパーを登録します。

    <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">  <sitecore>
        <import>
          <facetMapper type="Sitecore.ListManagement.XConnect.Web.Import.CompositeFacetMapperCollection, Sitecore.ListManagement.XConnect.Web">
            <param resolve="true" type="Sitecore.Abstractions.BaseLog, Sitecore.Kernel"/>
            <facetMappers hint="list:Add">
              <facetMapper type="Sitecore.ListManagement.XConnect.Web.Import.ListSubscriptionMapper, Sitecore.ListManagement.XConnect.Web" />
              <facetMapper type="Sitecore.ListManagement.XConnect.Web.Import.PreferredEmailFacetMapper, Sitecore.ListManagement.XConnect.Web" />
              <facetMapper type="Sitecore.ListManagement.XConnect.Web.Import.PersonalInformationFacetMapper, Sitecore.ListManagement.XConnect.Web" />
              <!-- New extended address mapper registration -->
              <facetMapper type="MyProject.PreferredAddressFacetMapper, MyProject" />
              <!-- New extended address mapper registration -->
            </facetMappers>
          </facetMapper>
        </import>
    </configuration>
    
  3. Sitecore.ListManagement.config ファイルで、Addresses というファセット名を追加してマッピングするファセットのリストを拡張します。

    <!--  FACETS TO MAP
          The list of contact facets retrieved from XConnect to map data from a CSV file.
          Only fields that belong to facets listed here are mapped. All other fields are skipped.
    -->
    <setting name="ListManagement.Import.FacetsToMap" value="Emails|Personal|Addresses" />
    

注記

この例の場合、コンテンツ エディターの PreferredAddressFacetMapper アイテムには、[データ フィールド] セクションに AddressList ファセットのプロパティの 1 つに関連するキー、たとえば CityAddressLine1CountryCode などが含まれている必要があります。