1

我有一个纯粹的 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));
        }
    }
}
4

2 回答 2

2

阅读链接。它为您提供 3 个选项:

  • 生成一个 URL 并链接到它
  • 从 XAML 应用程序打开它
  • 从 JavaScript 打开它
于 2013-03-13T12:49:01.147 回答
1

很抱歉回答我自己的问题。出现此问题的原因是“刷新内容树中的项目”命令和“选择内容树中的项目”命令之间似乎存在竞争条件。我必须将选择命令延迟几毫秒才能使其工作。

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));
Context.ClientPage.ClientResponse.Timer(
    string.Format("item:load(id={0})", created.ID), 100);
于 2013-03-14T10:19:10.463 回答