Создание настраиваемых шаблонов форм
Дата последнего изменения: 22 сентября 2010 г.
Применимо к: SharePoint Foundation 2010
Шаблоны элементов управления Microsoft ASP.NET, определенные в файле DefaultTemplates.ascx, находящемся в папке "%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES\", определяют макет форм элементов списка Microsoft SharePoint Foundation 2010. Эти шаблоны могут содержать элементы управления, которые, в свою очередь, используют другие шаблоны элементов управления для определения макета формы. Эти элементы управления могут содержать разметку HTML и веб-элементы управления, но не могут содержать операторы привязки к данным, включая синтаксис <%#...%>. Для глобального переопределения шаблона элемента управления по умолчанию на интерфейсном веб-сервере можно добавить пользовательский ASCX-файл в каталог "\CONTROLTEMPLATES" с идентификатором шаблона элемента управления, соответствующим идентификатору шаблона, существующего в файле DefaultTemplates.ascx. Дополнительные сведения о создании пользовательского элемента управления в Microsoft Visual Studio см. в статье, посвященной созданию пользовательского элемента управления для страницы приложения или веб-страницы SharePoint.
Создание настраиваемых шаблонов
Кроме переопределения шаблонов по умолчанию можно создавать собственные настраиваемые шаблоны форм и ссылаться на них при помощи типа списка или типа контента. Для регистрации настраиваемого шаблона форм по типу списка укажите имя шаблона формы в атрибуте Template в теге <Form> в файле Schema.xml определения списка, как в следующем примере.
<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>
В следующем примере определяется две дополнительных пользовательских формы.
<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>
Для регистрации настраиваемого шаблона форм по типу контента добавьте определение, наподобие приведенного ниже, в качестве дочернего в теге <ContentType> в файле Elements.xml для компонента.
<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".
Структура шаблона
Шаблоны элементов управления на базе 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.FormComponent, который, в свою очередь, является производным от Microsoft.SharePoint.WebControls.TemplateBasedControl, что означает, что компоненты сами по себе могут использоваться в качестве шаблонов.
Но большая часть формы отображается при помощи отдельного шаблона, заданного в файле DefaultTemplates.ascx с идентификатором DocumentLibraryFormCore.Этот шаблон состоит из различных компонентов, включая структуру 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 в этом примере является DocumentLibraryFields, который ссылается на элемент управления Microsoft.SharePoint.WebControls.DocumentLibraryFields, производный от класса Microsoft.SharePoint.WebControls.ListFieldIterator. Итератор полей списка содержит логику распределения полей в столбцы. Однако класс ListFieldIterator отображает элементы управления, только если они не были переопределены в шаблонах. Поэтому при добавлении элемента управления полем для конкретного поля (например элемента управления, который помещает элемент управления полем заголовка в правый верхний угол, а элемент управления полем автора под ним) итератор не сможет расположить этот элемент управления в макете. Вместо этого можно указать собственный итератор полей списка, производный от класса ListFieldIterator, и создать собственную настраиваемую логику для итерации полей.
Шаблон DocumentLibraryForm можно переопределить и указать другой шаблон DocumentLibraryFormCore. После этого можно настраивать шаблон формы, указывая уже существующие элементы управления или добавляя ссылки на другие настраиваемые элементы управления, заданные в сборке или в ASCX-файле.
Важно! |
---|
Редактирование файлов Default.ascx, устанавливаемых SharePoint Foundation по умолчанию на интерфейсных веб-серверах, не поддерживается. Изменения, вносимые в исходно установленные файлы, могут быть перезаписаны при установке обновлений или пакетов обновлений для SharePoint Foundation либо при переходе на новую версию продукта. |