---
title: "キャンペーン"
slug: "campaigns"
abstract: ""
---
# キャンペーン

キャンペーンの定義は、Sitecore.Marketing.Definitions.Campaigns.CampaignDefinitionManagerクラスによって管理されます。

## CampaignDefinitionManagerへのアクセス

CampaignDefinitionManagerはSitecore DIコンテナから利用可能です。クラスのコンストラクタに型DefinitionManagerBase<ICampaignActivityDefinition, CampaignActivityDefinitionRecord>のパラメータを含め、コンテナからクラスを引き出すことで、コンテナがインスタンスを解決するのが望ましいです。

public MyClass(DefinitionManagerBase<ICampaignActivityDefinition, CampaignActivityDefinitionRecord> campaignDefinitionManager)
{
 ...
}

コンテナを使ってクラスを構築できない場合は、サービスロケーターを使うことができます。このクラスはSitecore DIコンテナでも利用可能です:

using Sitecore.DependencyInjection;
using Sitecore.Marketing.Definitions;

ServiceLocator.ServiceProvider.GetDefinitionManagerFactory().GetDefinitionManager<ICampaignActivityDefinition>();

## キャンペーンの定義

キャンペーンは Sitecore.Marketing.Definitions.Campaigns.Modelの名前空間のタイプを用いて定義されます。

using System;
using Sitecore.DependencyInjection;
using Sitecore.Marketing.Definitions;
using System.Globalization;
using Sitecore.Marketing.Definitions.Campaigns;

namespace Documentation
{
 public class DefineCampaign
 {
 public void Example()
 {
 Guid campaignActivityID = Guid.NewGuid(); // Campaign activity ID
 CultureInfo campaignActivityCulture = new CultureInfo("es"); // Campaign activity culture
 string campaignName = "Facebook Summer Campaign"; // Campaign activity name
 DateTime creationDate = DateTime.UtcNow; // Campaign activity creation date
 string createdBy = "sitecore\\admin"; // Campaign activity creator

 CampaignActivityDefinition campaign = new CampaignActivityDefinition(campaignActivityID, "Campaign item name", campaignActivityCulture, campaignName, creationDate, createdBy);

 campaign.StartDate = DateTime.UtcNow;
 campaign.EndDate = DateTime.UtcNow.AddDays(20);
 }
 }
}

> !注自動化州の登録状況が変わったため、AutomationStateEnrollmentListは後のリリースで削除される予定です。

## キャンペーンを救う

キャンペーンを定義したら、定義マネージャーのSaveAsync() メソッドを呼び出して保存できます:

using System;
using Sitecore.DependencyInjection;
using Sitecore.Marketing.Definitions;
using System.Globalization;
using Sitecore.Marketing.Definitions.Campaigns;

namespace Documentation
{
 public class SaveCampaign
 {
 public void Example()
 {
 var definitionManager = ServiceLocator.ServiceProvider.GetDefinitionManagerFactory().GetDefinitionManager<ICampaignActivityDefinition>();

 Guid campaignActivityID = Guid.NewGuid(); // Campaign activity ID
 CultureInfo campaignActivityCulture = new CultureInfo("es"); // Campaign activity culture
 string campaignName = "Facebook Summer Campaign"; // Campaign activity name
 DateTime creationDate = DateTime.UtcNow; // Campaign activity creation date
 string createdBy = "sitecore\\admin"; // Campaign activity creator

 CampaignActivityDefinition campaign = new CampaignActivityDefinition(campaignActivityID, "Campaign item name", campaignActivityCulture, campaignName, creationDate, createdBy);

 campaign.StartDate = DateTime.UtcNow;
 campaign.EndDate = DateTime.UtcNow.AddDays(20);

 definitionManager.SaveAsync(campaign);
 }
 }
}

また、セーブ中にSaveAsync()メソッドの2つ目のパラメータにtrueを渡すことでキャンペーンを有効化することも可能です。

manager.SaveAsync(campaign, true);

## キャンペーンの開始

キャンペーンは、管理外で利用可能になる前に、例えばリファレンスデータサービスに「公開」される前に有効化されなければなりません。

キャンペーンは、SaveAsync() メソッドの有効化(2つ目の)パラメータにtrueを渡すことで保存時に有効化できます。

manager.SaveAsync(campaign, true);

キャンペーンは、ActivateAsync() の方法でセーブを呼ばずに有効化することも可能です。

manager.ActivateAsync(campaignId);

ActivateAsync()方法はキャンペーンのIDを取り、キャンペーン定義モデルを必要としません。

## キャンペーンの削除

キャンペーンを削除するには、マネージャーのDelete() メソッドを使います。個々のカルチャーは定義から削除できず、定義全体のみ削除できます。メソッド呼び出しに提供されるカルチャーは、null(デフォルト値)またはCultureInfo.InvariantCultureのいずれかであるべきです。

manager.Delete(campaignActivityID);

または:

manager.Delete(campaignActivityID, CultureInfo.InvariantCulture);

## キャンペーンの取得

単一のキャンペーンは、マネージャーのGet() メソッドのいずれかを用いてIDで取得できます。

using System;
using Sitecore.DependencyInjection;
using Sitecore.Marketing.Definitions;
using System.Globalization;
using Sitecore.Marketing.Definitions.Campaigns;

namespace Documentation
{
 public class GetCampaign
 {
 public void Example()
 {
 var definitionManager = ServiceLocator.ServiceProvider.GetDefinitionManagerFactory().GetDefinitionManager<ICampaignActivityDefinition>();

 Guid campaignActivityID = Guid.NewGuid(); // Campaign activity ID
 CultureInfo campaignActivityCulture = new CultureInfo("fr-fr"); // Campaign activity culture

 // Call Get() to get concrete campaign by ID and culture
 var campaignActivityDefinition = definitionManager.Get(campaignActivityID, campaignActivityCulture);
 }
 }
}

また、アクティブなバージョンが存在しない場合は、非アクティブなバージョンを取得することも可能です:

var campaignActivityDefinition = manager.Get(campaignActivityID, campaignActivityCulture, true);

### 別名でキャンペーンを取得

また、[キャンペーンの別名](https://doc.sitecore.com/xp/ja/developers/103/sitecore-experience-platform/definition-aliases.html "Definition aliases")でも取得できます:

CultureInfo campaignActivityCulture = new CultureInfo("fr-fr"); // Campaign activity culture
var campaignActivityDefinitionByAlias = definitionManager.GetByAlias("My alias", campaignActivityCulture);

## 既存のキャンペーンを更新する

既存のキャンペーン定義を更新するには、IDでキャンペーンを取得し、キャンペーンを編集してください

Guid campaignActivityID = Guid.NewGuid(); // Campaign activity ID
CultureInfo campaignActivityCulture = new CultureInfo("es"); // Campaign activity culture

var campaignActivityToUpdate = manager.Get(campaignActivityID, campaignActivityCulture);
campaignActivityToUpdate.Name = "Updated campaign name";
manager.SaveAsync(campaignActivityToUpdate, true); // Save and activate

## すべてのキャンペーンの取得

GetAll()メソッドはマネージャーからすべてのキャンペーンを取得するために使用できます。定義が多数存在する場合があるため、この方法はページングをサポートしています。返す値は結果の1ページ分です。

// Get All with defaults which will be first page, page size 20, latest active versions only
ResultSet<DefinitionResult<ICampaignActivityDefinition>> campaigns = manager.GetAll(new CultureInfo("da"), new RetrievalParameters<ICampaignActivityDefinition, string>());

// Get page 2
ResultSet<DefinitionResult<ICampaignActivityDefinition>> page2Campaigns = manager.GetAll(new CultureInfo("da"), new RetrievalParameters<CampaignDefinition, string>(pageNumber: 2));

// Include inactive versions
ResultSet<DefinitionResult<IAutomationCampaignDefinition>> page1AllCampaigns = manager.GetAll(new CultureInfo("da"), new RetrievalParameters<IAutomationCampaignDefinition, string>(), true);

結果にアクセスするには、結果のDataPageプロパティを使いましょう。

IAutomationCampaignDefinition campaign = page1AllCampaigns.DataPage.ElementAt(0);

その結果には、定義の総数や現在のページインデックス、ページサイズを公開するプロパティも含まれています。

long totalDefinitionCount = page1AllCampaigns.Total;
int pageNumber = page1AllCampaigns.PageNumber;
int pageSize = page1AllCampaigns.Count;