El hombre sabe mucho más de lo que comprende. Alfred Adler

Cómo modificar un ContentType de SharePoint desde SQL Server 2005 | www.orsalis.com

Cómo modificar un ContentType de SharePoint desde SQL Server 2005

angerurothentrada publicada por angeruroth el 19/03/2010 a las 14:50
última actualización: 19/03/2010 a las 15:05 (0 comentarios, vista 301 veces)
categorías: Tecnologia
valoración: 3 - normal (2 votos)


Cómo modificar un ContentType de SharePoint desde SQL Server 2005



¿Cuándo debería usar esto?


1. Cuando al crear un nuevo tipo de contenido desde SharePoint de algún problema con la herencia, y también si falla.


2. Cuando quiera modificar un ContentType de forma rápida y sencilla.


¿Cómo lo hago?


1. El ContentType debe estar creado con su nombre definitivo. No importa si tiene herencia o no.


2. En la tabla ContentTypes, ejecutar la siguiente sentencia, cambiando [NOMBRE TIPO] por el nombre que le dimos a nuestro ContentType al crearlo:


SELECT SiteId, sys.fn_varbintohexstr(ContentTypeId) AS ID, Class, Scope, ContentTypeId, Version, NextChildByte, Size, Definition, ResourceDir, IsFromFeature FROM ContentTypes WHERE (ResourceDir = '[NOMBRE TIPO]')


La columna ContentTypeId, que contiene el GUID del tipo de contenido es de tipo varbinary, por lo que no puede ser leída/modificada de la forma habitual.


La función sys.fn_varbintohexstr(ContentTypeId) nos permite consultarla como si fuera de tipo varchar.


Editamos el XMl que hay en el campo Definition de nuestro ContentType, y cambiamos el principio:


<ContentType ID="[GUID]" Name="[NOMBRE TIPO]" Group="[NOMBRE GRUPO]" Version="1">


Podemos modificar el [GUID] para cambiar la herencia de este campo.


NO DEBEMOS CAMBIAR EL [NOMBRE TIPO]. Solo cambiaríamos su descripción, pero no variaría su relación con los recursos ni su nombre interno.


[NOMBRE GRUPO] es el nombre del grupo al que pertenece el tipo de contenido. NO DEBEMOS CAMBIARLO DESDE AQUÍ. No obstante, sí podemos cambiarlo desde SharePoint.


3. Si hemos cambiado el [GUID] del campo Definition, debemos cambiar también el campo ID.


Para ello, debemos ejecutar la siguiente sentencia:


declare @hexstring varchar(max);
set @hexstring = '[GUID]';
update ContentTypes set ContentTypeId =
(select cast('' as xml).value('xs:hexBinary(substring(sql:variable("@hexstring"), sql:column("t.pos")))', 'varbinary(max)')
from (select case substring(@hexstring, 1, 2) when '0x' then 3 else 0 end) as t(pos))
where sys.fn_varbintohexstr(ContentTypeId) = '[GUID ANTERIOR]'
go


[GUID] es el GUID que hemos escrito en el XML.


[GUID ANTERIOR] es el GUID que había en el campo ContentTypeId.


4. Modificando el XML podemos añadir y eliminar campos a nuestro tipo de contenido, insertando o quitando, dentro de la sección <FieldRefs>:


<FieldRefID="{a60a63b9-6ae5-4351-be6b-ff27edb774a3}"Name="Multimedia" />


Siendo a60a63b9-6ae5-4351-be6b-ff27edb774a3 el GUID del control que define a la columna llamada Multimedia.


NO DEBEMOS QUITAR LAS SIGUIENTES LÍNEAS:
<FieldRefID="{c042a256-787d-4a6f-8a8a-cf6ab767f12d}"Name="ContentType" />
<FieldRef ID="{5f47e085-2150-41dc-b661-442f3027f552}"Name="SelectFilename" />
<FieldRefID="{8553196d-ec8d-4564-9861-3dbe931050c8}"Name="FileLeafRef" Required="TRUE" />
<FieldRefID="{8c06beca-0777-48f7-91c7-6da68bc07b69}" Name="Created"Hidden="TRUE" />
<FieldRef ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}"Name="Title" Required="FALSE"ShowInNewForm="FALSE" ShowInEditForm="TRUE" />
<FieldRefID="{28cf69c5-fa48-462a-b5cd-27b6f9d2bd5f}" Name="Modified"Hidden="TRUE" />
<FieldRefID="{822c78e3-1ea9-4943-b449-57863ad33ca9}" Name="Modified_x0020_By"Hidden="FALSE" />
<FieldRefID="{4dd7e525-8d6b-4cb4-9d3e-44ee25f973eb}"Name="Created_x0020_By" Hidden="FALSE" />

TODO LO QUE HAGAMOS SERÁ DEBAJO DE LAS LÍNEAS INDICADAS.


5. Sobre la herencia, esta está incluída en el GUID de los ContentTypes, por lo que para cambiarla deberemos modificar, como se explicó antes, este campo.


Así funciona la herencia:


0x0102001A48C1A2B071432EACA85A0A35FF5185


0x es el item por defecto.


01 es el índice de item dentro de la colección de items que heredan de 0x.


02 es el índice de item dentro de la colección de items que heredan de 0x01.


Y así sucesivamente: el GUID del primer item que herede de 0x0102 empezará con 0x010201, el segundo con 0x010202, etc.


Después de esta sección de herencia, SIEMPRE hay dos ceros (00).


Después del 00 haparece el GUID propiamente dicho (alfanumérico de 32 opsiciones), sin herencia ni nada.


Luego volvemos al 00, luego al siguiente GUID, etc.


Un ejemplo de dos GUIDs que heredan del mismo tipo de contenido:


0x010100c568db52d9d0a14d9b2fdcc96666e9f2007948130ec3db064584e219954237af3900dd626ac604b3f945b95bd4ab77bce7fa03



0x010100c568db52d9d0a14d9b2fdcc96666e9f2007948130ec3db064584e219954237af3900dd626ac604b3f945b95bd4ab77bce7fa04


Como vemos solo cambian los dos últimos caracteres, ya que heredan exáctamente del mismo sitio. Solo cambia el índice dentro de la colección de ContentTypes que heredan de esto.


Notas


Para herencia de Features deberíamos modificar el fichero [12]\TEMPLATE\FEATURES\ctypes\ctypeswss.xml, cuyo XML es bastante autoexplicativo, por lo que no entraremos en eso ahora.


Baste decir que entendiendo lo explicado anteriormente podemos crear, modificar y eliminar tipos de contenido de SharePoint directamente desde SQL Server 2005.


Aquí nos hemos centrado en la modificación de ContentTypes porque la creación desde cero de un tipo de contenido implica generar un GUID a partir de nada, relacionarlo con el fichero de recursos de SharePoint, etc.


Es mucho más sencillo (y más seguro de cara a la integridad de datos) crear el tipo desde SharePoint, cosa que se puede hacer programáticamente o a mano, y luego modificarlo.


Referencias


http://sharepointmagazine.net/technical/development/customizing-the-user-experience-of-sharepoint-content-type-user-interface-part-4-of-6




valoración: 3 - normal (2 votos)
Añade tu comentario



 english - française - deutsche