1

ユーザーから情報を収集し、サイトコアでコンテンツ アイテムを作成する Sheer UI ウィザードがあります。ウィザードは、コマンド テンプレートを使用して起動されます。

新しく作成されたコンテンツ アイテムをコンテンツ エディターで現在選択されているアイテムにウィザードで設定したいのですが、その方法がわかりません。これがどのように行われるか知っている人はいますか?

アップデート

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 に答える