我正在编写一个管道处理器,在项目被复制后删除项目中的两个字段,以避免重复的自动生成字段:
a
已复制到项目b
b
包含已删除的一个或多个字段的值我有一个适当的课程,但只能通过a
参数ClientPipelineArgs
访问原始项id
。
有没有办法捕获新复制的项目ID
的{{1}}?
以下代码:
b
答案 0 :(得分:4)
假设您正在使用uiDuplicateItem
管道,默认情况下定义为
<uiDuplicateItem>
<processor mode="on" type="Sitecore.Shell.Framework.Pipelines.DuplicateItem,Sitecore.Kernel" method="CheckPermissions" />
<processor mode="on" type="Sitecore.Shell.Framework.Pipelines.DuplicateItem,Sitecore.Kernel" method="GetName" />
<processor mode="on" type="Sitecore.Shell.Framework.Pipelines.DuplicateItem,Sitecore.Kernel" method="Execute" />
</uiDuplicateItem>
您需要首先通过一次换行覆盖Execute
处理器。下面是更新的Execute方法的代码,其中更新的位置已注释:
public void Execute(ClientPipelineArgs args)
{
Assert.ArgumentNotNull((object) args, "args");
Database database = Factory.GetDatabase(args.Parameters["database"]);
Assert.IsNotNull((object) database, args.Parameters["database"]);
string str = args.Parameters["id"];
Language result;
if (!Language.TryParse(args.Parameters["language"], out result))
result = Context.Language;
Item obj = database.GetItem(ID.Parse(str), result);
if (obj == null)
{
SheerResponse.Alert("Item not found.", new string[0]);
args.AbortPipeline();
}
else
{
Item parent = obj.Parent;
if (parent == null)
{
SheerResponse.Alert("Cannot duplicate the root item.", new string[0]);
args.AbortPipeline();
}
else if (parent.Access.CanCreate())
{
Log.Audit((object) this, "Duplicate item: {0}", new string[1]
{
AuditFormatter.FormatItem(obj)
});
// this was the original code - duplicated item created but id not stored
// Context.Workflow.DuplicateItem(obj, args.Parameters["name"]);
// new code with the id stored in args.Parameters["duplicatedId"]
Item duplicated = Context.Workflow.DuplicateItem(obj, args.Parameters["name"]);
args.Parameters["duplicatedId"] = duplicated.ID.ToString();
}
else
{
SheerResponse.Alert(Translate.Text("You do not have permission to duplicate \"{0}\".", new object[1]
{
(object) obj.DisplayName
}), new string[0]);
args.AbortPipeline();
}
}
}
然后,您可以添加处理器,以便在新Execute
处理器之后清除字段,并从args.Parameters["duplicatedId"]
获取重复项目。