[Sitecore][Publishing][Publishing Target]パブリッシュターゲットを指定 1
題名のようにワークフロー特定のパブリッシュターゲットへのパブリッシュする方法を紹介します。
編集者が新しいアイテムを作成してから、通常何らかのワークフローが設定を使ってパブリッシュターゲットへ公開されていきます。今回サイトコアからディフォルトでついてくるワークフローを例にして、特定のパブリッシュターゲットを指定する例説明します。アイテムが作成され、投稿し、承認されてから、オートパブリッシュでパブリッシュされるわけですが、ただ、たとえば、複数のパブリッシュターゲットがあるとします。
この場合はQAとLiveの二つのパブリッシュターゲットが有る場合、両方へとパブリッシュします。
Sitecore.Workflows.Simple.PublishActionが既存のすべてのパブリッシュターゲットへパブリッシュします。
時にはお客さんがQAだけへとパブリッシュしたいという時にカスタムなパブリッシュアクションを作る例を説明したいです。
1. まず下準備します。特定なパブリッシュターゲットを指定できるように、既存の
/sitecore/templates/System/Workflow/Action にてフィールドを追加しましょう。
2.コードを追加
[css]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sitecore.Configuration;
using Sitecore.Data;
using Sitecore.Data.Items;
using Sitecore.Diagnostics;
using Sitecore.Globalization;
using Sitecore.Publishing;
using Sitecore.SecurityModel;
using Sitecore.Web;
using Sitecore.Workflows.Simple;
namespace local.sandbox.com.Website.Sitecore_Extensions.Publishing
{
public class CustomPublishAction
{
// Methods
private bool GetDeep(Item actionItem)
{
return ((actionItem["deep"] == "1") || (WebUtil.ParseUrlParameters(actionItem["parameters"])["deep"] == "1"));
}
//Get publish target
private string GetTargetItem(Item actionItem)
{
return actionItem["Publishing Targets"];
}
private Database GetTarget(Item item)
{
using (new SecurityDisabler())
{
string targetName = GetTargetItem(item);
Item targetItem = item.Database.GetItem(targetName);
string name = targetItem["Target database"];
if (name.Length > 0)
{
Database database = Factory.GetDatabase(name, false);
if (database != null)
{
return database;
}
else
{
Log.Warn("Unknown database in PublishAction: " + name, this);
return null;
}
}
else
{
Log.Warn("target database isn’t specified in PublishAction", this);
return null;
}
}
}
public void Process(WorkflowPipelineArgs args)
{
Item dataItem = args.DataItem;
Item innerItem = args.ProcessorItem.InnerItem;
Database target = this.GetTarget(innerItem);
Database[] targets = { target };
PublishManager.PublishItem(dataItem, targets, new Language[] { dataItem.Language }, this.GetDeep(innerItem), false);
}
}
}
[/css]
3.新しいQAのみの承認を追加します。
4.オートパブリッシュにて、パブリッシュターゲットをQAを指定します。
5.新しいアイテムが投稿してから、“Approve QA”にて、QAのみへのパブリッシュになります。