---
title: "例:ユーザーインターフェースを表示するコマンドテンプレートコード"
slug: "example--command-template-code-to-display-a-user-interface"
abstract: "フォルダ挿入用のユーザーインターフェースを表示するコマンドテンプレートコード。"
---
# 例:ユーザーインターフェースを表示するコマンドテンプレートコード

コマンドテンプレートを使い、ユーザーがアイテムを挿入する際にオプションを選択できるユーザーインターフェースを表示できます。

> !注場合によっては、コマンドテンプレートのユーザーインターフェースをカスタムアイテムエディタとして再利用したい場合もあります。

以下のコマンドテンプレートのコードサンプルは、ユーザーがフォルダを挿入できるユーザーインターフェースを示しています。この例は意図的に単純化し、ユーザーインターフェースを表示するコマンドテンプレートを実装するために必要な最小限のコンポーネントを示しています。

namespace Namespace.Shell.Framework.Commands
 {
 public class NewFolder : Sitecore.Shell.Framework.Commands.Command
 {
 public override void Execute(Sitecore.Shell.Framework.Commands.CommandContext context)
 {
 if (context.Items.Length == 1)
 {
 Sitecore.Data.Items.Item item = context.Items0;
 System.Collections.Specialized.NameValueCollection parameters = new
 System.Collections.Specialized.NameValueCollection();
 parameters"id" = item.ID.ToString();
 parameters"database" = item.Database.Name;
 Sitecore.Context.ClientPage.Start(this, "Run", parameters);
 }
 }
 protected void Run(Sitecore.Web.UI.Sheer.ClientPipelineArgs args)
 {
 if (args.IsPostBack)
 {
 if ((!String.IsNullOrEmpty(args.Result)) && args.Result != "undefined")
 {
 Sitecore.Context.ClientPage.SendMessage(this,"item:load(id="+args.Result +")");
 }
 }
 else
 {
 Sitecore.Text.UrlString url = new Sitecore.Text.UrlString( "/sitecore modules/shell/Namespace/NewFolder.aspx");
 url.Append("id", args.Parameters"id");
 url.Append("database", args.Parameters"database"); Sitecore.Context.ClientPage.ClientResponse.ShowModalDialog(url.ToString(),true);
 args.WaitForPostBack(true);
 }
 }
 }
}

Execute()メソッドに渡される唯一のパラメータはSitecore.Shell.Framework.Commands.CommandContextオブジェクトです。このオブジェクトのItemsコレクションの最初の要素は、ユーザーがコマンドテンプレートを呼び出した際に選択されたSitecore.Data.Items.Itemを示します。呼び出されたExecuteメソッドは処理環境に関する情報を準備し、その後コマンドテンプレートロジックを含むRun()メソッドを呼び出します。

Run()メソッドはコマンドテンプレートのユーザーインターフェースダイアログボックスを呼び出し、ユーザーがそのダイアログボックスを完了すると、作成されたアイテムを編集用インターフェースに読み込みます。Run()メソッドでは、args.IsPostBackが真であれば、ユーザーはインターフェースを完了したことになります。args.Resultに値が含まれていれば、それは作成されたアイテムのIDであり、Run()メソッドはユーザーインターフェースにそのアイテムを読み込みさせます。args.IsPostBackがfalseの場合、Run()メソッドはコマンドテンプレートのユーザーインターフェースを呼び出します。

以下のコードは、前述コードでRun()メソッドが参照したユーザーインターフェースコンポーネントファイル(/sitecore modules/shell/Namespace/NewFolder.aspx)の内容を表しています。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="NewFolder.aspx.cs" Inherits="Namespace.Web.UI.NewFolder" %>
 <html>
 <head>
 <script language="javascript" type="text/javascript">
 function onClose()
 {
 window.returnValue = form1.hidCreatedId.value;
 window.close();
 }
 function onCancel()
 {
 if(confirm( "Are you sure you want to cancel?"))
 {
window.close();
}
window.event.cancelBubble = true;
 return false;
 }
</script>
 <base target="\_self" />
</head>
 <body>
 <form id="form1" runat="server">
 <div>
<asp:textbox ID="txtName" runat="server" /><br />
 <asp:checkbox id="chkCopyInsertOptions" checked="true" runat="server" Text="Copy Insert Options" />
 <asp:checkbox id="chkCopyInsertRules" checked="true" runat="server" Text="Copy Insert Rules" /> <br />
<asp:button runat="server" id="btnCreate" text="Create" />
<asp:button runat="server" id="btnCancel" text="Cancel" onclientclick="onCancel();" />
<asp:button runat="server" id="btnDone" text="Done" onclientclick="onClose();" visible="false"/><br />
 <input type="hidden" runat="server" id="hidCreatedId" /><br />
 </div>
</form>
</body>
 </html>

> !注わかりやすくするために、このコードはASP.NETページを使用しています。Sitecore 8.1以前は、Sitecore Sheerを使ってコマンドテンプレートを実装することもできました。

<base>要素とその属性は、ユーザーがページのボタンをクリックしたときにブラウザが新しいウィンドウを開くのを防ぎます。

以下のコードは /sitecore modules/shell/Namespace/NewFolder.aspxのコードビハインドの内容を表しています:

namespace Namespace.Web.UI
{
 public partial class NewFolder : System.Web.UI.Page
{
 protected void Page\_Load(object sender, EventArgs e)
 {
 string dbName = Sitecore.Web.WebUtil.GetQueryString("database");
 Sitecore.Data.Database db = Sitecore.Configuration.Factory.GetDatabase(dbName);
 string parentID = Sitecore.Web.WebUtil.GetQueryString("id");
 Sitecore.Data.Items.Item parent = db.GetItem(parentID);
 if (String.IsNullOrEmpty(hidCreatedId.Value)
 && (!String.IsNullOrEmpty(txtName.Text) && txtName.Text != "undefined"))
 {
 chkCopyInsertOptions.Enabled = false;
 chkCopyInsertRules.Enabled = false;
 Sitecore.Data.Items.TemplateItem template =
 Sitecore.Context.ContentDatabase.TemplatesSitecore.TemplateIDs.Folder;
 Sitecore.Data.Items.Item item = parent.Add(txtName.Text, template);
 txtName.Enabled = false;
 btnDone.Visible = true; btnCreate.Visible = false;
 btnCancel.Visible = false;
 hidCreatedId.Value = item.ID.ToString();
 if(chkCopyInsertOptions.Checked||chkCopyInsertRules.Checked)
 {
 item.Editing.BeginEdit();
 if (chkCopyInsertOptions.Checked)
 {
 item.FieldsSitecore.FieldIDs.Branches.Value = parentSitecore.FieldIDs.Branches;
 }
 if (chkCopyInsertRules.Checked)
 {
 item.Fields"\_\_insert rules".Value = parent"\_\_insert rules";
 }
 item.Editing.EndEdit();
 }
}
else { if(String.IsNullOrEmpty(parentSitecore.FieldIDs.Branches))
 {
 chkCopyInsertOptions.Enabled = false;
 chkCopyInsertOptions.Checked = false;
 }
 if(String.IsNullOrEmpty(parent"\_\_insert rules"))
 {
 chkCopyInsertRules.Enabled = false;
 chkCopyInsertRules.Checked = false;
 }
 }
 }
 }
}