[Sitecore WPF]Sitecore Web Part Framework の ReferenceRendering を使ってみるでReferenceRendering データテンプレートを使用してみました。今回は Web Part データテンプレートを使用して Sitecore Web コントロールの定義アイテムを作成する方法を記載します。

Web Part 型のアイテムを /sitecore/システム/モジュール/Web Parts 配下に作成することで カタログモードを使用して ページに Web Part を追加できるようになります。

1. Web Part クラスの作成

サイトコア用の WebPartクラスを作成します。サイトコアを拡張するためのWebアプリケーションプロジェクト(もしくはクラスライブラリプロジェクトなど) で、WebPart クラスを作成します。参照にdll参照を追加します。下図のようにサイトコアのWebSite フォルダの bin フォルダにインストールされた Sitecore.WebPartFramework.dll の参照をプロジェクトに追加します。ビルド前に必ずローカルコピーをFALSEにしてください。

今回は ShowHelloWebPart という単純なクラスを作成します。ShowHelloWebPart.cs を次のように実装しました。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Sitecore.Data.Items;
using Sitecore.SecurityModel;
using Sitecore.Modules.WebPartFramework.Web.WebParts;

namespace SCWebPartsSample.Web.layouts.wpf
{
    public class ShowHelloWebPart : WebPart
    {
        public string HellloMessage
        {
            get
            {
                using (new SecurityEnabler())
                {
                    Item item = this.ConfigItem;
                    if (item != null)
                    {
                        return item["Hello"];
                    }
                    return "Hello?";
                }
            }
        }

        protected override void RenderContents(System.Web.UI.HtmlTextWriter writer)
        {
            writer.RenderBeginTag("div");
            writer.AddStyleAttribute("background-coolor", "red");
            writer.Write(this.HellloMessage);
            writer.RenderEndTag();
        }
    }
}

今回作成した WebPart クラスは Sitecore.Modules.WebPartFramework.Web.WebParts 名前空間の WebPart クラスから継承した WebPart コントロールです。プログラムではConfigItem に設定用のアイテムが設定されている場合はそのアイテムの Hello フィールドの値を出力します。そうでない場合は "Hello?" という文字列を出力しています。 COnfigItem の設定方法は後で説明します。

2. WebPart アイテムの作成

/sitecore/システム/モジュール/Web Parts アイテム配下に Web Part 型のアイテムを下図の用に作成します。データテンプレートに Web Part テンプレートを指定して TestWebPart という定義アイテムを作成しました。

作成したアイテムを選択して エディター領域のコンテンツタブに表示されるフィールドを編集します。 Web Part 型のアイテムのフィールドは Title,Typeフィールドからなります。Titleを Web Part の名前になります。Web Part を識別するための表示名として使用されます。 Typeフィールドは Sitecore Web Part コントロールクラスのシグネチャを設定します。今回は SCWebPartsSample.Web.layouts.wpf名前空間に ShowHelloWebPart というクラスを作成し、dllの名前(Webアプリケーションプロジェクトの名前)は SCWebPartsSample.Web という名前に設定しているので下図のようなシグネチャになっています。

以上で準備が完了しました。

Web Part Framework パッケージインストール時にインストールされる WPF Layout.aspx のマークアップの設定により、 /sitecore/システム/モジュール/Web Parts アイテム配下に Web Part ようの定義アイテム(RenderingReference,Web Part)を作成すると,下図のようにカタログモード表示時に、 Catalog Zone の Availbale Web Parts の欄に Web Part として表示され、ページ上の WebPartZoneに配置することができるようになります([Sitecore WPF]Sitecore Web Part Framework をインストールしてみる参照)

下図は実際に WebPartZone に 作成した TestWebPart を配置した例になります。

3. 設定アイテムを使用する

下図のように WebPart 型の定義アイテム配下にアイテムを作成することで 編集モードで画面を表示したときに、 Sitecore Web Part に対して 設定アイテム(Configuration Item) を指定することができます。Configuration Item を設定すると WebPart クラス上で ConfigItem として設定されたアイテムを参照できるようになります。した例では Helloというフィールドを持つアイテムを作成した TestWebPart というアイテムのサブアイテムとしてとして作成しています。

デモ用もう1つ Config2 という設定用のアイテムも作成します。

WPF Layout.aspx レイアウトを使用する サンプル用のページ /WPF Sample.aspx を表示して、ページを Edit Mode に変更します。下図のように ページに配置した TestWebPart の Edit リンクをクリックします。

すると Editor Zone が表示されます。WebPartアイテム配下にサブアイテムがあると、 下図のようにコンフィグレーションアイテムを選択する設定というグループボックスが表示されます。グループボックスないのでドロップダウンリストにサブアイテムの一覧が表示するので設定用のアイテムを選択します。

すると、 作成した ShowHelloWebPart の実装にある通り、設定用のアイテムが ConfigItem プロパティから参照できるようになるので ConfigItemの Hello フィールドの値をレンダリングするようになります。下図は Config1 を選択した場合。 

下図は Config2を設定した場合の例です。

4.まとめ

説明は以上です。今回は Web Part データテンプレートを使用して Sitecore用のWeb Part コントロールを Web Part として使用するサンプルをご紹介しました。 また、設定アイテムを使用して WebPart コントロールの振る舞いをカスタマイズする方法もご紹介しました。

また、Web Part や ReferenceRenderingアイテムを /sitecore/システム/モジュール/Web Part アイテムのサブアイテムとして作成することで WPF Layout.aspx と同じように CatalogZoneを作成することで、Web Part や ReferenceRenderingのコンポーネントを画面に配置することができるようになります。もちろん、 WPF Layout.aspx の <framework:SitecoreCatalogPart ID="SitecoreCatalogPart1" runat="server" Source="..." /> のマークアップのSourceプロパティで設定されているGUIDを/sitecore/システム/モジュール/Web Parts とは別のアイテムのGUIDを設定することで別のアイテム配下に定義した ReferenceRenderingやWeb Part アイテムをカタログゾーンからページに追加できるようになると思います。

何回かに分けて Web Part Framework の使い方をご紹介しました。 間違いや指摘点などございましたらご連絡ください。