カスタムリゾルバーのパラメーターの1つとして取得したResolvePurpose
のを確認できるはずです。ResolveInstruction
これらの線に沿った何か:
public void Resolve(IdentifiableObject item, ResolveInstruction instruction, PublishContext context, ISet<ResolvedItem> resolvedItems)
{
if (instruction.Purpose == ResolvePurpose.Publish || instruction.Purpose == ResolvePurpose.RePublish)
{
// We are publishing
}
else if(instruction.Purpose == ResolvePurpose.UnPublish)
{
// We are unpublishing
}
// Don't know if this one exists in 2009, it exists in 2011 SP1
else if(instruction.Purpose == ResolvePurpose.UnknownByClient)
{
// The server is doing something that I don't understand (yet?)
}
}
編集
私はこの仕事をする方法を見つけることを拒否しました...
Purpose
実際、Tridion 2009では、解決手順についての説明はありません。公開トランザクションにはがありますAction
が、これはリゾルバーで直接公開されていません。これが私が公開しているのか非公開しているのかを知る方法です-それがやり過ぎだと思うならあなたの電話ですが、私の非本番VMでのパフォーマンスはかなり良かったです。
- 解決しようとしている現在のアイテムを見つける
- 状態が「進行中」のPublishTransactionのリストをロードします
- 現在のアイテムのトランザクションを検索します
Action
属性を見てアクションを決定します
Filter filter = new Filter();
filter.Conditions["InfoType"] = 2; // Get transactions in Progress
foreach (XmlNode node in item.Session.GetList(typeof(PublishTransaction), filter))
{
if(node.Attributes["ItemID"].Value.Equals(item.Id.ToString()))
{
// we have a winner
string action;
if (node.Attributes["Action"].Value.Equals("0"))
action = "Publish";
if (node.Attributes["Action"].Value.Equals("1"))
action = "Unpublish";
}
}