miércoles, 22 de junio de 2011

Experiencias con SharePoint Designer

Hacía ya algun tiempo que no escribia nada a mi Blog, muy mal pero de verdad que he estado con las manos ocupadas en mil cosas, por un lado mi cambio de casa, mi cambio de empleo, etc. no que sea queja pero bueno, imaginaras como he estado.

Hoy escribo esto desde Phoenix, Arizona. Asi es, ando en estas calurosas tierras y ahorita que traigo fresco el tema de SharePoint Designer (SPD) comentare sobre lo que me paso.

Hay gente por ahi que he escuchado que SPD no es mas que un (talvez triste) FrontPage para SharePoint, sí tu eres uno de ellos, reconsidera. Mi primera experiencia con SPD no fué agradable y para ser sincero también pense que no era gran cosa. Hoy, varios años despues doy las gracias a SPD. Estoy metido en un proyecto de manejo de registros con SharPoint y resulta cierta información reside en SQL y otra en (recientemente) en SharePoint, asi que la pregunta es ¿como los conectas?, como conectas un registro de una base de datos de SQL Server con uno que esta en una lista de SharePoint sin perder la integridad de los datos.

Mi solución no es ni la mejor ni la mas sofisticada, simplemente es la nos funcionó. Creo que antes que nada te platicaré un poco el antecedente para ponerte en contexto, tengo en mis manos una compleja base de datos que controla registros de inventario de una empresa grande. Esos registros los muestran en SharePoint con la ayuda de ciertos WebParts (que no hice yo) y aunque estan feos y lo que le sigue, son muy funcionales. La primera vez que lo vi mi primera pregunta fué "que hacen esos registros allá en esa BD y porque no estan en listas de SharePoint en donde se pueden controlar con mucha elegancia a través de Tipos de Contenido"?

Basicamente lo que tenía que hacer era tomar un registro de la tabla de PCs (del inventario de PCs que tenemos) y relacionarlo con otro registro pero de una lista de SharePoint. Si lo ves de una forma muy sencilla, son dos tablas en bases de datos diferentes. Entonces todo se resumió a:

  1. Traer los registros las PCs a una vista de datos de SPD (Data View)
  2. Relacionarlo a un registro en la lista de SharePoint
En internet hay una buena cantidad de blogs que hablan sobre el manejo de "Data View" y SharePoint Designer, te voy a poner aqui los dos que mas me ayudaron, talvez ahi encuentres tu alguna respuesta y ya no tengas que leerme.

http://sharepointhillbilly.com/archive/2008/12/24/creating-a-sharepoint-list-parent--child-relationship---out.aspx

http://geekswithblogs.net/SoYouKnow/archive/2009/10/29/setting-sharepoint-form-fields-using-query-string-variables-without-using.aspx

El autor ahi habla de como crear la funcionalidad Padre-Hijo con registros de SharePoint, revisarlo y espero te sirva tanto como a mi.

Bien, si continuas conmigo te va a interesar saber como le hice para traer registros de SQL a una pagina de SharePoint. Primero que nada tienes que saber si le batalle un buen rato, ayer me dormi tardisimo entendiendo porque diablos no funcionaba la conexión, como en casi todos los productos de Microsoft, SPD a veces se pone en un modo dificil y hace muchos berrinches, asi que si te esta costando trabajo no te sientas mal, nos pasa a todos.

Voy a asumir que ya tienes una pagina "Web Part Page" lista y abierta en tu SPD (a proposito es gratis tambien el SPD para SP2010). Luego ve al menu Task Panes y selecciona Data Source Library pues necesitar ver ese panel para poder crear la conexión.

En la imagen que te muestro, bajo la sección de Database Connections verás que tengo ya ahi dos creadas, estas son conexiones directas a tablas en SQL.

Antes de que continuemos, necesitas un usuario con acceso a SQL, de preferencia un usuario no de Windows sino de SQL. Ese usuario tiene que tener permisos para ver al menos la tabla que intentas traerte.
Ya que lo tengas, das clic en Connect to a database...


Escribe el nombre de tu servidor de SQL, pon tu usuario y contraseña y listo!.
Que creaías que estaba tan sencillo, pues no U_U
Mira yo le batalle aqui un buen rato, mi problema fué que el servidor de bases de datos esta en algun lugar remoto y lo unico que tengo es la dirección IP. Luego sí tu servidor de SQL tiene varias instancias de SQL es otro lío, en fin no te quiero quitarte el ánimo y si tu tienes algun caso asi complicado lo que te recomiendo (porque fué lo que me funcionó) es ir a http://www.connectionstrings.com/sql-server-2005 (para SQL 2005) y de ahi saca el formato de conexión de OLE DB prodiver  ----- OJO FIJATE MUY BIEN LO QUE DIJE, OLE DB provider. Hay otros pero es un problema configurarlos y que funcionen como el de .NET o el de ODBC.
Saca de ahi la cadena de conexión a tu servidor y seleccioanr la casilla "Use custom connection string", y de nuevo te digo, fijate que al final de tu conexión diga Provider=SQLNCLI o Provider=SQLNCLI10

Lo que va a pasar a continuación es que el asistente de conexión iniciará y te mostrará la opcion de que selecciones tablas o vistas o procedimientos almacenados. Esta es la parte que me gusto mucho de SPD pues en verdad que esta muy completa la forma en la que puedes traer los datos. Puedes crerar una SQL Statement complejo, ponerlo en el asistente y con eso te traes tus datos ya denormalizados!, bastante bien para algo que antes no bajabas de un simple FrontPage no?

Ok aqui viene la otra parte mala. Me sucedió algo de lo mas extraño pues cuando logre conectarme me traje todos los registros y todos los campos de la tabla y para ser una base de datos de control de inventario tengo que decir que es un volumen muy grande con el que trate. Al principio todo bien pero luego me cambie de red y ahi se fué todo al caño. No se porque pero la conexión dejo de funcionar y comenzo mi vía crucis, borre la conexión y la volvi a crear unas 30 veces haciendo pruebas diferentes con cadenas de conexiones, usuarios y contraseñas, etc. hasta que me tope con un blog donde decía que probar trayendome solo 10 o 50 registros, usando una sentencia de SQL  como esta:

SELECT TOP 10 * FROM TuTabla

Bendito remedio!, funciono y termine mi diseño para la presntación de hoy en la mañana con mi Manager.. phew!!
Algo de lo que puede hacer se ve como esto:



Fijate bien en la imagen, tengo la vista de datos de las Workstations (perdon por la combinación de idiomas) configurada para hacer filtrado y ordenado desde el titulo de las columnas además de otras cosas.
Tambien me metí a investigar algo sobre XSL, lenguaje en el que aun soy neófito y me encontré con agradables sorpresas de todo lo que se puede hacer con esto.
Ve otra vez la imagen y fijate en la primer columna que dice View, esta la agregue con HTML y XSL para que cuando el usaurio de clic ahi, lo lleve a otra pagina donde se muesta el detalle del registro seleccionado.

Por lo pronto tengo que dejar de escribir y concluir, en otra ocación voy a actualizar mas este post.
Mi conclusión es que si bien con SPD puedes hacer maravillas como traerte toda tu base de datos a SharePoint Services sin necesidad de usar Business Data Catalog (BDC) que como sabes solo esta disponible en MOSS y no en WSS, puedes ligar registros de tu base de datos con otros de la lista de SharePoint de forma sencilla y tener un sistema de registros decente.

No hay comentarios:

Publicar un comentario