こんにちは、SharePoint サポートの森 健吾 (kenmori) です。今回の投稿では、委任コントロールを活用するシナリオについてご紹介します。
1. 委任コントロールとは
実は SharePoint には、旧バージョンから委任コントロールという機能が備わっております。これは、簡単に言うと *.master や *.aspx などのファイルを直接書き換えることなく、機能のアクティブ化だけでページの内容を変更することができる機能です。
具体的な例を挙げると以下のような検索ボックスです。WSS 3.0 の標準の検索ボックスは以下となります。
一方、MOSS 2007 グループ作業ポータルを使用している場合の検索ボックスは以下のようになります。
どちらの *.master ページを SharePoint Designer で確認しても、SharePoint:Delegate コントロールとしか記載されていません。
実はこの DelegateControl というのは、機能が有効化されることによってこの領域 (ここでは SmallSearchBoxInput という領域にどのコントロールを描画するかを選べる機能を保持しています。実際に FEATURES フォルダ内を SmallSearchInputBox というキーワードにて、*.xml を絞り込み grep 検索すると、以下のフォルダ内にこの委任コントロールを使用した機能が確認できます。
ContentLightupOSearchBasicFeatureOSearchEnhancedFeature
例えば OSearchEnhancedFeature フォルダ内にある SearchArea.xml を確認します。
<?xml version="1.0" encoding="utf-8" ?><Elements xmlns="http://schemas.microsoft.com/sharepoint/"> <Control Id="SmallSearchInputBox" Sequence="25" ControlClass="Microsoft.SharePoint.Portal.WebControls.SearchBoxEx" ControlAssembly="Microsoft.SharePoint.Portal, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"> <Property Name="GoImageUrl">/_layouts/images/gosearch.gif</Property> <Property Name="GoImageUrlRTL">/_layouts/images/goRTL.gif</Property> <Property Name="GoImageActiveUrl">/_layouts/images/gosearch.gif</Property> <Property Name="GoImageActiveUrlRTL">/_layouts/images/goRTL.gif</Property> <Property Name="UseSiteDefaults">true</Property> <Property Name="FrameType">None</Property> <Property Name="ShowAdvancedSearch">true</Property> </Control> </Elements>
このように、SmallSearchInputBox という領域内に Microsoft.SharePoint.Portal.WebControls.SearchBoxEx コントロールを描画するように指定していることになります。なお、Sequence 属性は委任コントロールが該当コントロールを採用する際の優先順位であり、数値が少ない方が優先されます。例えば、WSS 3.0 の検索ボックスと MOSS 2007 の検索ボックスが両方有効となった場合は、MOSS 2007 の機能が優先されるなどの措置が実現可能となるわけです。
委任コントロールは、他にも SharePoint 2010 ではナビゲーションなどにも使用されており、例えばメタデータ ナビゲーションとフィルター処理機能をアクティブ化すると、サイドリンクバーにキーフィルターなどの機能が追加されるなどの仕組みもあります。
2. 委任コントロールが効果を発揮するシナリオについて
運用においてよくある話として、ある特定の JavaScript などを全てのページで実行したいということがあると思います。
・1 つのページ上で実行するのであれば、コンテンツ エディタ Web パーツなどに JavaScript を張り付けるソリューションがあります。・複数のページで実行したいのであれば、該当ページが参照するマスタ ページ (例. default.master) などに JavaScript を組み込めば、そのマスタ ページを参照するページ (サイト、発行サイトなら最大でサイト コレクション全体のページ) において、JavaScript が実行されることになります。
では、サイトが数千個あったらどうなるでしょうか?SharePoint Designer で数千サイト、この作業を繰り返すのは現実的ではありません。
この時に委任コントロールは大きな力を発揮すると思われます。SharePoint 2010 には、v4.master などを見るとお分かりの通り AdditionalPageHead という委任コントロールが張られており、このコントロール内に JavaScript を埋め込んだカスタム コントロールを描画するようにすれば対処が可能です。
ソリューションを SharePoint Server にインストールしてしまえば、後は以下のようなというバッチをサイト分実行するようにしてしまえば、あっという間に完成です。
stsadm –o activatefeature –name <機能> -url <サイト URL>
…
そして、これを実施した場合においては、JavaScript の適用が必要なくなった際においても、以下のようなコマンドを用意してサイトの数だけ実行するだけで JavaScript は外れます。
stsadm –o deactivatefeature –name <機能> -url <サイト URL>
3. 実戦編
さて、重要な開発方法についてですが、実はすでに MSDN に非常に詳細に記載されています。ただ、これがどのように活用できるかということについては、触れられていないと考えたため、今回の記載に至りました。以下のページを今後の運用にお役立ていただければ幸いです。
タイトル : [方法] 委任コントロールをカスタマイズするアドレス : http://msdn.microsoft.com/ja-jp/library/ms470880.aspx
今回の投稿は以上になります。