---
title: "カスタムモデルを作成する"
slug: "create-a-custom-model"
abstract: "カスタムファセットやイベントの作成方法、カスタムモデル、そしてそのモデルの展開方法について。"
---
# カスタムモデルを作成する

このトピックではカスタムモデルの定義方法を説明します。

## カスタムファセットとイベントを定義してください

カスタムファセットやイベントを作成するには:

1.  新しいプロジェクトを作成します。例えば、Documentation.Model。
    
2.  側面や出来事を定義してください。
    
    > !注すべてのプロパティがxConnect'型の制限に準拠していることを確認してください。トラッカーで使われているファセットはSerializable属性で装飾してください。
    
    using Sitecore.XConnect;
    using System;
    
    namespace Documentation.Model
    {
     Serializable
     FacetKey(DefaultFacetKey)
     public class FrequentFlyerInfo : Sitecore.XConnect.Facet
     {
     public const string DefaultFacetKey = "FrequentFlyerInfo";
    
     public FrequentFlyerInfo(string frequentFlyerId)
     {
     FrequentFlyerID = frequentFlyerId;
     }
    
     public FrequentFlyerStatus Status { get; set; }
     public string FrequentFlyerID { get; set; } // Example: ABC12345
    
     public enum FrequentFlyerStatus
     {
     Unknown = 0,
     Bronze,
     Silver,
     Gold
     }
     }
    
     public class BoardFlight : Event
     {
     public static readonly Guid EventDefinitionId = new Guid("2A72E131-BCFD-481C-8E15-04496E9586DC");
    
     public BoardFlight(DateTime timestamp) : base(EventDefinitionId, timestamp)
     {
    
     }
    
     public string Seat { get; set; }
     public bool Upgraded { get; set; }
     }
    }

## モデルを作成する

モデルを作成するには:

1.  CollectionModelという名前のクラスを作成します。例えば、Documentation.Model.CollectionModel。XdbModelBuilderのインスタンスを作成します。
    
    using Sitecore.XConnect;
    using Sitecore.XConnect.Schema;
    using System;
    
    namespace Documentation.Model
    {
     public class CollectionModel
     {
     public static XdbModel Model { get; } = BuildModel();
    
     private static XdbModel BuildModel()
     {
     XdbModelBuilder modelBuilder = new XdbModelBuilder("DocumentationModel", new XdbModelVersion(1, 0));
    
     // Facets and events here
    
     return modelBuilder.BuildModel();
     }
     }
    }
    
    > !注モデルのフルネーム(XdbModelクラスのFullNameプロパティで表される)には、モデル名とバージョンが含まれます。例えば:DocumentationModel,1.0。
    
2.  必要に応じて、使いたい別のモデルを参照することもできます。以下の例では、Sitecore.XConnect.Collection.Model.CollectionModel.Modelを参照されます。 FacetやEventなどのクラスは自動的に含まれています。
    
    using Sitecore.XConnect;
    using Sitecore.XConnect.Schema;
    using System;
    
    namespace Documentation.Model
    {
     public class CollectionModel
     {
     public static XdbModel Model { get; } = BuildModel();
    
     private static XdbModel BuildModel()
     {
     XdbModelBuilder modelBuilder = new XdbModelBuilder("DocumentationModel", new XdbModelVersion(1, 0));
    
     modelBuilder.ReferenceModel(Sitecore.XConnect.Collection.Model.CollectionModel.Model);
     // Facets and events here
    
     return modelBuilder.BuildModel();
     }
     }
    }
    
3.  FrequentFlyerInfo接触面とBoardFlight事象を定義します。
    
    using Sitecore.XConnect;
    using Sitecore.XConnect.Schema;
    using System;
    
    namespace Documentation
    {
     public class CollectionModel
     {
     public static XdbModel Model { get; } = BuildModel();
    
     private static XdbModel BuildModel()
     {
     XdbModelBuilder modelBuilder = new XdbModelBuilder("DocumentationModel", new XdbModelVersion(1, 0));
    
     modelBuilder.ReferenceModel(Sitecore.XConnect.Collection.Model.CollectionModel.Model);
    
     modelBuilder.DefineFacet<Contact, FrequentFlyerInfo>(FrequentFlyerInfo.DefaultFacetKey);
     modelBuilder.DefineEventType<BoardFlight>(false);
    
     return modelBuilder.BuildModel();
     }
     }
    }
    
4.  ファセット、イベント、または型が異なるアセンブリに位置する型を継承した場合、modelbuilder.RegisterType() メソッドを使って手動で型を登録します。例えば、Documentation.Model.FrequentFlyerInfoがCommon.Model.InheritedBaseを継承することがあります。
    
    using Sitecore.XConnect;
    using Sitecore.XConnect.Schema;
    using System;
    
    namespace Documentation
    {
     public class CollectionModel
     {
     public static XdbModel Model { get; } = BuildModel();
    
     private static XdbModel BuildModel()
     {
     XdbModelBuilder modelBuilder = new XdbModelBuilder("DocumentationModel", new XdbModelVersion(1, 0));
    
     modelBuilder.ReferenceModel(Sitecore.XConnect.Collection.Model.CollectionModel.Model);
    
     modelBuilder.RegisterType<Common.Model.InheritedBase>(false);
    
     modelBuilder.DefineFacet<Contact, FrequentFlyerInfo>(FrequentFlyerInfo.DefaultFacetKey);
     modelBuilder.DefineEventType<BoardFlight>(false);
    
     return modelBuilder.BuildModel();
     }
     }
    }
    

> !注モデルを使用するには、[カスタムモデル](https://doc.sitecore.com/xp/ja/developers/93/sitecore-experience-platform/deploy-a-custom-model.html "Deploy a custom model") をxConnect、マーケティングオートメーションエンジン、そしてすべてのコアSitecoreインスタンスに展開する必要があります。