1. コマンドテンプレート

例:ユーザーインターフェースを表示するコマンドテンプレートコード

日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

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

注記

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

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

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.Items[0];
     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.Templates[Sitecore.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.Fields[Sitecore.FieldIDs.Branches].Value = parent[Sitecore.FieldIDs.Branches];
     }
     if (chkCopyInsertRules.Checked)
     {
       item.Fields["__insert rules"].Value = parent["__insert rules"];
     }
     item.Editing.EndEdit();
   }
} 
else { if(String.IsNullOrEmpty(parent[Sitecore.FieldIDs.Branches]))
   { 
   chkCopyInsertOptions.Enabled = false; 
   chkCopyInsertOptions.Checked = false;
    } 
   if(String.IsNullOrEmpty(parent["__insert rules"])) 
    {
     chkCopyInsertRules.Enabled = false;
     chkCopyInsertRules.Checked = false; 
    }
   }
  }
 }
}
この記事を改善するための提案がある場合は、 お知らせください!