Compartir a través de


Procedimiento para crear un control personalizado para un formulario

Última modificación: miércoles, 07 de julio de 2010

Hace referencia a: SharePoint Foundation 2010

En este artículo
Control ListFieldIterator
Ejemplo
Ejemplo

Para personalizar formularios de elementos de lista, se puede extender un control de servidor de Microsoft SharePoint Foundation predeterminado que defina su propio control personalizado y, a continuación, invalidar una plantilla de formulario predeterminado existente con una plantilla personalizada que haga referencia a su control personalizado. Se puede crear una biblioteca de clases que defina una clase personalizada, agregar el archivo DLL del proyecto en la memoria caché de ensamblados global (GAC) y, a continuación, agregar un archivo .ascx que contenga una definición de plantilla de control personalizado y que haga referencia al archivo DLL a una subcarpeta de %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES.

Control ListFieldIterator

El control Microsoft.SharePoint.WebControls.ListFieldIterator se usa para enumerar campos de elementos que deben mostrarse en un formulario. Este control se inserta en formularios de elementos de lista a través de una serie de plantillas de control anidadas que se definen en el archivo DefaultTemplates.ascx que se encuentra en el directorio %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATES\CONTROLTEMPLATES. La plantilla DocumentLibraryForm dispone los controles de la barra de herramientas y los vínculos para el formulario, pero también inserta la plantilla DocumentLibraryFormCore. Esta plantilla, a su vez, inserta un control DocumentLibraryFields. La plantilla predeterminada del control DocumentLibraryFields es FileFormFields, un control que está definido en el archivo DefaultTemplates.ascx que inserta el control ListFieldIterator.

Ejemplo

En el ejemplo siguiente, se define un control del iterador de campo de lista personalizada que extiende la clase ListFieldIterator, invalidando su método IsFieldExcluded. El ejemplo impide que un campo específico se muestre en los formularios de la biblioteca de documentos a los usuarios que sean miembros de un grupo determinado, a menos que sean administradores de sitios.

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

Para crear un control personalizado para extender el iterador de campo de lista

  1. En Microsoft Visual Studio, haga clic en Archivo, elija Nuevo y, a continuación, haga clic en Proyecto.

  2. En el cuadro de diálogo Nuevo proyecto, seleccione el idioma del proyecto en el cuadro Plantillas instaladas, seleccione Biblioteca de clases como plantilla de proyecto, escriba un nombre y una ubicación para crear el proyecto, y haga clic en Aceptar.

  3. Para agregar una referencia al ensamblado Microsoft.SharePoint, haga clic con el botón secundario en el Explorador de soluciones y, en la ficha .NET del cuadro de diálogo Agregar referencia, seleccione Microsoft SharePoint y haga clic en Aceptar.

  4. Para asignar un nombre seguro al ensamblado personalizado cuando cree el proyecto, haga clic con el botón secundario en el proyecto en el Explorador de soluciones, haga clic en Firma, seleccione Firmar el ensamblado y especifique un nombre para el archivo de clave con nombre seguro.

  5. Haga doble clic en el archivo de proyecto .cs o .vb en el Explorador de soluciones y agregue código como en el ejemplo anterior para definir una clase para un control personalizado que extienda un control de SharePoint Foundation.

  6. Presione CTRL+MAYÚS+B para crear la solución.

  7. Use gacutil.exe, la utilidad de línea de comandos que se instala con el kit de desarrollo de software de Microsoft .NET Framework 2.0, para copiar la DLL del proyecto a la memoria caché global de ensamblados (GAC). Escriba un comando similar al siguiente en el símbolo del sistema: gacutil.exe -if "<Full file system path to DLL>".

Para implementar un control de formulario personalizado, debe crear un archivo .ascx que contenga una plantilla de control que invalide una plantilla predeterminada para insertar el control personalizado en la página de formulario.

Ejemplo

En el ejemplo siguiente, se definen tres plantillas personalizadas anidadas para un formulario. La primera plantilla invalida la plantilla DocumentLibraryForm para crear una referencia a la segunda plantilla, CustomDocumentLibraryFormCore. Esta plantilla, a su vez, especifica la tercera plantilla, CustomFileFormFields, como la plantilla que lo define para el control DocumentLibraryFields. La tercera plantilla inserta un iterador de campo de lista personalizada que se puede definir en una biblioteca de clases como en el ejemplo anterior.

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

Para crear un archivo de plantilla de control personalizado para bibliotecas de documentos

  1. Cree un control de usuario en un proyecto de SharePoint, como se describe en el procedimiento para crear un control de usuario para una página de aplicación o elemento web de SharePoint. Al implementar el proyecto, Visual Studio crea una subcarpeta del proyecto en el directorio %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATES\CONTROLTEMPLATES que contiene el archivo .ascx.

  2. Agregue una definición de plantilla al archivo .ascx que invalide una plantilla de control predeterminada específica, como en el ejemplo anterior.

  3. Restablezca Internet Information Services (IIS) para que los cambios puedan surtir efecto.

  4. Para probar el ejemplo anterior, cree un campo a través de la interfaz de usuario cuyo título comience con "z" y vaya a un formulario de un elemento en la biblioteca de documentos para ver los cambios.