アイテムをコピーした時にワークフローの状態をデフォルトで「下書き」状態にするようなカスタマイズをしたいことがあるかと思います。
ここではイベントをトリガーとして処理を実行するイベントハンドラでカスタマイズする方法を紹介します。
ここでは使用するテンプレートは全て作成している前提で説明します。
アイテムの作成
1.SItecoreにログインし、管理画面からコンテンツエディターを開きます。
2.「/sitecore/system/Workflows」に移動し「Test」ワークフローアイテムを作成します。(「ワークフロー」フォルダアイコンのプルダウンメニューから「挿入」を指定して作成します。)
3.作成した「Test」ワークフロー配下に「Workflow/State」テンプレートを挿入して「TestState」アイテムを作成します。
実装方法
1.「ItemEventHandler.cs」と「ItemEventHandler.config」を作成します。
2.「ItemEventHandler.cs」に「TestHandler」メソッドを作成します。
TestHandlerメソッドでは、コピー先のアイテムのワークフローに「Test」ワークフローを、ワークフロー状態に「TestState」を、それぞれ指定します。
public class ItemEventHandler
{
//configで指定
public int Index { get; set; }
public void TestHandler(object sender, EventArgs args)
{
//EventArgsからコピー先のアイテムを取得
Item item = Event.ExtractParameter(args, Index) as Item;
//アイテムの編集モードを開始
item.Editing.BeginEdit();
//コピー先アイテムに[Test]ワークフローを設定
item.Fields["__Workflow"].Value =
"{63C57A22-D56A-4C58-946F-731716332448}";
//コピー先アイテムに[TestState]ワークフロー状態を設定
item.Fields["__Workflow state"].Value =
"{D25DC7EB-BC95-46F1-9776-567E397D4274}";
//アイテムの変更モードを終了
item.Editing.EndEdit();
}
}
ItemEventHandler.cs
3.「ItemEventHandler.config」には、「item:copied」イベントに、上記で作成した「TestHandler」を登録します。
1
ItemEventHandler.config
*「index」で設定している1はコピー先アイテムを指します。 インデックスパラメータについて詳しく知りたい方は後述のリンク先で確認してください。
Sitecoreで事前定義されているイベント
イベント名 |
イベント |
item:added |
追加 |
item:created |
作成 |
item:copied |
コピー |
item:deleted |
削除 |
item:moved |
移動 |
item:saved |
保存 |
item:versionAdded |
バージョン追加 |
publish:begin |
パブリッシュ開始 |
publish:end |
パブリッシュ終了 |
*事前定義されているイベントはこの他にもたくさんあります。イベント名やインデックスパラメータについて詳しく載っているので知りたい方はこちらをご確認ください。
イベントの実行
1.「/sitecore/content/Home」配下に、コピー元である「sample1」アイテムと、コピー先アイテムを格納する「SampleFolder」フォルダを、作成します。
2.「sample1」を高度なコピーで「SampleFolder」配下に「指定の場所にコピー」でコピーします。
3.コピーして作成されたアイテム「/sitecore/content/Home/SampleFolder/sample1」に移動し、ワークフローとワークフロー状態を確認すると、ワークフローに「Test」がワークフロー状態には「TestState」が設定されています。
以上になります。
※エントリーの内容・画像等は、公開時点での情報に基づきます。
※Sitecoreのバージョンによって実装されている機能が異なります。