1. リストの作成

コンタクトのインポートウィザードを設定して、カスタムコンタクトファセットを含める

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

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

  • 識別子

  • 識別子ソース

  • アドレス

  • 名前

  • 名字

インポートしたファイル フィールドをマッピングするために追加のSitecoreフィールドが必要な場合は、Import contactsウィザードを拡張して以下を含めることができます。

  • Predefined contact facetsImport contactsウィザードに追加できる使用可能な事前定義コンタクトファセットは次のとおりです。

    • 個人情報

    • メールアドレスリスト

    • アドレスリスト

    • 電話番号リスト

    • 同意事項

    • リストサブスクリプション

    • オートメーションプラン終了

    • AutomationPlanEnrollmentCache

    • アバター

  • New custom contacts facets– カスタムファセットを作成し、モデルコンフィギュレーションを更新してImport contactsウィザードに含めることができます。

事前定義されたファセットをマッピングフィールドとして追加します

リストマネージャには、事前定義された連絡先マッピングフィールドのリストが表示されます。 Import contactsウィザードを拡張するには、コア・データベースでブランチを使用して、使用可能なマッピング・フィールドの1つを追加します。

事前定義のマッピング・フィールドを追加するには、次のようにします。

  1. Coreデータベースのコンテンツ エディタで、/sitecore/client/Applications/List Manager/Dialogs/ImportWizardDialog/PageSettings/TabControl Parameters/Map/ImportModelフォルダに移動します。

  2. ImportModelフォルダを右クリックし、Insertをクリックして、定義済みの連絡先マッピング フィールドのいずれかをクリックします。

新しいファセットをマッピングフィールドとして追加する

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

新しいファセットをマッピングフィールドとして追加するには:

  1. Coreデータベースのコンテンツ エディタで、/sitecore/client/Applications/List Manager/Dialogs/ImportWizardDialog/PageSettings/TabControl Parameters/Map/ImportModelフォルダに移動します。

  2. /sitecore/client/Applications/List Manager/Templates/ImportModelFieldテンプレートに基づいて新しいインポートモデルフィールドアイテムを作成します。これを行うには、ImportModelフォルダーで、既存のアイテムの1つを複製します。

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

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

    Requiredフィールドは、フィールド マッピングをImport contactsウィザードのMapタブで指定する必要があるかどうかを指定します。これは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" />
メモ

インポート中に必須フィールドが空の場合、インポート ファイルの行全体がスキップされます。リスト マネージャのデフォルトの必須フィールドは、IdentifierEmailFirst name、およびLast nameです。

既存のインポートマッパーの拡張

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

次の例では、コード サンプルで既存のPreferredEmailMapperクラスを修飾して、個人用メールと仕事用メールをEmailAddressList.Othersディクショナリに追加できるようにしています。

既存のインポートマッパーを拡張するには:

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

    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" />
手記

この例では、コンテンツ エディターのDataFieldセクションのPreferredAddressFacetMapperアイテムには、AddressListファセットのプロパティの1つに関連するキー (CityAddressLine1CountryCodeなど) が含まれている必要があります。

連絡先リストにカスタムフィールドを表示する

連絡先リストにカスタムファセットを表示するには、連絡先リストに列を追加する必要があります

この記事を改善するための提案がある場合は、 お知らせください!