Si tu solución de SharePoint posee varios webparts, quizá quieras considerar lo que os cuento en breve, de cara a tener una organización de los items del proyecto algo más limpia, y evitar entradas SafeControl innecesarias en el web.config.

Imaginemos que nuestra solución tiene 3 webparts visuales, añadidos a través de la plantilla de Visual Studio. Quedaría algo así:

image

Para empezar, fijaros en los NameSpaces que tenemos, para cada webpart:










Un poco “feo” bajo mi punto de vista. Además, si nos vamos a las propiedades de cada webpart, y nos fijamos en la colección de Safe Control Entries:

image

image

Vemos que tenemos una entrada SafeControl, y lo mismo para el resto de webparts. Esto hará, que al desplegarlo, tengamos 3 entradas en nuestro Web.Config:






¿No sería más limpio organizar los Namespaces de forma algo más lógica, y sólo tener una entrada a nivel de web.config, que incluya todos los webparts de nuestra solución?

Vamos a ello !!

Primero de todo, ya que los webparts visuales se basan en controles de usuario, y es posible que nuestra solución tenga otros controles de usuario, vamos a añadir la carpeta mapeada de SharePoint “ControlTemplates”, y creamos una carpeta para todos nuestros controles:

image image

Ahora vamos a mover los controles de usuario que usan los webparts visuales, a esa carpeta. Y ya que estamos, vamos a cambiar el Namespace de los 3 controles, para que todos pertenezcan al mismo Namespace.


Recordar que al cambiar el Namespace, también lo tenemos que hacer en el fichero .ascx, en el atributo “Inherits” de la directiva “Control”:










Ahora tenemos que cambiar algunas cosas de los webparts.

Primero de todo, ya que no queremos varias entradas SafeControl en el web.config, las eliminamos de las propiedades.

image

Lo siguiente es re-apuntar a la nueva ubicación de los controles:
























Y ya que nos ponemos, vamos a cambiar el Namespace de los webparts, y agruparlos en el mismo:


Al cambiar el Namespace, tenemos que actualizar también el fichero .webpart






























Para acabar, nos falta configurar la solución para que genere una única entrada de SafeControl en el web.config. Para ello, vamos a utilizar el editor del Manifest del paquete de nuestra solución. Este editor, permite combinar el XML que ha autogenerado Visual Studio, con nuestros propios valores insertados en el cuadro de texto.

image

Añadimos nuestra entrada de SafeControl:




















Si hacemos el Deploy de la solución, ya vemos que tenemos una única entrada SafeControl en el web.config:










Al indicar el TypeName como “*”, estamos incluyendo todos los controles de ese Namespace (todos nuestros webparts de la solución).

Si además, vemos nuestra DLL con algún “Decompiler” (Reflector, ILSpy, JustDecompile…), vamos que nuestro namespaces, webparts y controls, están ordenaditos:

image

Si tenemos una solución con mucho desarrollo personalizado, seguro que agradecemos este orden.

Espero que os sirva.

Saludos!!

30