Поделиться через


Создание пользовательского элемента управления для формы

Дата последнего изменения: 7 июля 2010 г.

Применимо к: SharePoint Foundation 2010

В этой статье
Элемент управления ListFieldIterator
Пример
Пример

Чтобы настраивать формы элементов списка, можно расширить серверный элемент управления Microsoft SharePoint Foundation, используемый по умолчанию, для определения собственных элементов управления, а затем переопределить шаблон формы по умолчанию на пользовательский шаблон со ссылкой на пользовательский элемент управления. Можно создать библиотеку классов, которая определяет пользовательский класс, добавить библиотеку DLL проекта в глобальный кэш сборок (GAC), а затем добавить ASCX-файл, содержащий определение шаблона пользовательского элемента управления со ссылкой для DLL во вложенную папку в каталоге %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES.

Элемент управления ListFieldIterator

Элемент управления Microsoft.SharePoint.WebControls.ListFieldIterator используется для нумерации полей элементов для отображения в форме. Данный элемент управления вставляется в формы элементов списка при помощи комплекта вложенных шаблонов элементов управления, определяемых в файле с расширением DefaultTemplates.ascx, который расположен в каталоге %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATES\CONTROLTEMPLATES. В шаблоне DocumentLibraryForm задаются элементы управления панели инструментов и ссылки для формы. Кроме того, этот шаблон также вставляет шаблон DocumentLibraryFormCore. Данный шаблон, в свою очередь, вставляет элемент управления DocumentLibraryFields. Шаблоном по умолчанию для элемента управления DocumentLibraryFields является FileFormFields, элемент управления, определенный в файле DefaultTemplates.ascx, который вставляет элемент управления ListFieldIterator.

Пример

В приведенном ниже примере определяется пользовательский элемент управления итератора поля списка, который расширяет класс ListFieldIterator, переопределяющий его метод IsFieldExcluded. В примере предотвращается отображение определенных полей в формах библиотеки документа для пользователей, являющихся членами какой-либо группы, кроме случаев, когда они являются администраторами сайта.

Imports System
Imports System.Collections.Generic
Imports System.Text
Imports Microsoft.SharePoint
Imports Microsoft.SharePoint.WebControls

Namespace CustomOverrideControls

   Public Class CustomListFieldIterator
      Inherits ListFieldIterator
      
      Protected Overrides Function IsFieldExcluded(field As SPField) As Boolean
         Dim site As SPWeb = SPContext.Current.Web
         Dim groupId As Integer = site.Groups("ExcludeGroup").ID
         
         If site.IsCurrentUserMemberOfGroup(groupId) AndAlso field.Title = "MySpecialColumn" AndAlso site.CurrentUser.IsSiteAdmin = False Then
            Return True
         End If
         Return MyBase.IsFieldExcluded(field)
      End Function 'IsFieldExcluded
   End Class 'CustomListFieldIterator
End Namespace 'CustomOverrideControls
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;

namespace CustomOverrideControls
{
   public class CustomListFieldIterator : ListFieldIterator
   {
      protected override bool IsFieldExcluded(SPField field)
      {
         SPWeb site = SPContext.Current.Web;
         int groupId = site.Groups["ExcludeGroup"].ID;

         if (site.IsCurrentUserMemberOfGroup(groupId) && field.Title == "MySpecialColumn" && site.CurrentUser.IsSiteAdmin == false)
         {
            return true;
         }
         return base.IsFieldExcluded(field);
      }
   }
}

Для создания пользовательского элемента управления, расширяющего итератора поля списка

  1. В Microsoft Visual Studio щелкните Файл, выберите Создать, а затем щелкните Проект.

  2. В разделе Установленные шаблоны диалогового окна Создать проект выберите язык проекта, в качестве шаблона проекта выберите Библиотека классов, введите имя и расположение файлов создаваемого проекта, а затем нажмите кнопку ОК.

  3. Для добавления ссылки к сборке Microsoft.SharePoint щелкните правой кнопкой мыши проект в обозревателе решений, и на вкладке .NET в диалоговом окне Добавить ссылку выберите Microsoft SharePoint а затем нажмите кнопку ОК.

  4. Чтобы задать пользовательской сборке строгое имя при построении проекта, щелкните правой кнопкой мыши проект в окне Обозреватель решений, выберите Подписывание, выберите Подписать сборку, а затем выберите имя для файла ключей строго имени.

  5. Дважды щелкните CS-файл или VB-файл проекта в обозревателе решений и добавьте код, аналогичный приведенному в предыдущем примере, чтобы определить класс для пользовательского элемента управления, который расширяет элемент управления SharePoint Foundation.

  6. Для построения решения нажмите CTRL+SHIFT+B.

  7. Чтобы скопировать проект DLL в глобальный кэш сборок (GAC), используйте служебную программу командной строки gacutil.exe, которая устанавливается вместе с пакетом SDK Microsoft .NET Framework 2.0. В командной строке введите следующую команду: gacutil.exe -if "<Full file system path to DLL>".

Для реализации пользовательского элемента управления формы нужно создать ASCX-файл, включающий в себя шаблон управления, переопределяющий шаблон по умолчанию для вставки пользовательского элемента управления в страницу формы.

Пример

В следующем примере определяются три вложенных пользовательских шаблона для формы. Первый шаблон переопределяет шаблон DocumentLibraryForm для создания ссылки на второй шаблон, CustomDocumentLibraryFormCore. Данный шаблон, в свою очередь, определяет третий шаблон, CustomFileFormFields, как шаблон, определяющий элемент управления DocumentLibraryFields. Третий шаблон вставляет пользовательский итератор поля списка, который может быть определен в библиотеке классов как предыдущем примере.

<SharePoint:RenderingTemplate ID="DocumentLibraryForm" runat="server">
  <Template>
    <SharePoint:InformationBar runat="server"/>
    <wssuc:ToolBar CssClass="ms-formtoolbar" id="toolBarTbltop" RightButtonSeparator="&nbsp;" runat="server">
      <Template_RightButtons>
        <SharePoint:SaveButton TabIndex=1 runat="server"/>
        <SharePoint:GoBackButton runat="server"/>
      </Template_RightButtons>
    </wssuc:ToolBar>
    <SharePoint:FormToolBar runat="server"/>
    <SharePoint:FormComponent TemplateName="CustomDocumentLibraryFormCore" runat="server"/>
  </Template>
</SharePoint:RenderingTemplate>

<SharePoint:RenderingTemplate ID="CustomDocumentLibraryFormCore" 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 TemplateName="CustomFileFormFields" 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="&nbsp;" 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>

<SharePoint:RenderingTemplate ID="CustomFileFormFields" runat="server">
  <Template>
    <CustomOverrideControls:CustomListFieldIterator runat="server"/>
  </Template>
</SharePoint:RenderingTemplate>

Для создания файла шаблона пользовательского элемента управления для библиотек документов

  1. Создайте пользовательский элемент управления в проекте SharePoint, как описано в разделе Практическое руководство. Создание пользовательского элемента управления для страницы приложения или веб-части SharePoint. При развертывании проекта Visual Studio создает вложенную папку проекта в каталоге %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATES\CONTROLTEMPLATES, который содержит ASCX-файл.

  2. Добавьте определение шаблона в ASCX-файл, переопределяющий заданный шаблон элемента управления по умолчанию, как показано в предыдущем примере.

  3. Перезапустите службы IIS, чтобы изменения вступили в силу.

  4. Чтобы проверить работоспособность предыдущего примера, создайте с помощью пользовательского интерфейса поле с именем, начинающимся на "z", и перейдите к форме для элемента в библиотеке документов, чтобы просмотреть изменения.