---
title: "目標"
slug: "goals"
abstract: ""
---
# 目標

目標の定義はSitecore.Marketing.Definitions.Goals.GoalDefinitionManagerクラスによって管理されます。

> !注ゴールは専門的なイベントです。IGoalDefinitionIEventDefinitionを受け継ぎます。

## GoalDefinitionManagerへのアクセス

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

public MyClass(DefinitionManagerBase<IGoalDefinition, GoalDefinitionRecord> goalDefinitionManager)
{
 ...
}

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

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

namespace Documentation
{
 public class DefineAGoal
 {
 public void Example()
 {
 var goalDefinitionManager = ServiceLocator.ServiceProvider.GetDefinitionManagerFactory().GetDefinitionManager<Sitecore.Marketing.Definitions.Goals.IGoalDefinition>();
 }
 }
}

## 目標の定義

目標はSitecore.Marketing.Definitions.Goals.Model名前空間の型を用いて定義されます。

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

namespace Documentation
{
 public class DefineAGoal
 {
 public void Example()
 {
 var goalDefinitionManager = ServiceLocator.ServiceProvider.GetDefinitionManagerFactory().GetDefinitionManager<Sitecore.Marketing.Definitions.Goals.IGoalDefinition>();

 Guid goalId = Guid.NewGuid(); // Goal ID
 CultureInfo goalCulture = new CultureInfo("es"); // Goal culture
 string goalName = "Newly created goal"; // Goal name
 DateTime creationDate = DateTime.UtcNow; // Goal creation date
 string createdBy = "sitecore\\admin"; // Goal creator

 Sitecore.Marketing.Definitions.Goals.GoalDefinition goal = new Sitecore.Marketing.Definitions.Goals.GoalDefinition(goalId, "Goal item name", goalCulture, goalName, creationDate, createdBy);

 goal.ShowInXfileAsLatestEvent = true;
 goal.ShowInXfileEventsList = true;
 goal.EngagementValuePoints = 20;

 goal.IsSystem = false; // Note: This property might be removed
 goal.IsLiveEvent = false;
 }
 }
}

### ライブイベント

IsLiveEventプロパティは基本EventDefinitionクラスの一部であり、マーケティングオートメーションがイベントをセッション終了時ではなく即時処理するかどうかを判断するために使用されます。[ライブイベント処理](https://doc.sitecore.com/xp/ja/developers/103/sitecore-experience-platform/marketing-automation-plan-and-activity-enrollment.html "Marketing Automation plan and activity enrollment")についてさらに詳しくはこちらをご覧ください。

## ゴールを守る

目標を定義したら、定義マネージャーのSaveAsync() メソッドを呼び出すことで保存できます。

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

namespace Documentation
{
 public class SaveAGoal
 {
 public void Example()
 {
 var goalDefinitionManager = ServiceLocator.ServiceProvider.GetDefinitionManagerFactory().GetDefinitionManager<Sitecore.Marketing.Definitions.Goals.IGoalDefinition>();

 Guid goalId = Guid.NewGuid(); // Goal ID
 CultureInfo goalCulture = new CultureInfo("es"); // Goal culture
 string goalName = "Download Brochure"; // Goal name
 DateTime creationDate = DateTime.UtcNow; // Goal creation date
 string createdBy = "sitecore\\admin"; // Goal creator

 Sitecore.Marketing.Definitions.Goals.GoalDefinition goal = new Sitecore.Marketing.Definitions.Goals.GoalDefinition(goalId, "Goal item name", goalCulture, goalName, creationDate, createdBy);

 goalDefinitionManager.SaveAsync(goal);
 }
 }
}

また、セーブ中にSaveAsync()メソッドの2つ目のパラメータにtrueを渡すことで目標を発動することも可能です。

manager.SaveAsync(goal, true);

## 目標の有効化

目標は管理外で利用可能になる前に有効化しなければなりません。目標は保存時にtrueSaveAsync()メソッドのactivate(2つ目の)パラメータに渡すことで有効化できます。

manager.SaveAsync(goal, true);

また、ActivateAsync() メソッドを使ってセーブを呼ばずに目標を有効化することも可能です。

manager.ActivateAsync(goalId);

ActivateAsync()法は目標のIDを取り、目標定義モデルを必要としません。

## ゴールの削除

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

manager.Delete(goalId);

## ゴールを取る

単一の目標は、マネージャーのGet() メソッドのいずれかを使ってIDで取得できます。

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

namespace Documentation
{
 public class GetAGoal
 {
 public void Example()
 {
 var goalDefinitionManager = ServiceLocator.ServiceProvider.GetDefinitionManagerFactory().GetDefinitionManager<Sitecore.Marketing.Definitions.Goals.IGoalDefinition>();

 Guid goalId = Guid.NewGuid(); // Ensure this is the ID of an existing goal

 // Get by ID and culture. Will get the latest active version
 Sitecore.Marketing.Definitions.Goals.IGoalDefinition goalOne = goalDefinitionManager.Get(goalId, new CultureInfo("da"));

 // Get by ID and culture. Will get the latest version, including if the version is inactive
 Sitecore.Marketing.Definitions.Goals.IGoalDefinition goalWithInactive = manager.Get(goalId, new CultureInfo("da"), true);
 }
 }
}

### 別名で目標を取得する

また、[目標の別名](https://doc.sitecore.com/xp/ja/developers/103/sitecore-experience-platform/definition-aliases.html "Definition aliases")からも取得できます:

CultureInfo goalCulture = new CultureInfo("fr-fr");
var goalDefinitionByAlias = definitionManager.GetByAlias("My alias", goalCulture);

## 既存の目標を更新する

既存の目標定義を更新するには、IDで目標を取得し、目標を編集します

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

namespace Documentation
{
 public class UpdateAGoal
 {
 public void Example()
 {
 var goalDefinitionManager = ServiceLocator.ServiceProvider.GetDefinitionManagerFactory().GetDefinitionManager<Sitecore.Marketing.Definitions.Goals.IGoalDefinition>();

 Guid goalId = Guid.NewGuid(); // Ensure this is the ID of an existing goal

 // Get by ID and culture. Will get the latest active version
 Sitecore.Marketing.Definitions.Goals.IGoalDefinition goal = goalDefinitionManager.Get(goalId, new CultureInfo("da"));

 // Make updates to goal
 goal.Name = "Updated name";

 // Save to update
 goalDefinitionManager.SaveAsync(goal);
 }
 }
}

## 全ゴールの回収

GetAll()メソッドはマネージャーからすべての目標を取得するために使用できます。定義が多岐にわたる可能性があるため、このメソッドはページングをサポートしています。返す値は結果の1ページ分です。

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

namespace Documentation
{
 public class GetAllGoals
 {
 public void Example()
 {
 var goalDefinitionManager = ServiceLocator.ServiceProvider.GetDefinitionManagerFactory().GetDefinitionManager<Sitecore.Marketing.Definitions.Goals.IGoalDefinition>();

 // Get All with defaults which will be first page, page size 20, latest active versions only
 Sitecore.Marketing.Core.ResultSet<DefinitionResult<Sitecore.Marketing.Definitions.Goals.IGoalDefinition>> goals = goalDefinitionManager.GetAll(new CultureInfo("da"), new RetrievalParameters<Sitecore.Marketing.Definitions.Goals.IGoalDefinition, string>());

 // Get page 2
 Sitecore.Marketing.Core.ResultSet<DefinitionResult<Sitecore.Marketing.Definitions.Goals.IGoalDefinition>> page2Goals = goalDefinitionManager.GetAll(new CultureInfo("da"), new RetrievalParameters<Sitecore.Marketing.Definitions.Goals.IGoalDefinition, string>(pageNumber: 2));

 // Include inactive versions
 Sitecore.Marketing.Core.ResultSet<DefinitionResult<Sitecore.Marketing.Definitions.Goals.IGoalDefinition>> page1Goals = goalDefinitionManager.GetAll(new CultureInfo("da"), new RetrievalParameters<Sitecore.Marketing.Definitions.Goals.IGoalDefinition, string>(), true);
 }
 }
}

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

IGoalDefinition goal = page1Goals.DataPage.ElementAt(0);

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

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