我正在尝试在Sitecore 6中实现一个saveui管道处理器。基本上我已经创建了一个自定义处理器,它向用户显示一条弹出消息,具体取决于他们可能在项目上更改了哪些字段以及新数据是什么。如果他们进行了某些更改,那么会向他们显示一个弹出窗口,询问他们是否要继续。如果他们回答否,则管道中止。这一切都有效。但是我注意到当你中止管道时,所有Sitecore似乎都没有保存。用户对内容项所做的所有更改仍在UI中。如果您离开Sitecore中的项目,它将提示您是否要保存更改。有什么方法可以让Sitecore UI取消所有更改并将所有字段还原为其初始值?中止管道很好,因为我不想保存,但我也想在UI中取消保存。有谁知道怎么做?
示例代码:
public class CustomSaveProcessor
{
public void Process(SaveArgs args)
{
Sitecore.Diagnostics.Assert.ArgumentNotNull(args, "args");
if(args.Items == null)
{ return; }
if(args.IsPostback)
{
if(args.Parameters["runContext"] == "firstQuestion")
{
if((args.Result == null) || (args.Result == "null") || (args.Result == "no") || (args.Result == "cancel"))
{
args.AbortPipeline();
//Should there be something here to tell the Sitecore UI to reset the values?
return;
}
else
{
//User has answered first question Yes
//This means they want to save the changes to the item
//We also want to ask a second question that effects other content items
SheerResponse.YesNoCancel("Do you want to also modify other items?", "300px", "200px");
args.Parameters["runContext"] = "secondQuestion";
args.WaitForPostBack();
}
}
else
{
if(args.Result == "yes")
{
//This is the answer to second question
//Custom code here to modify other content items
}
//We are completely done now.
return;
}
}
else
{
//Ask the user the first question
SheerResponse.YesNoCancel("Are you sure you want to proceed?", "300px", "200px");
args.Parameters["runContext"] = "firstQuestion";
args.WaitForPostback();
}
}
}
答案 0 :(得分:2)
您可以使用以下代码重新加载内容树。
String refresh = String.Format("item:refreshchildren(id={0})", Sitecore.Context.Item.Parent.ID);
Sitecore.Context.ClientPage.SendMessage(this, refresh);
或者正如Corey发现你想要引用你使用的项目
String refresh = String.Format("item:load(id={0})", myOriginalItem.ID);
Sitecore.Context.ClientPage.SendMessage(this, refresh);
有关详细信息,请参阅此post
答案 1 :(得分:0)
我认为您可以在中止自定义保存处理程序后尝试重新加载当前内容项,以设置内容项的初始值。不确定你是否仍然收到“警告信息”。
使用类似问题查看this post