我有一个纯粹的 UI 向导,它从用户那里收集信息,然后在 sitecore 中创建一个内容项。该向导使用命令模板启动。
我希望向导使新创建的内容项成为内容编辑器中当前选定的项,但我不知道如何执行此操作。有谁知道这是怎么做到的?
更新
Trayek 的建议让我更进一步。我现在在用于启动向导的命令中获得了以下代码:
[Serializable]
public class MyNewContentCommand : Command
{
public override void Execute(CommandContext context)
{
ClientPipelineArgs args = new ClientPipelineArgs();
args.Parameters["id"] = context.Parameters["id"];
Context.ClientPage.Start(this, "Run", args);
}
protected void Run(ClientPipelineArgs args)
{
if (!args.IsPostBack)
{
// This runs when the users clicks to add the item
// in the content editor.
// Launches a modal wizard to collect user data
string id = args.Parameters["id"];
string controlUrl = Sitecore.UIUtil.GetUri("control:MyNewItemWizard");
UrlString urlStr = new UrlString(controlUrl);
urlStr.Append("id", id);
SheerResponse.ShowModalDialog(urlStr.ToString(), true);
args.WaitForPostBack();
}
else if (args.HasResult)
{
// This runs once the wizard has finished
// Wizard passes ID of created item in its result
// This is used to find the newly created item.
Item created = Client.GetItemNotNull(ID.Parse(args.Result));
// Sending these messages result in refreshing the child items
// of the parent. And they work.
Context.ClientPage.SendMessage(this, string.Format("item:updated(id={0})", created.Parent.ID));
Context.ClientPage.SendMessage(this, string.Format("item:refreshchildren(id={0})", created.Parent.ID));
// This message should select the new item in content editor, but
// it doesn't have the desired effect.
Context.ClientPage.SendMessage(this, string.Format("item:load(id={0})", (object)created.ID));
}
}
}