SharePoint 2010: ¿Para qué sirve la propiedad AllowUnsafeUpdates?

Si algo caracteriza a SharePoint es que está diseñado con la idea de que sea seguro y se eviten por ejemplo situaciones de cross-site scripting cuando estamos creando artefactos en los que se hace uso del modelo de objetos (MO)…y de aquí viene la idea de escribir este artículo. Básicamente SharePoint aplica una comprobación de seguridad cada vez que se realiza un cambio de información o datos a través del MO en peticiones HTTP. De hecho, los propios formularios de SharePoint utilizan un “form digest control” para forzar y garantizar que las operaciones sean seguras. Esto implica que cuando se realizan cambios en datos de SharePoint a través del MO en un GET, SharePoint “escupirá” una excepción de validación de seguridad…algo así como “Microsoft.SharePoint.SPException: The Security validation for this page is invalid”…la pregunta que surge aquí es si esta validación la podemos “saltar” en formularios o páginas que no herden de la propia infraestructura de páginas de SharePoint…la respuesta es que sí a través de la propiedad AllowUnsafeUpdates presente en SPSite y SPWeb:

   1: SPWeb spwWeb = SPContext.Current.Web:

   2: SPList splLista = spwWeb.Lists["Mi Lista"];

   3: try{

   4:     spwWeb.AllowUnsafeUpdates=true;

   5:     splLista.Title="Nuevo Título";

   6:     splLista.Update();

   7: }

   8: finally{

   9:     spwWeb.AllowUnsafeUpdates=false;

  10: }

Referencias:

SharePoint 2010: Como tener BD’s de contenido diferentes por colección de sitios (I)!

Como ocurría en SharePoint 2007, en SharePoint 2010 a la hora de crear nuevas colecciones de sitios tenemos la posibilidad de hacerlo sobre bases de datos (BDs) de contenidos independientes en lugar de hacerlo sobre la BD creada inicialmente cuando se creo la aplicación web bajo la que se están definiendo las colecciones de sitios. El proceso a seguir para esta configuración es el siguiente:

  • En la Administración Central de SharePoint 2010 nos vamos a la sección Bases de Datos dentro Administración de Aplicaciones. Aquí pulsamos sobre el enlace “Administrar bases de datos de contenidos”.
  • En la página que se abre, podemos ver el listado de BDs de contenidos disponibles para cada aplicación web que seleccionemos. En el caso de ejemplo, tenemos una única BD de contenidos que procedemos a editar a través del correspondiente enlace.
  • En la página de configuración de la BD cambiamos el estado de la misma a “Sin conexión” de manera que se puede seguir trabajando con las colecciones de sitios ya creadas en dicha BD, pero no se pueden crear nuevas colecciones sobre la misma.
image image image
  • De vuelta al listado de BD’s de contenido veremos que el estado de la BD aparece como “Detenido”. Si pulsamos sobre “Agregar nueva base de datos de contenido” procederemos a crear una nueva BD de contenidos para la aplicación web.
  • En este caso, los parámetros mínimos para su creación son el nombre del servidor de BD y el nombre de la BD de contenidos a crear.
  • Una vez que hemos creado la BD, veremos que el estado de la misma en el listado de BDs de contenidos vinculadas a la aplicación web es “Iniciado” de manera que cada nueva colección de sitios que se cree en la aplicación web residirá en esta BD.
image image image

Productividad: Nuevo video de Microsoft sobre la visión particular de Microsoft!

Cada cierto tiempo Microsoft publica videos en torno a su visión particular de la tecnología en los próximos años y anticipando como será la forma que tendremos de interactuar con la misma, siempre con un cierto toque futurista claro está. El último video enfocado a temas de productividad lo podéis localizar desde este enlace y os lo dejo en este post…merece la pena.

Productivity Future Vision (2011)

SharePoint 2010: Como usar un entorno compartido de CloudShare durante 14 días!

Como ya he comentado en varios posts, en mi caso tengo mi entorno de pruebas y desarrollo de SharePoint 2010 montado en CloudShare lo que me facilita el disponer del HW adecuado para poder aprovechar toda las capacidades de la plataforma sin problemas de rendimiento, realizar snapshots del entorno de manera que pueda volver a una versión estable en cualquier momento o compartir este entorno a través de la siguiente Url: http://use.cloudshare.com/Pro/ShareEnv/QAU2K5Q5K4KH. De manera que cualquiera puede durante 14 días usar dicho entorno…y precisamente sobre estos 14 días va el post de hoy ya que el tiempo de vida inicial del entorno una vez que se usa la Url anterior y se crea la cuenta de CloudShare es de 2 días, por lo que para poder usarlo durante 14 días en modo trial tenemos que hacer lo siguiente:

  • En primer lugar, tras introducir la Url anterior en nuestro navegador habitual tendremos que rellenar un formulario para crear una cuenta de CloudShare.
  • Una vez introducidos los datos y tras realizar el envío de los mismos, recibiremos en el correo electrónico un código de activación que tenemos que usar en la siguiente página que se muestra en el proceso de dar de alta la cuenta.
  • Tras pulsar “Verify” seremos redirigidos al entorno compartido que está basado en el último snapshot realizado por el usuario de CloudShare y que ha compartido con el enlace anterior (denominado Permalink en la plataforma CloudShare). Este entorno lo podremos usar durante 2 días, y para poder extender su uso a los 14 días que tenemos para probar CloudShare con la cuenta Trial que acabamos de crear pulsamos en primer lugar el botón “View environment”.
image image image
  • A continuación, accedemos al entorno de CloudShare y esperamos a que las máquinas que lo constituyen se hayan iniciado. En ese momento, se habilitará el botón “Take ownership” que nos permite hacernos propietarios de ese entorno compartido durante el tiempo de vida de la cuenta Trial, es decir, los 14 días comentados.
  • Tras pulsar ese botón, podremos comprobar que efectivamente el tiempo de vida del entorno ha pasado de los 2 días iniciales a loas 14 comentados.
image image

Para concluir el post, quería comentaros que esta funcionalidad de crear y compartir entornos con buenas prestaciones en términos de HW, además de otras muchas capacidades, la tenéis disponible dentro del servicio CloudShare Pro Plus y si estás interesados en adquirir el servicio puedo conseguiros descuentos. Finalmente, os recuerdo otros posts sobre el uso de CloudShare con SharePoint:

SharePoint 2010: Cómo crear un nivel de permisos a partir de uno existente (I)!

Como sabéis, todo sitio de SharePoint 2010 dispone por defecto de unos niveles de permisos que son función de la plantilla de sitio en la que se basa el sitio y que definen una agrupación de permisos individuales. Por supuesto, es posible crear nuevos niveles de permisos desde cero o bien a partir de uno existente:

  • Entramos en la página de configuración del sitio y bajo la sección Usuarios y permisos pulsamos sobre Permisos el sitio.
  • En la página con el listado de grupos de SharePoint del sitio y el nivel de permisos asociado, pulsamos sobre la opción “Niveles de permisos” de la Ribbon.
  • En la nueva página que se abre podremos crear un nuevo nivel de permisos desde cero o bien visualizar el detalle de un nivel existente para poder crear un nuevo nivel basado en el mismo.
image image image
  • Entramos en la página de detalle de uno de los niveles de permisos existentes.
  • Pulsamos el botón “Copiar nivel de permisos”.
  • A continuación se muestra una nueva página en la que podremos especificar el nombre del nuevo nivel de permisos y añadir nuevos permisos individuales si es necesario.
image image image

SharePoint Online: Las actualizaciones prometidas ya están aquí :-)!

Como comenté en este artículo y se reveló en la SharePoint Conference de este año, la primera actualización para SharePoint Online estaba al caer…y ya ha caído. Esta mañana, después del correspondiente aviso por correo electrónico, pude comprobar como en la administración de SharePoint Online aparecen dos nuevos enlaces relativos a la conectividad de datos empresariales (o BCS) y el servicio de almacenamiento seguro (SSS):

  • Al acceder a la Tenant Administration de SharePoint Online, aparecen los dos nuevos enlaces comentados.
  • El primero de los enlaces permite acceder a la administración de los tipos de contenido externo que tengamos disponibles y realizar algunas de las configuraciones que conocemos de SharePoint On-Premise como dar permisos en los tipos de contenido externo disponibles, asignar administradores al almacén de metadatos, etc.
  • En el caso del servicio de almacenamiento seguro podremos crear IDs de aplicación que luego podamos usar para conectarnos a sistemas externos (os recuerdo que tiene que ser a través de servicios WCF).
image image image

Si navegamos a una de las colecciones de sitios disponibles, podremos ver que si eliminamos un sitio tenemos operativa y disponible la papelera de reciclaje de sitios:

image

SharePoint 2010: Desarrollo y depuración contra sitios remotos (I)!

Una pregunta habitual cuando se comienza a desarrollar en plataforma SharePoint es la relativa a como tiene que ser el entorno de desarrollo de manera que surgen interrogantes como: ¿Necesito tener instalado SharePoint 2010 en mi máquina de desarrollo? ¿Puedo evitar tener que instalarlo y sólo disponer de Visual Studio 2010? ¿Tiene sentido que todos los desarrolladores trabajen contra una misma instalación de SharePoint?, … seguro que a más de uno os han llegado este tipo de inquietudes. Lo primero que tenemos que tener en cuenta para ir respondiendo a las mismas es:

  • Los requerimientos de base para desarrollar contra SharePoint oficialmente publicados por Microsoft y expertos en la materia:
  • Aunque la recomendación es que cada desarrollador disponga de un entorno desarrollo completo de acuerdo a los requerimientos anteriores y teniendo en cuenta la flexibilidad de que disponemos para su configuración como ya comente en esta serie de posts, puede ser que en ciertos escenarios haya que buscar alternativas o workarounds no soportados y totalmente improductivos en el desarrollo en SharePoint que implique desarrollar en local sin tener instalado SharePoint 2010 y depurar de forma remota contra un servidor en el que si tengamos instalado SharePoint. Para que esto sea posible, y en función del tipo de solución (Sandbox vs Granja) tendremos que realizar una serie de configuraciones manuales en el servidor remoto de SharePoint como se indica en las siguientes referencias:
  • ¿Qué inconvenientes le veo yo a esta aproximación de desarrollo? Pues varios:
    • El primero, que tenemos que copiar el depurador de nuestro entorno de desarrollo al servidor…si se trata de un servidor de “desarrollo” esto no es tan malo, pero si es directamente el servidor de “pre-producción” ya estamos violando una de las reglas de que el ambiente de “pre-producción” debería ser una réplica al de producción…al meter estos ente extraño, estamos añadiendo una primera diferencia.
    • En segundo lugar, la creación y configuración de cuentas de depuración en el servidor que necesitemos para que la depuración remota sea posible.
    • En tercer lugar, el tiempo que tendremos que invertir (estas configuraciones no son inmediatas) para que la depuración remota esté operativa. Tiempo tanto de nuestros desarrolladores como de nuestro personal de IT.
    • Finalmente, y aunque la depuración remota es posible, en ningún sitio veréis que Microsoft recomiende su configuración y uso por sistema para crear soluciones para SharePoint…se debería utilizar la depuración remota cuando nos encontremos ante expedientes X en nuestros desarrollos que nos obliguen a depurar que está pasando en el servidor.

Finalmente os dejo una serie de referencias adicionales en torno a estas configuraciones que complementan a las ya comentadas:

WSS 3.0 & MOSS: Disponible el SP3!

Tal y como podéis leer en este enlace, Microsoft acaba de liberar el service pack 3 (SP3) para la versión 2007 de SharePoint (WSS 3.0 & MOSS). En ese mismo post se comenta que junto con el SP3 de SharePoint, también tenemos disponible el SP3 de Office 2007. Los enlaces de descarga respectivos son los siguientes:

2007 Microsoft Office Suite Service Pack 3 (SP3) and Microsoft Office Language Pack 2007 SP3

2526086

Suite: 32-bit ; LPK: 32-bit

2007 Microsoft Office servers Service Pack 3 (SP3) and 2007 Microsoft Office servers Language Pack (SP3)

2526299

Server Suite: 32-bit; LPK: 32-bit ; Server Suite: 64-bit; LPK: 64-bit

Office SharePoint Designer 2007 Service Pack 3 (SP3) and of Office SharePoint Designer Language Pack 2007 SP3

2526089

SharePoint Designer: 32-bit; LPK: 32bit

Office Project 2007 Service Pack 3 (SP3) and of Office Project Language Pack 2007 SP3

2526091

Project: 32-bit; Project LPK: 32-bit

Office Visio 2007 Service Pack 3 (SP3) and of Office Visio Language Pack 2007 SP3

2526291

Visio: 32-bit; Visio LPK: 32-bit

Office Proofing Tools 2007 Service Pack 3 (SP3)

2526293

32-bit

Microsoft Office Language Interface Pack 2007 Service Pack 3 (SP3)

2526307

32-bit

PowerPoint Viewer 2007 Service Pack 3 (SP3)

2526298

32-bit

Visio Viewer 2007 Service Pack 3 (SP3)

2526301

32-bit

Excel Viewer 2007 Service Pack 3 (SP3)

2526302

32-bit

Calendar Printing Assistant for Outlook 2007 Service Pack 3 (SP3)

2526294

32-bit

Microsoft Office InterConnect 2007 Service Pack 3 (SP3)

2526296

32-bit

Office Compatibility Pack Service Pack 3 (SP3)

2526297

32-bit

Microsoft Office Access Runtime and Data Connectivity Components 2007 Service Pack 3 (SP3)

2526310

32-bit

Windows SharePoint Services 3.0 Service Pack 3 (SP3) and of Windows SharePoint Services 3.0 Language Pack SP3

2526305

WSS 3.0: 32-bit; LPK: 32-bit ; WSS 3.0: 64-bit; LPK: 64-bit

Microsoft Expression Web 3 Service Pack 3 (SP3) and of Microsoft Expression Web Language Pack SP3

2575737

Expression Web : 32-bit; LPK: 32-bit

Known issues that you may experience when you install the 2007 Microsoft Office suite Service Pack 3 (SP3) and Windows SharePoint Services 3.0 SP3

2591067

n/a

List of all 2007 Office system Service Pack 3 and Windows SharePoint Services 3.0 Service Pack 3 packages

2591018

n/a

Technical details about the 2007 Microsoft Office System Service Pack 3 (SP3) releases

2591039

n/a

Technical details about the 2007 Microsoft Office Servers Service Pack 3 (SP3) releases

2591050

n/a

Technical details about the Windows SharePoint Services 3.0 Service Pack 3 (SP3) releases

2591054

n/a

SharePoint 2010: Como ejecutar un flujo de trabajo en varios elementos a la vez!

Una necesidad con la que me he encontrado hace poco es la de poder ejecutar un flujo de trabajo sobre varios elementos de una lista de forma simultanea. Por defecto, esta acción no se considera como “multi-elemento” en SharePoint 2010 por lo que necesariamente tenemos que buscar un workaround para conseguirlo…además, en mi caso resulta que no tengo posibilidad de desplegar lógica en el servidor por lo que necesariamente se tuvo que pensar en una solución con “cero” desarrollo…como habréis adivinado, esto nos lleva a pensar que posibilidades nos puede brindar SharePoint Designer 2010 (SPD 2010) para conseguir esto. Y efectivamente, es en el entorno de SPD 2010 junto con las posibilidades de la DataFormWebPart dónde podremos dar respuesta a esta necesidad…cómo siempre, alguien ya encontró el workaround que podéis encontrar en este enlace…solución efectiva diría yo.

SharePoint2010_thumb

SharePoint 2010: Apertura de ventanas modales y páginas desde acciones personalizadas (III)!

Siguiendo con la serie de posts en torno a la apertura de ventanas modales y páginas desde acciones personalizadas, en este nuevo artículo vamos a ver como podemos crear una acción personalizada de forma programática (que no declarativa) vinculada a una lista en exclusiva (algo que declarativamente no es posible de forma sencilla) y además desplegarla en nuestro sitio de SharePoint como una solución Sandbox lo que nos permitiría su uso en SharePoint Online en Office 365. Pero antes, os recuerdo los dos artículos previos de la serie:

Para abrir una ventana modal mediante una acción personalizada creada de forma programática:

  • En Visual Studio creamos un proyecto de tipo “Empty SharePoint Project”.
  • En el asistente de configuración especificamos como tipo de despliegue Sandbox.
  • Una vez creado el proyecto, a través del explorador de soluciones y situándonos en el nodo Feature añadimos una característica.
image image image
  • Configuramos la característica de forma adecuada, y le añadimos un Feature Event Receiver que es dónde vamos a añadir toda la lógica para la creación de la acción personalizada de forma programática.
  • Configuramos el método FeatureActivated() de la siguiente forma:
       1: public override void FeatureActivated(SPFeatureReceiverProperties properties)

       2: {

       3:     SPWeb spwWeb = (SPWeb)properties.Feature.Parent;        

       4:     SPList splList = spwWeb.Lists.TryGetList("Tareas");

       5:     SPUserCustomAction spucCustomAction = splList.UserCustomActions.Add();

       6:     spucCustomAction.Location = "CommandUI.Ribbon.ListView";

       7:     spucCustomAction.Sequence = 85;

       8:     spucCustomAction.Title = "Ayuda";

       9:     spucCustomAction.CommandUIExtension =

      10:         @"<CommandUIExtension>"Ribbon.ListItem.Actions.Controls._children"">"Ribbon.ListItem.Actions.Controls.HelpButton"" TemplateAlias=""o1"" Command=""HelpCommand"" "http://demo2010a:100/sites/PortalIntranet/Documentos%20compartidos/Logo_Ayuda.gif"" "General"" LabelText=""Ayuda"" />"HelpCommand"" CommandAction=""javascript:SP.UI.ModalDialog.showModalDialog({url:'/_layouts/help.aspx',dialogReturnValueCallback: function(dialogResult, returnValue) { SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK) }})""/>;

      11:             <CommandUIDefinitions>

      12:                 <CommandUIDefinition Location="

      13:                     <Button Id="

      14:                     Image32by32="

      15:                     CommandType="

      16:                 </CommandUIDefinition>

      17:             </CommandUIDefinitions>

      18:             <CommandUIHandlers>

      19:                 <CommandUIHandler Command ="

      20:             </CommandUIHandlers></CommandUIExtension>"

      21:     spucCustomAction.Update();

      22: }

  • Como vemos, la gracia de pode añadir una acción personalizada a una lista en concreta radica en crear una instancia de SPUserCustomAction que nos habilita para:
    • Añadir una acción personalizada a la lista deseada.
    • Especificar la ubicación de la acción a través de la propiedad Location.
    • Especificar el orden de aparición de la acción mediante la propiedad Sequence.
    • Y finalmente, y lo más importante, especificar la definición completa de la acción a través de la propiedad CommandUIExtension. Fijaros que aquí se está indicando la ubicación concreta de la acción (en la Ribbon de lista, en la sección Acciones), la imagen a utilizar (previamente cargada en el sitio o provisionada en el propio proyecto mediante un elemento de tipo módulo), y el comando que en este caso nos permite levantar la ventana modal especificando un bloque JavaScript que hace uso del Framework de ventanas modales.
  • Configuramos el método FeatureDeactivating() para realizar la correspondiente limpieza:
   1: public override void FeatureDeactivating(SPFeatureReceiverProperties properties)

   2: {

   3:     SPWeb spwWeb = (SPWeb)properties.Feature.Parent;                

   4:     SPList splList = spwWeb.Lists.TryGetList("Tareas");

   5:     SPUserCustomActionCollection spuccCustomActionsConllection =

   6:         splList.UserCustomActions;

   7:     foreach (SPUserCustomAction spucCustomAction in spuccCustomActionsConllection)

   8:     {

   9:         if (spucCustomAction.Title == "Ayuda")

  10:         {

  11:             spucCustomAction.Delete();

  12:             break;

  13:         }

  14:     }

  15: }

  • Compilamos el proyecto y lo desplegamos en nuestro sitio de SharePoint. Comprobamos que la acción personalizada se ha añadido correcatamente en la Ribbon.
  • Finalmente comprobamos que la acción funciona como se espera:
image image

Referencias: