カスタム フォーム テンプレートを作成する
最終更新日: 2010年9月22日
適用対象: SharePoint Foundation 2010
%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES\ の DefaultTemplates.ascx ファイルで定義されている Microsoft ASP.NET コントロール テンプレートは、Microsoft SharePoint Foundation 2010 リスト アイテム フォームのレイアウトを決定します。これらのテンプレートは、フォーム レイアウト定義に他のコントロール テンプレートを使用するコントロールをネストできます。コントロールには HTML マークアップと Web コントロールを含めることができますが、<%#...%> 構文を含むデータ バインドされたステートメントを含めることはできません。フロントエンド Web サーバーで既定のコントロール テンプレートをグローバルにオーバーライドするには、DefaultTemplates.ascx ファイル内の既存のコントロール テンプレートの ID と一致するコントロール テンプレート識別子 (ID) を持つカスタム .ascx ファイルを \CONTROLTEMPLATES ディレクトリに追加します。Microsoft Visual Studio でユーザー コントロールを作成する方法については、「How to: Create a User Control for a SharePoint Application Page or Web Part」を参照してください。
カスタム テンプレートを作成する
既定のテンプレートのオーバーライドに加えて、独自のカスタム フォーム テンプレートを作成し、リスト タイプまたはコンテンツ タイプによって参照できます。カスタム フォーム テンプレートをリスト タイプによって登録するには、リスト定義の Schema.xml ファイルで <Form> タグの Template 属性を使用してフォーム テンプレートの名前を指定します。次に例を示します。
<Forms>
<Form Type="DisplayForm" Url="DispForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
<Form Type="EditForm" Url="EditForm.aspx" SetupPath="pages\form.aspx" Template="MyCustomForm" WebPartZoneID="Main" />
<Form Type="NewForm" Url="NewForm.aspx" SetupPath="pages\form.aspx" Template="MyCustomForm" WebPartZoneID="Main" />
</Forms>
次の例では、2 つの追加カスタム フォームを定義しています。
<Forms>
<Form
Type="DisplayForm"
Url="DispForm.aspx"
SetupPath="pages\form.aspx"
WebPartZoneID="Main" Default="FALSE"/>
<Form
Type="DisplayForm"
Url="MyDispForm.aspx"
SetupPath="pages\form.aspx"
WebPartZoneID="Main"
UseDefaultListFormWebPart="False"
Default="TRUE">
<WebParts>
<AllUsersWebPart WebPartZoneID="Main" WebPartOrder="3"><![CDATA[
<WebPart xmlns="https://schemas.microsoft.com/WebPart/v2">
<Assembly>Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly
<TypeName>Microsoft.SharePoint.WebPartPages.ListFormWebPart</TypeName>
<PageType>PAGE_DISPLAYFORM</PageType>
</WebPart>]]>
</AllUsersWebPart>
<AllUsersWebPart WebPartZoneID="Main" WebPartOrder="1"><![CDATA[
<WebPart xmlns="https://schemas.microsoft.com/WebPart/v2">
<Assembly>Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly>
<TypeName>Microsoft.SharePoint.WebPartPages.ListViewWebPart</TypeName>
<PageType>PAGE_VIEW</PageType>
<ViewFlags>Hidden ReadOnly Html</ViewFlags>
</WebPart>]]>
</AllUsersWebPart>
</WebParts>
</Form>
<Form
Type="EditForm"
Url="EditForm.aspx"
SetupPath="pages\form.aspx"
WebPartZoneID="Main" />
<Form
Type="EditForm"
Url="MyEditForm.aspx"
SetupPath="pages\form.aspx"
WebPartZoneID="Main"
Default="TRUE"
UseDefaultListFormWebPart="False"
WebPartOrder="1">
<WebParts>
<AllUsersWebPart WebPartZoneID="Main" WebPartOrder="1"><![CDATA[
<WebPart xmlns="https://schemas.microsoft.com/WebPart/v2">
<Assembly>Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly>
<TypeName>Microsoft.SharePoint.WebPartPages.ListViewWebPart</TypeName>
<PageType>PAGE_VIEW</PageType>
<ViewFlags>Hidden ReadOnly Html</ViewFlags>
</WebPart>]]>
</AllUsersWebPart>
<AllUsersWebPart WebPartZoneID="Main" WebPartOrder="2"><![CDATA[
<WebPart xmlns="https://schemas.microsoft.com/WebPart/v2" xmlns:iwp="https://schemas.microsoft.com/WebPart/v2/Image">
<Assembly>Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly>
<TypeName>Microsoft.SharePoint.WebPartPages.ImageWebPart</TypeName>
<FrameType>None</FrameType>
<Title>Site Image</Title>
<iwp:ImageLink>/_layouts/images/homepage.gif</iwp:ImageLink>
<iwp:AlternativeText>Logo</iwp:AlternativeText>
</WebPart>]]>
</AllUsersWebPart>
<AllUsersWebPart WebPartZoneID="Main" WebPartOrder="3"><![CDATA[
<WebPart xmlns="https://schemas.microsoft.com/WebPart/v2">
<Assembly>Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly>
<TypeName>Microsoft.SharePoint.WebPartPages.ListFormWebPart</TypeName>
<PageType>PAGE_EDITFORM</PageType>
</WebPart>]]>
</AllUsersWebPart>
<View BaseViewID="1" WebPartZoneID="Main" WebPartOrder="4" />
</WebParts>
</Form>
<Form
Type="NewForm"
Url="NewForm.aspx"
SetupPath="pages\form.aspx"
WebPartZoneID="Main" />
</Forms>
カスタム フォーム テンプレートをコンテンツ タイプによって登録するには、機能のElements.xml ファイルで <ContentType> タグの子として次のような定義を追加します。
<XmlDocuments>
<XmlDocument NamespaceURI="https://schemas.microsoft.com/sharepoint/v3/contenttype/forms">
<FormTemplates xmlns="https://schemas.microsoft.com/sharepoint/v3/contenttype/forms">
<Display>MyCustomForm</Display>
<Edit>MyCustomForm</Edit>
<New>MyCustomForm</New>
</FormTemplates>
</XmlDocument>
</XmlDocuments>
前の例の "MyCustomForm"は、\CONTROLTEMPLATES ディレクトリに追加するカスタム コントロール テンプレートの ID です。
テンプレートの構造
ASCX ベースのコントロール テンプレートは、複数のコントロールをネストされた構造にまとめます。この構造では、コントロール自体がテンプレートから構成されます。この構造は、より充実したリスト アイテム フォームに使用できます。
%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES で定義されているドキュメント ライブラリ フォーム テンプレートは、コントロール テンプレート構造の優れた例を提供しています。次の例に、ドキュメント ライブラリ フォームに対して定義されている既定のコントロール テンプレートを示します。
<SharePoint:RenderingTemplate ID="DocumentLibraryForm" runat="server">
<Template>
<SharePoint:InformationBar runat="server"/>
<wssuc:ToolBar CssClass="ms-formtoolbar" id="toolBarTbltop" RightButtonSeparator=" " runat="server">
<Template_RightButtons>
<SharePoint:SaveButton runat="server"/>
<SharePoint:GoBackButton runat="server"/>
</Template_RightButtons>
</wssuc:ToolBar>
<SharePoint:FormToolBar runat="server"/>
<SharePoint:FormComponent TemplateName="DocumentLibraryFormCore" runat="server"/>
</Template>
</SharePoint:RenderingTemplate>
この例では、ドキュメント ライブラリ フォーム テンプレートが複数のコンポーネントを描画して完全なフォーム テンプレートをレイアウトします。これらのコンポーネントの多くは、Microsoft.SharePoint.WebControls.TemplateBasedControl から派生する Microsoft.SharePoint.WebControls.FormComponent 基本クラスから派生し、コンポーネントが自身をテンプレートに挿入できることを意味します。
ただし、ほとんどのフォームは、実際には ID が DocumentLibraryFormCore である DefaultTemplates.ascx で定義された別のテンプレートを使用してレンダリングされます。このテンプレートは、次の例に示すように、ページ レイアウトを編成するのに役立つテーブルベースの HTML 構造など、さまざまなコンポーネントから構成されます。
<SharePoint:RenderingTemplate ID="DocumentLibraryFormCore" runat="server">
<Template>
<TABLE class="ms-formtable" style="margin-top: 8px;" border=0 cellpadding=0 id="formTbl" cellspacing=0 width=100%>
<SharePoint:ChangeContentType runat="server"/>
<SharePoint:DocumentLibraryFields runat="server"/>
<SharePoint:ApprovalStatus runat="server"/>
</TABLE>
<SharePoint:WebPartPageMaintenanceMessage runat="server"/>
<SharePoint:DocumentTransformersInfo runat="server"/>
<table cellpadding=0 cellspacing=0 width=100%><tr><td class="ms-formline"><IMG SRC="/_layouts/images/blank.gif" width=1 height=1 alt=""></td></tr></table>
<TABLE cellpadding=0 cellspacing=0 width=100% style="padding-top: 7px"><tr><td width=100%>
<SharePoint:ItemHiddenVersion runat="server"/>
<SharePoint:InitContentType runat="server"/>
<wssuc:ToolBar CssClass="ms-formtoolbar" id="toolBarTbl" RightButtonSeparator=" " runat="server">
<Template_Buttons>
<SharePoint:CreatedModifiedInfo runat="server"/>
</Template_Buttons>
<Template_RightButtons>
<SharePoint:SaveButton runat="server"/>
<SharePoint:GoBackButton runat="server"/>
</Template_RightButtons>
</wssuc:ToolBar>
</td></tr></TABLE>
</Template>
</SharePoint:RenderingTemplate>
この例の DocumentLibraryFormCore テンプレート内の重要なコンポーネントは、Microsoft.SharePoint.WebControls.ListFieldIterator クラスから派生した Microsoft.SharePoint.WebControls.DocumentLibraryFields コントロールを参照する DocumentLibraryFields コンポーネントです。リスト フィールド反復子には、フィールドを表形式でレイアウトするためのロジックが含まれます。ただし、ListFieldIterator クラスは、テンプレートでオーバーライドされていない場合にのみコントロールをレンダリングします。したがって、特定のフィールドのフィールド コントロール (たとえば、右上にタイトル フィールド コントロールを挿入し、その下に作成者フィールド コントロールを挿入するコントロール) を追加した場合、反復子はコントロールをレイアウトしません。代わりに、ListFieldIterator クラスから派生する独自のリスト フィールド反復子を指定し、フィールド反復を行うカスタム ロジックを提供することも選択できます。
DocumentLibraryForm テンプレートをオーバーライドし、別の DocumentLibraryFormCore テンプレート指定できます。さらに、そこからフォーム テンプレートをカスタマイズし、既存のコントロールを指定するか、アセンブリまたは .ascx ファイルで定義されている他のカスタム コントロールへの参照を追加できます。
重要 |
---|
SharePoint Foundation よってフロントエンド Web サーバーにインストールされた Default.ascx ファイルの編集はサポートされていません。もともとインストールされているファイルに対する変更は、SharePoint Foundation の更新やサービス パックをインストールしたり、インストールを次の製品バージョンにアップグレードしたりすると、上書きされる可能性があります。 |