Windows XP Service Pack 3: Porque lo bueno prevalece!

Parece que se acerca la versión RTM del Service Pack 3 (SP3) del que en mi opinión es la mejor versión de sistema operativo que ha salido de Redmon: Windows XP. Según esta noticia aparecida Computer World, el SP 3  estará disponible para fabricantes de ordenadores y profesionales IT y desarrolladores (a través de Tech-Net y MSDN) para la semana que viene. Asimismo, los usuarios de Windows XP podrán descargarlo vía Windows Update a partir del 29 de Abril. Podéis consultar más información sobre las fechas de disponibilidad del SP 3 aquí.

Aprovecho el post para recordar otras noticias referentes a Windows XP que ha aparecido últimamente y que están generando bastante debate:

  • Windows XP dejará de comercializarse a partir de junio de este año, y se dejará de dar soporte técnico a partir de enero del año 2009.
  • El movimiento a nivel mundial en contra de la retirada de Windows XP, hasta tal punto esta este tema, que algunos usuarios han comentado que prefieren pasarse a Linux antes que utilizar Windows Vista (me guardo mi opinión con respecto a estas ideas ;)).

Podéis leer más información sobre estos puntos en este enlace.

SQL Server 2008: Import and Export Data Wizard!

SQL_Server2008_14 La semana pasada tuve la primera toma de contacto con SQL Server 2008, y aparte de evaluar muchas de las nuevas capacidades que ya se han contado en Geeks.Ms, me encontré con una utilidad de importación y exportación de datos realmente útil y sencilla de utilizar (que ya existía en SQL Server 2005). Se trata del asistente Import and Export Data que ofrece una forma sencilla de copiar datos desde una fuente origen a una destino, permitiendo además crear un paquete de SQL Server Integration Services (SSIS). Se pueden copiar datos de un origen a un destino siempre que se disponga de un proveedor nativo de .NET Framework o bien el proveedor de OLE DB. De hecho, la lista de proveedores de que dispone el asistente incluye entre otros:
  • Proveedores .NET Framework para ODBC, Oracle y SQL Server
  • Flat Files
  • Microsoft Access
  • Microsoft Excel
  • Microosft OLE DB provider para: Office 12, Analysis Services (9.0 y 10.0), Data Mining Services, Internet Publishing, OLAP Services (8.0), Oracle y SQL Server.
  • SQL Native Client (10.0)
  • SQLXMLOLEDB
  • SQLXMLOLEDB 4.0

En este post os voy a detallar como se utiliza este asistente y en menos de 5 minutos podemos hacer una copia de una BD SQL Server. Empecemos.

Usando el asistente Import and Export Data

El primer paso evidente es iniciar el asistente: Microsoft SQL Server 2008 -> Import and Export Data (32 bits). A partir de aquí casi es un “siguiente”-“siguiente”:

  • Pasamos por la típica pantalla de bienvenida.
  • En la siguiente pantalla, ya empezamos a especificar parámetros importantes del proceso de exportación: el tipo de proveedor, el nombre del servidor, el tipo de autenticación y la fuente de datos origen (la típica AdventureWorksDW).
SQL_Server2008_1 SQL_Server2008_2  

SQL_Server2008_3

  • Una vez especificados los parámetros que identifican la fuente de datos origen, tenemos que hacer algo muy parecido para la fuente de datos destino:
    • El tipo de proveedor.
    • El nombre del servidor.
    • La BD en este caso dónde copiar la estructura de la fuente de datos origen. En nuestro caso, vamos a crear una nueva BD.
  • El siguiente paso consiste en indicar el método de copiado de la fuente de datos origen en destino:
    • Copiar de manera automática todas las estructuras de información y su contenido.
    • Crear una consulta T-SQL que podamos manipular para restringir que estructuras e información se copian en el destino.
SQL_Server2008_4 SQL_Server2008_5  

SQL_Server2008_6

  • A continuación especificaremos que elementos concretos de la fuente origen queremos copiar en el destino. En este caso he seleccionado todas las tablas de AdventureWorksDB.
  • Además, podríamos especificar en qué esquema de la BD realizar la copia y otras opciones para la inserción de datos.
  • A continuación elegimos el tipo de ejecución: inmediata o no, con o sin creación de un paquete de SSIS.
SQL_Server2008_7 SQL_Server2008_8  

SQL_Server2008_9

  • En la siguiente pantalla simplemente pulsamos Finish para que se inicie el proceso de exportación que será más o menos largo dependiendo de cómo sea la fuente de datos a exportar.
  • Una vez acabado el proceso de exportación podemos ver un informe resumen de la misma.
SQL_Server2008_10 SQL_Server2008_11

 

SQL_Server2008_12SQL_Server2008_13

  • Sin más, iniciamos SQL Server 2008 Management Studio y comprobamos que efectivamente se ha creado una BD con la misma estructura que la BD origen.

SQL_Server2008_15

Sin duda, se trata de una herramienta muy interesante que facilita la importación/exportación de datos y que en mi caso no conocía. Espero que el post os haya resultado interesante.

SQL Server Reporting Services: Preguntas y Respuestas (II)!

Después del primer post de la serie sobre preguntas habituales en seminarios sobre SQL Server Reporting Services (SSRS), aquí tenemos la segunda entrega en la que nos centraremos en lo versátil  que es SSRS gracias al juego que da el uso de parámetros. Como veréis, realmente se trata de una única sección, y en concreto de una pregunta y su correspondiente respuesta, la que trataremos en esta nueva entrega. Empecemos.

Parámetros de informe: ¿Cómo puedo poner el valor All de un parámetro de un informe?

Hay dos formas de conseguir esta funcionalidad:

  • Opción 1: Aprovechando que en la definición de la consulta T-SQL que nos permite llenar el dataset podemos aprovechar las capacidades de programación de T-SQL, de manera que podemos añadir cierta lógica en la sentencia SELECT. Así, por ejemplo:
    • Tendríamos un bloque IF que controla los casos en los que el usuario está filtrando por un valor concreto del parámetro.
    • En el bloque ELSE tendríamos la sentencia T-SQL en la que se devuelven todos los resultados sin aplicar un parámetro en la clausula Where.

if @category <> 0

Begin

SELECT * from dbo.vProductProfitability

               WHERE dbo.vProductProfitability.Year=@anyo

 and dbo.vProductProfitability.MonthNumberOfYear=@mes and dbo.vProductProfitability.CategoryKey = @category

End

else

Begin

SELECT * from dbo.vProductProfitability

               WHERE dbo.vProductProfitability.Year=@anyo

 and dbo.vProductProfitability.MonthNumberOfYear=@mes

End

–select para definir el filtro y que aplique a todos los registros

SELECT ProductCategoryKey As CategoryKey,

               ProductCategoryName As Category

                               FROM DimProductCategory

union

SELECT 0  As CategoryKey, ‘todos’ As Category

  • Opción 2: Aprovechando que SSRS nos permite trabajar con parámetros multivalor. Por ejemplo, si tengo una consulta que me permite filtrar por un cierto parámetro, haremos lo siguiente:
    • Definir la query del dataset para que en lugar de utilizar el operador =, utilice IN.

image

    • En la configuración del parámetro, simplemente marcamos el check Multivalue.

image

    • De esta forma, al ejecutar el informe se ofrecerá la opción All Values:

image

    • Y el resultado de aplicar el filtro (Select All) sería:

image

Y hasta aquí el segundo post de la serie de Preguntas y Respuestas sobre SSRS. Tengo algún capítulo más que añadir, pero esperaré a completarlo con más preguntas. Espero que os haya resultado interesante.

       

VLINQ: Diseñador de consultas para LINQ To SQL!

Si hace unos meses hablábamos de una útil e imprescindible herramienta para probar nuestras consultas LINQ como es LINQPad, hace un rato me he encontrado otro diseñador de consultas específico para LINQ To SQL, pero que se diferencia de LINQPad en qué se trata de un diseñador que se integra con Visual Studio 2008 como un Add-In más y que nos ayuda en el diseño de dichas consultas. Se trata del proyecto VLINQ, que durante 6 meses fue desarrollado y liderado por un equipo de desarrollo francés en colaboración con Microsoft. Os podéis descargar VLINQ de este enlace.

SQL Server Reporting Services: Preguntas y Respuestas (I)!

Uno de los seminarios “tradicionales” que hemos impartido en el CIIN es el de SQL Server Reporting Services (SSRS). Durante estas sesiones han surgido numerosas preguntas que he tratado de responder con el tiempo, siempre desde el punto de vista práctico, y sin preocuparme mucho si la solución planteada a las cuestiones es una buena práctica o no. El caso es que llevaba tiempo con ganas de publicar estas preguntas y respuestas sobre SSRS, y aquí está el comienzo. Como varéis, he dividido las preguntas y respuestas en secciones con temáticas similares.  También espero que los cracks de SSRS den su opinión y otras alternativas posibles ;). Hoy comenzaremos con cuestiones relativas al formato de salida de un informe. Empecemos.

Cuestiones sobre el formato de salida de un informe

Esta sección está enfocada a cuestiones relativas al formato de salida del informe en cuanto a su aspecto gráfico, lograr ciertas funcionalidades a priori  no posibles, etc.

i. ¿Cómo se pueden visualizar sólo cierto número de filas de un informe?

Una forma de conseguir esto es la siguiente:

  • Insertar un nuevo grupo en el informe a través de la opción Insert Group y en la pestaña general definir la siguiente expresión de agrupamiento: =int((RowNumber(“Scope”)-1)/20).

image

  • Marcamos también Page break at end:

image

Y ya está. Más información sobre el tema en este enlace.

ii. ¿Qué manera puede haber de saber si es página par o impar para poner salto de página?

Hay una extensión de impresión pensada para este tipo de situaciones. Más información sobre esta extensión en el este enlace.

iii. ¿Cómo se pueden añadir números de página a un sub-informe?¿y cabeceras? En subreport no se pueden poner Footer ni Header por lo tanto: No se pueden usar las Globals tipo PageNumber.

Efectivamente esto es así, por lo que la única solución que veo es que por código (inline o mediante assembly) accedas a estas propiedades y las puedas utilizar en un elemento tipo Texbox de tu subreport. Sería algo tal que así:

Public Function PageNumber() as String
     Dim str as String
     str = Me.Report.Globals!PageNumber.ToString()
     Return str
End Function

Public Function TotalPages() as String
     Dim str as String
     str = Me.Report.Globals!TotalPages.ToString()
     Return str
End Function

Y esta function se usaría del siguiente modo:

=”Page ” + Code.PageNumber() + ” of ” + Code.TotalPages()

Más información en este enlace.

iV. ¿Qué es necesario para poder exportar un informe a formato Word?

Aquí la opción sería exportar el informe a Excel que si es editable y es un formato de salida más característico para volcar informes. De todos modos, si es un requisito que el informe se pueda exportar a Word, la opción pasa por que te crees una extensión de renderizado que te lo permita. En la misma:

  • Se tendría que coger el rdl de tu informe.
  • Llamar a la extensión de procesamiento de SSRS.
  • Construir el documento Word (la extensión de renderizado) en el que vas a mostrar los resultados.

Precisamente este es uno de los puntos de extensibilidad de la plataforma de SSRS. Crear la extensión no es para nada trivial, y hay productos de terceros como este. Habrá que ver con SQL Server 2008 como se comporta una de las novedades con las que viene: renderizado de informes en Microsoft Word.

Preguntas para las que no tengo todavía respuesta en esta sección

Aparte de estas cuestiones que he podido resolver de forma más o menos completa, tengo otras que todavía no he resuelto de manera clara y que os dejo aquí por si alguien en la comunidad tiene la respuesta para las mismas:

i. ¿Es posible adaptar las celdas de un informe al tamaño del contenido que tendrán? O lo que es lo mismo, ¿Se puede ajustar de manera dinámica la anchura de los controles de tipo TextBox que forman el informe?

Las celdas de un informe (controles TextBox) sólo permiten jugar visualmente con el atributo Width. Por lo tanto, parece que la única opción para este requerimiento pasa por:

  • Ver si con código in-line puedes acceder a estas propiedades utilizando ReportItems.
  • Probar lo mismo con un ensamblado.
  • La última opción es que pases del BI Management Studio y te crees una aplicación que genere el informe y tenga esa funcionalidad….

ii. ¿Cómo se puede conseguir impresión dúplex para el caso de tener sub-informes en un informe?

Tenemos un report con un subreport dentro de una lista. Si se quiere imprimir ese informe en Duplex, el problema es que los subreport pueden tener tanto páginas pares como impares.

Espero que el post os haya resultado de interés. Seguiré con esta serie de faqs próximamente.

Nuberos.NET & CIIN: Materiales del evento de Visual Studio Team System!

Gracias a Rodrigo e Ibón, ya tenemos disponibles en la página de Nuberos.NET para descarga las presentaciones del evento del pasado viernes: Gestión de proyectos y metodologías con Visual Studio Team System. Las presentaciones os las podéis descargar en los siguientes enlaces:

En la misma sección de descargas están los materiales del evento previo sobre LINQ & ADO.NET Entity Framewok.

WSS 3.0: Planning de soluciones SharePoint (I)!

Hace tiempo escribíamos un par de posts (partes I y II) sobre consideraciones y buenas prácticas a tener en cuenta a la hora de poner en marcha soluciones de WSS 3.0. Retomando el tema, y a raíz de comentarios que he recibido últimamente, he pensado poner un poco en orden muchas de las ideas ya expuestas, dejando claro cuáles deberían ser los pasos lógicos a realizar antes de realizar el despliegue de una infraestructura de WSS 3.0. De hecho, estos pasos son fundamentales puesto que aunque WSS 3.0 es escalable después de desplegado, Microsoft recomienda como buena práctica la realización de un planning previo para evitar de esta forma duplicar esfuerzos de manera innecesaria. Como veremos en esta serie de posts, el planning de WSS 3.0 implica determinar los siguientes puntos:

  • Las necesidades de la organización donde se va a realizar el despliegue de WSS 3.0. En concreto, se trata de:
    • Determinar los objetivos de la solución SharePoint.
    • Determinar las necesidades del usuario.
    • Determinar la jerarquía del sitio.
  • Planificar la creación de sitios, su mantenimiento y seguridad.
  • Planificar los requerimientos del servidor y la topología o topologías a utilizar.
  • Determinar la cantidad de espacio en disco que se necesita y el rendimiento pico.
  • Identificar la topología para la instalación de WSS 3.0.

Toda esta información y mucha más está reunido en el recurso por excelencia para el planning de WSS 3.0: Planning and architecture for Windows SharePoint Services 3.0 technology. Empecemos.

Determinando las necesidades de la organización

Sin duda, este es el primer paso necesario antes de realizar cualquier otro que nos lleve a realizar el despliegue de una solución SharePoint. Es necesario perfilar de manera adecuada las necesidades de la organización para evitar problemas e inconvenientes futuros. En concreto, esta fase implica determinar los objetivos de la solución SharePoint a construir, el entorno de hosting, las características de la solución, las necesidades del usuario y la jerarquía del sitio. Vamos a ir viendo cada una de las implicaciones de estos puntos.

Determinando los objetivos de la solución

Este punto implica la identificación de los objetivos y metas de la solución para alinearlos con las necesidades de la organización y maximizar la utilización de recursos. Además, será necesario determinar el entorno en el que la solución estará hosteada. Por ejemplo, un escenario típico es diseñar una solución pensada para el almacenamiento de documentos (objetivo) dentro de la Intranet de la organización (entorno de host). Pero, ¿Cómo identificamos estos objetivos? La respuesta es sencilla: a partir de las funcionalidades y capacidades que ofrece SharePoint: Comunicación, Colaboración y Almacenamiento de Documentos. Así, si la organización necesita la solución para realizar diversos anuncios, recoger feedback o mostrar un calendario de eventos, el objetivo del sitio será Comunicación. En cambio, si los miembros de un departamento tienen la necesidad de usar la solución/sitio para compartir documentos, contestar a ideas, realizar un seguimiento de tareas o participar en una encuesta, el objetivo del sitio será Colaboración. Finalmente, si se trata de almacenar y mantener documentos en una ubicación centralizada, el objetivo del sitio será el almacenamiento de documentos.

Una vez que se han identificado los objetivos del sitio, hay que identificar el entorno dónde se va a ubicar. Dicho entorno puede ser:

  • Intranet, es decir, la organización necesita un sitio corporativo aislado de la red. Este escenario es típico para crear sitios accesibles sólo para empleados de una organización, como son las Intranet corporativas con sitios departamentales.
  • Internet, es decir, la organización requiere que la información sea pública. Un ejemplo claro de este entorno es el típico sitio que contiene información de productos de una organización.
  • Extranet, es decir, la organización necesita compartir información, documentos con agentes externos (proveedores, clientes), lo que implica que estos puedan acceder a la solución permita el acceso con los permisos apropiados.

Identificando las características del sitio

Una vez que se han identificado los objetivos de la solución/sitio y el entorno de host, el siguiente paso consiste en identificar las características que la solución debe incluir. Por ejemplo, si el objetivo del sitio es Comunicación, necesitaremos elementos como anuncios, calendarios compartidos, envío de mensajes por e-mail, o encuestas para facilitar el intercambio de información y la interacción entre los miembros del sitio.

Si se trata de un sitio de Colaboración, los elementos necesarios serán paneles de discusión, seguimiento de issues, listas de contactos o elementos de presencia. Finalmente, en el caso de un sitio de almacenamiento de documentos necesitaremos determinar las características de almacenamiento de documentos que se necesitan como bibliotecas de documentos, bibliotecas de imágenes, listas de tareas o la papelera de reciclaje.

En cualquiera de los tres casos, necesitaremos determinar si necesitamos otros elementos como alertas, feeds RSS, búsquedas, blogs, wikis o bien espacios de documentos y/o reuniones.

Identificando las peticiones del usuario

La última fase en la determinación de las necesidades de la organización pasa por identificar peticiones especiales del usuario relacionadas con las características de su negocio. Entre ellas tendremos que determinar:

  • Integración con aplicaciones cliente, es decir, que aplicaciones tienen que interactuar con un sitio de WSS 3.0. El ejemplo más claro de integración es el todo el suite de Microsoft Office que permite que en sitios de WSS 3.0 podamos realizar operaciones de Check-In o Check-Out de documentos.
  • Integración en el servidor, es decir, que servidores tiene que interactuar con WSS 3.0. Así por ejemplo, este escenario lo tenemos en la Integración de Microsoft Exchange Server con WSS 3.0 de manera que se habilita el uso de características propias de Exchange, como el calendario, en sitios de WSS 3.0.
  • Integración con aplicaciones LOB (Line-Of-Business), es decir, que aplicaciones de negocio se tienen que integrar con un sitio de WSS 3.0. Por ejemplo, podríamos utilizar web parts personalizadas para visualizar datos de SAP.

Y en principio estos son todos los elementos que necesitamos tener claros para identificar las necesidades de una organización. Lógicamente, para ayudarnos con esta labor existe una hoja de recogida de especificaciones y requisitos: Site objectives and environments worksheet. Como veréis en dicha hoja, se trata de enumerar los sitios a crear, los objetivos por sitio y los entornos en los que se utilizarán dichos sitios. Otra forma alternativa a dicha hoja, made in CIIN, es la siguiente:

image

Espero que el post os haya resultado de utilidad, seguiremos con la serie en próximos posts.