Freigeben über


Gewusst wie: Erstellen eines benutzerdefinierten Steuerelements für ein Formular

Letzte Änderung: Mittwoch, 7. Juli 2010

Gilt für: SharePoint Foundation 2010

Inhalt dieses Artikels
ListFieldIterator-Steuerelement
Beispiel
Beispiel

Wenn Sie Listenelementformulare anpassen möchten, können Sie ein standardmäßiges Microsoft SharePoint Foundation-Serversteuerelement erweitern, um Ihr eigenes benutzerdefiniertes Steuerelement zu definieren und anschließend eine vorhandene Standardformularvorlage mit einer benutzerdefinierten Vorlage zu überschreiben, die auf das benutzerdefinierte Steuerelement verweist. Sie können eine Klassenbibliothek zur Definition einer benutzerdefinierten Klasse erstellen, die DLL des Projekts dem globalen Assemblycache (Global Assembly Cache, GAC) hinzufügen und dann eine ASCX-Datei mit einer benutzerdefinierten Steuerelementvorlagendefinition hinzufügen, die die DLL auf einen Unterordner innerhalb von %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES zeigen lässt.

ListFieldIterator-Steuerelement

Das Microsoft.SharePoint.WebControls.ListFieldIterator-Steuerelement wird zur Enumeration von Elementfeldern zur Anzeige in einem Formular verwendet. Dieses Steuerelement wird in Listenelementformulare über einer Gruppe von geschachtelten Steuerelementvorlagen eingefügt, die in der DefaultTemplates.ascx-Datei definiert sind. Diese Datei befindet sich im Verzeichnis %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATES\CONTROLTEMPLATES. Die DocumentLibraryForm-Vorlage gibt das Layout der Symbolleistensteuerelemente und Hyperlinks für das Formular an, von dieser Vorlage wird jedoch auch die DocumentLibraryFormCore-Vorlage eingefügt. Diese Vorlage wiederum fügt ein DocumentLibraryFields-Steuerelement ein. Die Standardvorlage für das DocumentLibraryFields-Steuerelement ist FileFormFields, ein Steuerelement, das in der DefaultTemplates.ascx-Datei definiert ist, die das ListFieldIterator-Steuerelement einfügt.

Beispiel

Im folgenden Beispiel wird ein benutzerdefiniertes Listenfelditerator-Steuerelement definiert, das die ListFieldIterator-Klasse erweitert und seine IsFieldExcluded-Methode überschreibt. Im Beispiel wird verhindert, dass ein bestimmtes Feld in Dokumentbibliotheksformularen für Benutzer angezeigt wird, die Mitglieder einer bestimmten Gruppe sind, es sei denn, es handelt sich um Websiteadministratoren.

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);
      }
   }
}

So erstellen Sie ein benutzerdefiniertes Steuerelement zum Erweitern des Listenfelditerators

  1. Klicken Sie in Microsoft Visual Studio auf Datei, zeigen Sie auf Neu, und klicken Sie dann auf Projekt.

  2. Wählen Sie im Dialogfeld Neues Projekt die Sprache für das Projekt im Feld Installierte Vorlagen aus, wählen Sie Klassenbibliothek als Projektvorlage aus, geben Sie einen Namen und Speicherort für die Erstellung des Projekts ein, und klicken Sie dann auf OK.

  3. Wenn Sie einen Verweis auf die Microsoft.SharePoint-Assembly hinzufügen möchten, klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie auf der Registerkarte .NET im Dialogfeld Verweis hinzufügen die Option Microsoft SharePoint aus. Klicken Sie dann auf OK.

  4. Wenn Sie der benutzerdefinierten Assembly beim Erstellen des Projekts einen starken Namen geben möchten, klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, klicken Sie auf Signieren, wählen Sie Assembly signieren aus, und geben Sie einen Namen für die Schlüsseldatei mit starkem Namen an.

  5. Doppelklicken Sie im Projektmappen-Explorer auf die CS- oder VB-Datei des Projekts, und fügen Sie Code wie im vorherigen Beispiel ein, um eine Klasse für ein benutzerdefiniertes Steuerelement zu definieren, das ein SharePoint Foundation-Steuerelement erweitert.

  6. Drücken Sie STRG+UMSCHALT+B, um die Lösung zu erstellen.

  7. Verwenden Sie gacutil.exe, das mit dem Microsoft .NET Framework 2.0 Software Development Kit installierte Befehlszeilenprogramm, um die Projekt-DLL in den globalen Assemblycache (Global Assembly Cache, GAC) zu kopieren. Geben Sie einen Befehl wie den Folgenden an der Eingabeaufforderung ein: gacutil.exe -if "<Full file system path to DLL>".

Zum Implementieren eines benutzerdefinierten Formularsteuerelements müssen Sie einen ASCX-Datei mit einer Steuerelementvorlage erstellen, die eine Standardvorlage überschreibt, die wiederum das Einfügen des benutzerdefinierten Steuerelements in die Formularseite ermöglicht.

Beispiel

Im folgenden Beispiel werden drei geschachtelte benutzerdefinierte Vorlagen für ein Formular definiert. Mit der ersten Vorlage wird die DocumentLibraryForm-Vorlage überschrieben, um einen Verweis auf die zweite Vorlage zu erstellen, CustomDocumentLibraryFormCore. Diese Vorlage wiederum gibt eine dritte Vorlage, CustomFileFormFields, als die definierende Vorlage für das DocumentLibraryFields-Steuerelement an. Die dritte Vorlage fügt einen benutzerdefinierten Listenfelditerator ein, der in einer Klassenbibliothek wie im vorherigen Beispiel definiert werden kann.

<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>

So erstellen Sie eine benutzerdefinierte Steuerelementvorlagendatei für Dokumentbibliotheken

  1. Erstellen Sie ein Benutzersteuerelement in einem SharePoint-Projekt wie unter Gewusst wie: Erstellen eines Benutzersteuerelements für eine Anwendungsseite oder ein Webpart in SharePoint beschrieben. Wenn Sie das Projekt bereitstellen, erstellt Visual Studio einen Projektunterordner im Verzeichnis %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATES\CONTROLTEMPLATES, der die ASCX-Datei enthält.

  2. Fügen Sie der ASCX-Datei eine Vorlagendefinition hinzu, die eine bestimmte Standardsteuerelementvorlage überschreibt, wie im vorherigen Beispiel gezeigt.

  3. Setzen Sie Internetinformationsdienste (Internet Information Services, IIS) zurück, sodass die Änderungen übernommen werden.

  4. Erstellen Sie zum Testen des vorherigen Beispiels ein Feld über die Benutzeroberfläche, dessen Titel mit "z" beginnt, und navigieren Sie zu einem Formular für ein Element in der Dokumentbibliothek, um die Änderungen anzuzeigen.