次の方法で共有


SharePoint フォームのしくみ

最終更新日: 2010年7月7日

適用対象: SharePoint Foundation 2010

一般に各リストの種類には、リストが準備されるときに準備される表示、編集、および新規作成フォーム ASPX ページ (DispForm.aspx、EditForm.aspx、および NewForm.aspx) のセットがあります。これらの ASPX ページは "コンテンツ領域" に準備されます。つまり、%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\LAYOUTS にはなく、/_layouts 仮想ディレクトリを介して動作しません。ドキュメント ライブラリの場合、これらのページは forms と呼ばれるリストの隠しサブフォルダー内に準備されます。その他の SharePoint リストの場合、ページはリスト ルート フォルダーの下に準備されます。これらの各 ASPX ページには、フォームのレンダリングを処理する Microsoft.SharePoint.WebPartPages.ListFormWebPart オブジェクトが含まれます。

Microsoft SharePoint Foundation 2010 は Microsoft ASP.NET を使用してフォームを表示します。各フォームは、論理的にはコントロール (たとえば、ツール バーのコントロール) のセットから構成されます。反復子と呼ばれる特別なコントロール (Microsoft.SharePoint.WebControls.ListFieldIterator) は、リスト フィールドのコレクションの反復処理と、フォームへの各フィールドの追加に使用されます。

フォーム テンプレートのカスタマイズのオプション

一般に、以前のバージョンの SharePoint Foundation では、リストの Schema.xml ファイル内のフォーム定義を変更することによってリスト アイテム フォームをカスタマイズしました。Form 要素には、ページに挿入する HTML やスクリプトを定義した Collaborative Application Markup Language (CAML) サブ要素など、特定の種類のフォームのレンダリング詳細が含まれていました。SharePoint Foundation では、Microsoft ASP.NET コントロール テンプレートに組み込まれているテンプレート機能が使用されます。

注意

Form 要素の UseLegacyForm 属性を TRUE に設定した場合は、Schema.xml を通じてカスタム フォーム定義を適用することもできますが、ASP.NET コントロールを使用することをお勧めします。

フォームは現在も Schema.xml で定義できますが、ASP.NET コントロール テンプレートを通じて使用可能な豊富な機能を利用してフォームを変更できるようになりました。コントロール テンプレートには、HTML 要素と子コントロールの組み合わせが含まれ、含むページまたはコントロールに HTML を挿入します。コントロール テンプレートの階層を構築することで、Web アプリケーションの継承モデルを効果的に作成し、コードをより効率よく再利用できます。

カスタム フォーム テンプレートを通じて、リスト アイテム フォームのレンダリング方法を変更できます。リスト定義の Schema.xml ファイルで、Template 属性を通じて、フォームのレンダリングに使用するコントロール テンプレートの ID をリストの種類ごとに指定できます。カスタム テンプレートを実装する任意のフォームの Template 属性を指定する必要があります。カスタム テンプレートは、同じテンプレートにも別のテンプレートにもすることができます。フォームのカスタム テンプレートを指定しない場合、既定では、SharePoint Foundation は既定のテンプレートを実装します。カスタム コントロール テンプレートは、%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES の .ascx ファイル内で定義されている必要があります。Microsoft Visual Studio を使用して、SharePoint Foundation で動作するユーザー コントロールを作成する方法については、「How to: Create a User Control for a SharePoint Application Page or Web Part」を参照してください。

注意注意

既定の SharePoint Foundation テンプレートをオーバーライドすると、サーバー ファーム全体のフォームの動作が変更され、バージョンの更新時にフォームが既定のテンプレート動作をしなくなります。代わりに、カスタム フォーム テンプレートを使用する独自のリスト テンプレートを作成して、カスタム動作を実装します。

たとえば、すべてのアンケート リスト アイテム フォームのレンダリング方法をオーバーライドできます。%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\FEATURES\SurveysList\Survey\Schema.xml 内のアンケート リスト定義は、Template 属性を使用して、アイテム表示フォームに使用するテンプレートとして ListForm を指定し、アイテム編集およびアイテム作成フォームに SurveyForm テンプレートを使用します。つまり、\ControlTemplates フォルダー内にある ListForm および SurveyForm と ID が等しいコントロール テンプレートがあり、これらのテンプレートをオーバーライドすることでアンケート リスト アイテム フォームに使用される既定のフォーム テンプレートをグローバルに置換できます。カスタム .ascx ファイル内に同じ ID を持つカスタム テンプレートを定義します。

注意

ID が ListForm または SurveyForm と等しいテンプレートを 1 つだけ使用できるため、この拡張機能は限定的に使用してください。カスタム テンプレートでは重複する ID がサポートされておらず、予期しない結果につながります。

コンテンツ タイプによってカスタム フォーム テンプレートを登録することもできます。特定のコンテンツ タイプがある場合は、そのコンテンツ タイプについて、ドキュメント ライブラリで既定で使用される標準ドキュメント ライブラリ フォームの代わりに使用するカスタム フォームを宣言できます。コンテンツ タイプのカスタム フォームの宣言方法の詳細については、「FormTemplates スキーマの概要」を参照してください。

フォームを表示する他の手段もサポートされています。リスト フォーム ページから既存の ListFormWebPart コントロールを削除することはできませんが、コントロールを非表示にすることはできます。さらに、たとえば DataFormWebPart オブジェクトを追加し、XSLT を使用してアイテムのフォームをレンダリングできます。コンテンツ タイプにフォーム ページ URL (DisplayFormUrlEditFormUrl、または NewFormUrl プロパティ) を設定して、ユーザーをカスタム フォーム ページにリダイレクトすることもできます。また、Microsoft.SharePoint.WebControls.SPDataSource コントロールを使用して、フォームを標準 ASP.NET コントロールにバインドし、データを更新できます。

重要重要

Web パーツをリスト アイテムの表示、編集、および新規作成フォーム (DispForm.aspx、EditForm.aspx、および NewForm.aspx) に追加することもできますが、この処理はお勧めできないか、SharePoint Foundation ではサポートされていません。リスト ビュー ページ (AllItems.aspx) への Web パーツの追加はサポートされています。