SharePoint 2010: Como provisionar una DataFormWebPart existente!

Cómo sabéis, SharePoint Designer 2010 (SPD 2010) nos permite crear de forma sencilla vistas de datos a partir de orígenes de datos diversos como BD’s SQL (incluyendo SQL Azure), servicios web, servicios REST  o listas / bibliotecas de SharePoint. Estas vistas de datos se pueden personalizar vía transformaciones XSL…ahora bien, en el caso de que haga uso de estas vistas de datos a través de la DataFormWebPart: ¿Cómo puedo hacer que sean re-utilizables? Pues como siempre, paquetizándola si es posible:

  • En primer lugar, creamos una página de WebParts en el sitio de trabajo y desde SPD 2010 añadimos la vista de datos que personalizamos a nuestro gusto.
  • Guardamos los cambios y visualizamos la página de WebParts. A través de la pestaña de edición de la WebPart, podremos descargarnos el archivo .webpart que contiene toda la definición de la vista de datos.
  • Este archivo de datos lo vamos a llevar a una solución de Visual Studio 2010 RC (VS 2012 RC) que contenga un elemento de tipo Module en un proyecto de tipo SharePoint 2010 Project.
image image image
  • Este elemento de tipo Module nos permitirá desplegar el archivo .WebPart (cuyo contenido os recomiendo revisar) a la galería de WebParts de la colección de sitios dónde reside nuestro sitio.
  • En VS 2012 RC nos tenemos que dar cuenta de cambiar el ámbito de la característica correspondiente a Site (Colección de Sitios).
  • Tendremos también que modificar el archivo Elements.xml del módulo para especificar que vamos a provisionar un archivo .webpart en la galería de WebParts de forma que en tiempo de edición de la página de WebParts podamos insertarla WebPart en nuestra página.
image image image
  • La definición del archivo elements.xml tiene que ser como sigue. Como veis, en el atributo <Module tenemos que especificar que el destino del archivo .webpart es la galería de WebParts, cuya url relativa es _catalogs/wp.
   1: <?xml version="1.0" encoding="utf-8"?>

   2: <Elements xmlns="http://schemas.microsoft.com/sharepoint/">

   3:   <Module Name="SPDFWPModuleImporter" List="113" Url="_catalogs/wp">  

   4:       <File Path="SPDFWPModuleImporter\SQL_Azure_DS.webpart" Url="SQL_Azure_DS.webpart" Type="GhostableInLibrary" >

   5:       <Property Name="Group" Value="Azure WebParts" />

   6:     </File>

   7: </Module>

   8: </Elements>

  • Añadimos la WebPart a la página de WebParts y comprobamos que muestra la información del origen de datos de la misma forma que la vista de datos insertada desde SPD 2010.

image

SQL Server: Workaround para solucionar el problema “xp_regread() returned error 5, ‘Access is denied.’”!

Pues este fue uno de los errores con los qué me encontré al intentar, entre otras cosas, intentar añadir configurar el modo mixto de autenticación en una instancia de SQL Server Express creada en una máquina con Windows 7. Por suerte, casi siempre hay algún workaround para este tipo de errores “tan majos” por lo que os voy a contar el que me funcionó en mi caso:

  • Lo primero, forzar a SQL Server a soportar el modo mixto de autenticación tocando el registro (http://support.microsoft.com/kb/285097):
    • Ejecutamos Regedit en el equipo y nos vamos a Go to HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQLServer.
    • Cambiamos el valor de la propiedad LoginMode a 2 para forzar el modo mixto de autenticación.
    • Reiniciamos SQL Server y comprobamos en las propiedades de la instancia (usando SQL Server Management Studio) que se ha configurado correctamente el modo de autenticación.
image image
  • En segundo lugar, a pesar de esta pequeña victoria puede que nos encontremos con problemas a la hora de por ejemplo crear un login de SQL de nuevo por tema de permisos…pero de nuevo tenemos un workaround que pasa por crear dicho login a través de la línea de comandos y usando directamente el ejecutable sqlservr.exe disponible en el directorio de instalación de SQL Server. Para ello (http://msdn.microsoft.com/en-us/library/dd207004.aspx):
    • Abrimos la utilidad SQL Server Configuration Manager y paramos la instancia concreta para la que vamos a crear el login de SQL usando la línea de comandos.
    • Abrimos una ventana de línea de comandos y nos vamos a la ruta donde reside sqlservr.exe que en mi caso, y para SQL Server Express, es C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Binn.
    • Ejecutamos sqlservr.exe con las opciones –m –c –sSQLEXPRESS de forma que iniciamos la instancia por línea de comandos y podamos ejecutar operaciones contra la misma también por línea de comandos y usando la herramienta sqlcmd que reside en el mismo directorio que sqlservr.
image image image
    • Abrimos otra ventana de línea de comandos, nos vamos a la ruta comentada y en este caso ejecutamos sqlcmd –s <NombreMaquina>\SQLEXPRESS para poder lanzar nuestros comandos T-SQL contra la instancia de SQL Server Express.
    • Ejecutamos las sentencias T-SQL para crear el login de BD que necesitamos:
   1: CREATE LOGIN jcgonzalez WITH PASSWORD='jcgonzalez', DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

   2: EXEC sys.sp_addsrvrolemember 'jcgonzalez','sysadmin'

   3: GO

    • Si todo va bien, en la salida por pantalla no debería mostrarse ningún error de ejecución:

image

  • Finalmente, comprobamos que el login se ha creado y lo podemos usar en SQL Server Management Studio:
    • Paramos la ejecución de sqlservr y sqlcmd  en la línea de comandos mediante Ctrl+C.
    • Arrancamos la instancia de SQL Server en el SQL Server Configuration Manager.
    • Iniciamos sesión con el login de BD creado usando SQL Server Management Studio.

image

Fuente: http://social.msdn.microsoft.com/Forums/en-US/sqlsecurity/thread/60b888bf-30dc-4eaf-bea8-5fd55181f8e5