SharePoint 2010: Limites con las soluciones SandBox (I)!

Una de las novedades de SharePoint 2010 es la posibilidad de crear artefactos de SharePoint 2010 en modo SandBox, es decir, que se ejecuten en un entorno aislado de manera que si hay algo erróneo en los mismos, no se afecte a la granja completa sino a un nivel inferior. Ese nivel inferior es el que determinan las Colecciones de Sitios ya que son los administradores de las mismas los encargados de subir y cargar las soluciones SandBox. De esta forma, si el artefacto desplegado presenta un problema que introduzca una penalización en el rendimiento, alguna mala práctica de codificación o la simple violación de una regla, únicamente afectará a la Colección de Sitios donde se haya activado.

Precisamente al ser los administradores de la Colección de Sitios los encargados de subir y activar esta solución introduce otra ventaja: no es necesario recurrir al administrador de la granja para que despliegue este tipo de soluciones. De esta manera, se puede dedicar a monitorizar que soluciones están dando problemas en una cierta Colección de Sitios, monitorización que por otro lado es realizada automáticamente por el sistema que se encarga de generar los correspondientes avisos y bloquear aquellas soluciones SandBox que estén dando problemas. Por otro lado, este tipo de soluciones vienen a resolver el problema que se encontraban los administradores de SharePoint a la hora de desplegar estos artefactos: como securizarlos. Una solución de tipo SandBox se ejecuta de forma segura per sé y evita estos quebraderos de cabeza a los administradores. En este primer post sobre soluciones de tipo SandBox veremos cuales son sus características principales.

¿Qué artefactos se pueden crear en modo SandBox?

Básicamente aquellos que no impliquen que se tiene que subir archivos a disco o ensamblados a la GAC. Por lo tanto, no podremos crear web parts de tipo visual. Estos artefactos son:

  • Web Parts clásicas.
  • Listas.
  • Plantillas de lista.
  • Acciones personalizadas.
  • Workflows
  • Manejadores de eventos.
  • Tipos de contenidos.
  • Columnas de Sitio.

¿Cuál es el límite que tengo en mis desarrollos a nivel de modelo de objetos?

Pues básicamente, dentro de una solución SandBox sólo se permite desarrollar desde el nivel de Colección de Sitios hacía abajo. Además, hay restricciones como que no es posible utilizar SPSecurity y otras clase de seguridad. Asimismo, no es posible crear colecciones de sitios con SPSite.  Visual Studio 2010 se encarga de ocultar en el intellisense el que se pueda hacer uso de estas clases…ahora bien, como veremos, esta limitación se puede superar de forma sencilla :-(.

Probando las prestaciones de las soluciones SandBox

Para probar las prestaciones de las soluciones SandBox, voy a crear una WebPart clásica en la que incumpla alguna de las condiciones comentadas. En mi caso, voy a hacer uso de SPSecurity:

  • Para ello, en primer lugar he creado un proyecto vacío de SharePoint 2010.
  • En el asistente de creación del proyecto  he indicado que el despliegue se va realizar en modo SandBox.
  • A continuación he añadido un nuevo elemento al proyecto de tipo Web Part (la clásica) al proyecto.
image image image
  • En el método CreateChildControls() de la Web Part, he intentado hacer uso de SPSecurity, pero el intellisense de Visual Studio 2010 no me lo mostraba por ningún lado como era de esperar, ya que no se permite su uso en soluciones de tipo SandBox.

image

  • Ahora bien, nada impide que añadamos SPSecurity porque conocemos esta clase y entonces el intellisense si que aparece…mi gozo en un pozo :-(. Una clase que está prohibida en las soluciones de tipo SandBox se puede usar sin problemas, ya que no se hace ningún tipo de chequeo en tiempo de codificación y de compilación de que el código que se está utilizando sea permitido o no. El problema viene dado porque nuestro proyecto tiene una referencia al ensamblado Microsoft.SharePoint.dll almacenado en la carpeta ISAPI, es decir, a todo el modelo de objetos de SharePoint.
  • Pero veamos que pasa si la usamos. Para ello, en el método CreateChildControls de la Web Part he añadido el siguiente código:

            base.CreateChildControls();

            Label lblData = new Label();

                         SPSecurity.RunWithElevatedPrivileges(delegate

                

                lblData.Text = “This shouldn’t work”;

            });

            this.Controls.Add(lblData);

  •  Tras compilar mi Web Part, he hecho el despliegue de la misma a través de la opción Deploy de Visual Studio 2010. El despliegue se realiza sin problemas.

Usando la Web Part en un Sitio de SharePoint 2010

Para utilizar una Web Part creada en modo SandBox, tenemos que:

  • Navegar hasta la administración de la Colección de Sitios dónde se ha desplegado.
  • Dentro de la sección Galerías, hacemos clic en Soluciones. Esta biblioteca especial contiene todas las soluciones de tipo SandBox (por supuesto, son archivos .WSP) que se hayan desplegado en la Colección de Sitios.
  • Comprobamos que nuestra WebPart aparece y está activada (Visual Studio activa la Web Part en el proceso de despliegue…realmente activa la característica correspondiente.
  • Si ahora utilizamos nuestra Web Part en nuestro Sitio de SharePoint 2010, veremos que se muestra un error…estamos utilizando un objeto no permitido, es decir, en tiempo de ejecución si que se comprueba que el código del artefacto desplegado esté utilizando elementos permitidos.
image image image

 

¿Cómo evito estas situaciones?

Esta es la pregunta que muchos os estaréis haciendo, y la respuesta es que de dos formas:

  • La primera es marcar a fuego a tu equipo de desarrollo de SharePoint que cuando creen soluciones SandBox utilicen la librería Microsoft.SharePoint.dll contenida en [..]14UserCodeAssembliesMicrosoft.SharePoint.dll que contiene aquellos elementos del modelo de objetos de SharePoint 2010 que se pueden usar en soluciones SandBox. De esta forma, se evita que se usen objetos no permitidos ya que Visual Studio 2010 mostrará el correspondiente error. Luego, cuando el artefacto de SharePoint 2010 esté concluido cambiamos la referencia por la original y que contiene toda el modelo de objetos de SharePoint 2010. Cómo veis, el error que se muestra es que SPSecurity no existe en el contexto actual.

image

  • La segunda es crear un validador de soluciones SandBox que en el proceso de despliegue de la solución analice el código  y no active la solución en el caso de detectar algo erróneo. SharePoint 2010 por defecto incluye un validador, pero no chequea el código. Si chequea por ejemplo que no se esté intentando desplegar un artefacto que requiera copiar archivos en disco o ensamblados en la GAC.

Y hasta aquí llega este primer post sobre soluciones SandBox. Espero que os haya parecido interesante.

Publicado por

Juan Carlos González

Juan Carlos es Ingeniero de Telecomunicaciones por la Universidad de Valladolid y Diplomado en Ciencias Empresariales por la Universidad Oberta de Catalunya (UOC). Cuenta con más de 12 años de experiencia en tecnologías y plataformas de Microsoft diversas (SQL Server, Visual Studio, .NET Framework, etc.), aunque su trabajo diario gira en torno a SharePoint & Office 365. Juan Carlos es MVP de Office Servers & Services desde 2015 (anteriormente fue reconocido por Microsoft como MVP de Office 365 y MVP de SharePoint Server desde 2008 hasta 2015), coordinador del grupo de usuarios .NET de Cantabria (Nuberos.Net, www.nuberos.es), co-fundador y coordinador del Grupo de Usuarios de SharePoint de España (SUGES, www.suges.es), así como co-director de la revista gratuita en castellano sobre SharePoint CompartiMOSS (www.compartimoss.com). Hasta la fecha, ha publicado 8 libros sobre SharePoint & Office 365 y varios artículos en castellano y en inglés sobre ambas plataformas.

10 comentarios en “SharePoint 2010: Limites con las soluciones SandBox (I)!”

  1. Tengo una preguntota tal vez muy obia pero soy nuevo, voy a desarrollar para sharepoint 2010, pero no se si instalar el visual studio 2010 en el servidor y desde ahi desarrollar por medio de control remoto desde mi maquina, o desarrollar desde mi maquina con la librerias sharepoint, y las .wps generadas hacerles deploy en sharepoint por medio del remote desktop?

  2. Hola EM Tabares,
    Ni se te ocurra instalar VS 2010 en el servidor. Las opciones de desrrollo pasan por:
    – Instalar Visual Studio 2010 en una máquina virtual en la que tengas SharePoint 2010. Para virtualizar tienes varias opciones: virtualBox (gratuito), VMWare WorkStation y Microsoft Hyper-V.
    – Instalar VS 2010 en local en tu máquina con Windows 7 o Windows Vista x64 en la que tengas instalado SharePoint 2010 en local.
    – Crear un VHD con Windows 7 en el que instales VS 2010 y SharePoint 2007.

    Saludos

  3. Gracias

    Juan Carlos González Martín

    por la respuesta y el tiempo invertido, pero bueno no tuve de otra que hacerlo asi puesto que en mi empresa tienen todo bien controlado y los requerimientos te tardan mucho tiempo en instalartelos y no se si me den una licencia de windows server 2008 y visual studio para una maquina virtual. Bueno hice las peticiones a un colega superior y pues ya esta instalado ya ni chance de decirle que mejor en una maquina virtual (ademas que me asignaron un equipo xp, vale que soy training y asi me pusieron las cosas)ya empeze a hacer web parts y es sumamente facil construilar el problema ocurrido es el siguiente, quiero hacer deploy sobre el localhost:

    “The local sharepoint server source is not avalible. Check that server is runing and connected to the sharepoint farm ”

    Es que no tengo permisos sobre la granja, y lo que quiero es hacer deploy sobre las webpart sin afectar el sharepoint, es que no me han otorgado permisos sobre la granja, tengo una cuenta en el servidor, de que manera podria hacer deploy sin necesidad de afectar al servidor solo hacer uso para consatar que no hay problemas con la webpart.

    Otra cosa que de malo tiene desarrollar sobre el servidor…?

    Gracias, y saludos.

    pd buen post lo voy a ser en mi casa con mi pc.

  4. ok ok, diran este tonto tiene la respuesta aqui, por medio de un sand box, lamentablemente tengo que hacer un web part de tipo visual, y lamentablemente es la mayor excepcion en un sanbox, bueno a ver si pueden ayudarme tengo una aplicacion hecha en html con javascript con css, en el cual se despliega un organigrama hace drilldown y otras cosillas graficas, el chiste es ponerlo en sharepoint, y la unica manera que se me ocurre es por medio de un webpart de tipo visual, alguna idea de como podria meter mi organigrama empresarial, esto tiene valor agregado porque se tiene planes es que este organigrama realize nuevos nodos, guarde en base datos, sea muy grafico etc. alguna idea de como agregarlo al sharepoint…. (apenas llevo metido una semana en esto disculpen la ignorancia).

  5. Hola EM Tabares,
    Si no quieres afectar a la granja, tienes que optar por crear soluciones SandBox…puedes crearlas de forma visual instalando las Visual Studio SharePoint PowerTools (lo puedes encontrar en este post). De todos modos, puedes también desarrollar soluciones de tipo granja e instalarlas y des-instalarlas sin tener porque dañar a tu granja.

    Saludos

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *