Identificadores de tipo de contenido

Última modificación: lunes, 01 de noviembre de 2010

Hace referencia a: SharePoint Foundation 2010

En este artículo
Identificador de tipo de contenido primario + dos valores hexadecimales
Identificador de tipo de contenido primario + "00" + GUID hexadecimal
Longitudes de los identificadores de tipo de contenido
Trabajo con identificadores de tipo de contenido en XML declarativo
Trabajo con identificadores de tipos de contenido en código

Disponible en SharePoint Online

Los identificadores de tipo de contenido identifican de forma única el tipo de contenido y están diseñados para ser recursivos. El identificador de tipo de contenido encapsula el linaje del tipo de contenido o la línea de tipos de contenido primarios de la que se hereda el tipo de contenido. Cada identificador de tipo de contenido contiene el identificador del tipo de contenido primario, el cual contiene a su vez el identificador del elemento primario de dicho tipo de contenido, y así sucesivamente hasta llegar al identificador de tipo de contenido del sistema (incluido). SharePoint Foundation usa esta información para determinar la relación entre tipos de contenido y operaciones de propagación.

Puede crear un identificador de tipo de contenido válido con una de estas dos convenciones:

  • Identificador de tipo de contenido primario + dos valores hexadecimales (los dos valores hexadecimales no pueden ser "00")

  • Identificador de tipo de contenido primario + "00" + GUID hexadecimal

Nota

El identificador de tipo de contenido debe ser único en una colección de sitios.

En general, la primera técnica para generar identificadores de tipo de contenido destaca por su brevedad, ya que solo se usan dos dígitos hexadecimales para indicar un tipo de contenido nuevo. La segunda técnica destaca por la exclusividad, mediante la inclusión de un GUID para indicar el tipo de contenido nuevo. Cada técnica es más adecuada para determinadas situaciones.

Identificador de tipo de contenido primario + dos valores hexadecimales

SharePoint Foundation usa esta convención para generar identificadores de tipo de contenido para los tipos de contenido predeterminados que se incluyen con la plataforma. Por ejemplo, el identificador de tipo de contenido del tipo de contenido básico Item es 0x01. Esto indica que el tipo de contenido Item es un elemento secundario directo de System. El identificador de tipo de contenido del tipo de contenido Document es 0x0101 y el tipo de contenido Folder tiene un identificador de tipo de contenido 0x0120. Mediante el análisis de estos identificadores de tipo de contenido, puede determinar si Document y Folder son elementos secundarios directos de Item, el cual se hereda a su vez directamente de System, según se muestra en la siguiente figura.

Identificador de tipo de contenido de documento

Mediante esta convención, puede determinar no sólo de qué tipos de contenido se hereda un tipo de contenido, sino también en qué punto dos tipos de contenido tienen antecesores comunes.

En la siguiente figura se muestra la relación de los cuatro tipos de contenido descritos anteriormente. En cada tipo de contenido, la parte única del identificador de tipo de contenido se representa mediante texto de color azul.

Ejemplo de jerarquía de identificadores de tipo de contenido predeterminada

Identificador de tipo de contenido primario + "00" + GUID hexadecimal

Cuando crea identificadores de tipo de contenido, SharePoint Foundation usa esta convención de generación de identificadores de tipo de contenido para lo siguiente:

  • Tipos de contenido de sitio creados a partir de otros tipos de contenido.

  • Tipos de contenido de lista, los cuales se copian a una lista al agregar un tipo de contenido de sitio a dicha lista.

Por ejemplo, si tiene un tipo de contenido con un identificador de tipo de contenido "0x010100D5C2F139516B419D801AC6C18942554D", debe saber que el tipo de contenido se corresponde con una de las opciones siguientes:

  • Un tipo de contenido de sitio que es un elemento secundario directo del tipo de contenido Documento.

  • Un tipo de contenido de lista que se creó al agregar el tipo de contenido de sitio Document a una lista.

Se recomienda usar la técnica de GUID para identificar todos los tipos de contenido que son elementos secundarios directos de tipos de contenido que no ha creado. Use la técnica de GUID si el tipo de contenido primario es uno de los siguientes:

  • Un tipo de contenido predeterminado incluido en SharePoint Foundation, como Documento.

  • Un tipo de contenido desarrollado por terceros. De este modo, se garantiza que el identificador de tipo de contenido sea único y que no lo duplicará más adelante el programador del tipo de contenido primario.

No obstante, después de identificar de forma única un tipo de contenido con la técnica de GUID, puede usar el primer método para identificar los elementos secundarios de dicho tipo de contenido. El GUID usado en el tipo de contenido puede actuar como un espacio de nombres para el tipo de contenido. Los elementos secundarios basados en este tipo de contenido se pueden identificar con tan solo dos dígitos hexadecimales. Dado que la longitud máxima de un identificador de tipo de contenido es finita, esta técnica maximiza el número de "generaciones" de tipos de contenido permitido.

Longitudes de los identificadores de tipo de contenido

Los identificadores de tipo de contenido tienen una longitud máxima de 512 bytes. Dado que cada byte puede incluir dos caracteres hexadecimales, cada identificador de tipo de contenido tiene una longitud máxima válida de 1024 caracteres.

Por ejemplo, supongamos que crea un tipo de contenido nuevo, miDocumento, basado en el tipo de contenido predeterminado Document de SharePoint Foundation. Para el identificador del tipo de contenido miDocumento, debe empezar por el identificador de tipo de contenido Document, 0x0101, y anexar 00 y un GUID. De este modo, se identifica de forma única el tipo de contenido miDocumento, lo que garantiza que SharePoint Foundation no agregue otro tipo de contenido predeterminado más adelante con el mismo identificador de tipo de contenido (lo que podría ocurrir si anexa solo dos dígitos hexadecimales). No obstante, para generar identificadores de tipo de contenido para los tipos de contenido derivados de miDocumento, basta con anexar dos dígitos hexadecimales al identificador de tipo de contenido miDocumento. Así, se mantiene la longitud del identificador de tipo de documento en un mínimo, lo que maximiza el número de "generaciones" de tipos de contenido permitido.

En la siguiente figura se muestra este escenario. La parte única de cada identificador de tipo de contenido se representa mediante texto de color azul.

Ejemplo de jerarquía de identificadores de tipo de contenido

Trabajo con identificadores de tipo de contenido en XML declarativo

Puede crear un nuevo tipo de contenido de sitio como parte de una característica mediante el uso de XML declarativo en un archivo de manifiesto del elemento. SharePoint Foundation proporciona una definición de esquema XML para este propósito. Para obtener más información, vea Definiciones de tipo de contenido.

El elemento de nivel superior en una definición de tipo de contenido es ContentType. Este elemento tiene un atributo ID obligatorio cuyo valor debe ser una cadena con formato de identificador de tipo de contenido. Si no puede dar un formato adecuado al identificador relativo a un nuevo tipo de contenido, recibirá un error al intentar activar la característica en la que se ha definido. Para evitar este error, cree el identificador del nuevo tipo de contenido siguiendo meticulosamente las reglas descritas en este tema.

Para crear un identificador para un tipo de contenido derivado de un tipo de contenido integrado, comience con la cadena hexadecimal que identifica el tipo de contenido integrado, anexe dos ceros y, a continuación, agregue un GUID al que se haya quitado toda la puntuación. Por ejemplo, la cadena hexadecimal que identifica el tipo de contenido Item es "0x01". El identificador para un tipo de contenido derivado de Item debería tener un aspecto como el siguiente:

0x0100A33D9AD9805788419BDAAC2CCB37509F

Para crear identificadores relativos a más tipos de contenido que hereden del tipo de contenido, simplemente anexe "01", "02", y así sucesivamente.

SugerenciaSugerencia

Los identificadores de tipos de contenido integrados importantes se enumeran en Jerarquía de tipos de contenido base. Además, puede hacer referencia rápidamente al identificador de un tipo de contenido que está disponible para un sitio, para lo cual deberá seleccionar Configuración del sitio en Cinta de Server y, a continuación, hacer clic en Tipos de contenido de sitio en la sección Galerías. Cuando mueva el mouse sobre el vínculo de un tipo de contenido, se mostrará el identificador del tipo de contenido en la barra de estado del explorador.

El siguiente ejemplo es un manifiesto de elemento de una característica que crea tres tipos de contenido. El primer tipo de contenido nuevo, Financial Document, se deriva del tipo de contenido Document. Financial Document, a su vez, es el tipo de contenido primario de los nuevos tipos de contenido Purchase Order e Invoice.

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="https://schemas.microsoft.com/sharepoint/">

  <!-- Parent: Document (0x0101) -->
  <ContentType ID="0x0101000728167cd9c94899925ba69c4af6743e"
               Name="Financial Document"
               Group="Financial Content Types"
               Description="Base financial content type"
               Version="0">
    <FieldRefs>
      <FieldRef ID="{1511BF28-A787-4061-B2E1-71F64CC93FD5}" Name="OrderDate" DisplayName="Date" Required="FALSE"/>
      <FieldRef ID="{060E50AC-E9C1-4D3C-B1F9-DE0BCAC300F6}" Name="Amount" DisplayName="Amount" Required="FALSE"/>
    </FieldRefs>
  </ContentType>

  <!-- Parent: Financial Document (0x0101000728167cd9c94899925ba69c4af6743e) -->
  <ContentType ID="0x0101000728167cd9c94899925ba69c4af6743e01"
               Name="PurchaseOrder"
               Group="Financial Content Types"
               Description="Used for creating purchase orders"
               Inherits="TRUE"
               Version="0">
    <FieldRefs>
      <FieldRef ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" Name="Title" DisplayName="Item" Required="TRUE" Sealed="TRUE"/>
      <FieldRef ID="{943E7530-5E2B-4C02-8259-CCD93A9ECB18}" Name="CostCenter" DisplayName="Department" Required="TRUE"/>
    </FieldRefs>
    <DocumentTemplate TargetName="PurchaseOrder.docx"/>
  </ContentType>

  <!-- Parent: Financial Document (0x0101000728167cd9c94899925ba69c4af6743e) -->
  <ContentType ID="0x0101000728167cd9c94899925ba69c4af6743e02"
                Name="Invoice"
                Group="Financial Content Types"
                Description="Used for creating customer invoices"
                Inherits="TRUE"
                Version="0">
    <FieldRefs>
      <FieldRef ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" Name="Title" DisplayName="Service" Required="TRUE" Sealed="TRUE"/>
      <FieldRef ID="{86811853-7E52-4515-A88D-A8FA9D450905}" Name="Client" DisplayName="Client Name" Required="TRUE"/>
    </FieldRefs>
    <DocumentTemplate TargetName="Invoice.docx" />
  </ContentType>
</Elements>

Trabajo con identificadores de tipos de contenido en código

El valor devuelto por la propiedad Id de un objeto SPContentType en código del servidor o por la misma propiedad de un objeto ContentType en código del cliente no es una cadena hexadecimal. Se trata de un objeto de tipo SPContentTypeId en código del servidor y de tipo ContentTypeId en el cliente.

Si conoce la cadena hexadecimal de un identificador de tipo de contenido, puede obtener el objeto correspondiente pasando la cadena al constructor de la clase adecuada. Por ejemplo, en el siguiente código de servidor se construye un objeto SPContentTypeId que representa el identificador para el tipo de contenido Document.

using (SPSite site = new SPSite(https://localhost))
{
   using (SPWeb web = site.OpenWeb())
   {
      // Get the Document content type.
      SPContentTypeId documentCTypeId = new SPContentTypeId("0x0101");
      SPContentType documentCType = web.AvailableContentTypes[documentCTypeId];

      // Do something.
      ...
   }
}

No es necesario conocer el identificador hexadecimal de los tipos de contenido que se incluyen en SharePoint Foundation. En su lugar, se pueden usar los campos de la clase SPBuiltInContentTypeId. Por ejemplo, siempre que el código deba representar el identificador del tipo de contenido Document, podrá usar SPBuiltInContentTypeId.Document en lugar de "0x0101". El siguiente código ilustra esta técnica.

using (SPSite site = new SPSite(https://localhost))
{
   using (SPWeb web = site.OpenWeb())
   {
      // Get the Document content type.
      SPContentType documentCType = web.AvailableContentTypes[SPBuiltinContentTypeId.Document];

      // Do something.
      ...
   }
}

Al crear su propio tipo de contenido en el código, no es necesario crear un identificador específico, sino que puede hacer que el sistema genere un identificador en función del identificador del tipo de contenido del cual deriva el tipo de contenido creado.

Por ejemplo, en la aplicación de consola siguiente se crea un nuevo tipo de contenido Customer que deriva del tipo de contenido Item. La aplicación hace del nuevo tipo de contenido un tipo de contenido de sitio agregándolo a la colección de tipos de contenido del sitio. A continuación, aplica el tipo de contenido a una lista al agregarlo a la colección de tipos de contenido de la lista. Por último, la aplicación imprime los identificadores para los tres tipos de contenido: el tipo de contenido primario, el nuevo tipo de contenido de sitio y el nuevo tipo de contenido de lista.

using System;
using Microsoft.SharePoint;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            using (SPSite site = new SPSite("https://localhost"))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    // Get a reference to the Item content type.
                    SPContentType parentCType = web.AvailableContentTypes[SPBuiltInContentTypeId.Item];

                    // Create a Customer content type derived from the Item content type.
                    SPContentType childCType = new SPContentType(parentCType, web.ContentTypes, "Customer");

                    // Add the new content type to the site collection.
                    childCType = web.ContentTypes.Add(childCType);

                    // Add it to a list.
                    SPList list = web.Lists["Announcements"];
                    list.ContentTypesEnabled = true;
                    SPContentType listCType = list.ContentTypes.Add(childCType);

                    // Print the IDs.
                    Console.WriteLine("Parent content type ID: {0}", parentCType.Id.ToString());
                    Console.WriteLine("Site content type ID:   {0}", childCType.Id.ToString());
                    Console.WriteLine("List content type ID:   {0}", listCType.Id.ToString());
                }
            }

            Console.Write("\nPress ENTER to continue...");
            Console.ReadLine();
        }
    }
}

En la consola, se imprime el resultado siguiente:

Parent content type ID: 0x01
Site content type ID:   0x0100A33D9AD9805788419BDAAC2CCB37509F
List content type ID:   0x0100A33D9AD9805788419BDAAC2CCB37509F006454F8883E8BA648A632E5ACB47CAD9B

Press ENTER to continue...

Vea también

Referencia

SPContentTypeId

SPBuiltInContentTypeId

Conceptos

Jerarquía de tipos de contenido base

Tipos de contenido de listas y sitios

Creación de tipos de contenido