March 2009 - Artículos

El Bruno Visual Studio Team System

Buenas

nuestros amigos los VSTS Ranger han liberado otra guía más para ayudarnos a acercanos al fabuloso mundo de Visual Studio Team System, en este caso para el perfil de testers: VSTT Visual Studio Team Test Quick Reference Guide.

Esta guia es un archivo PDF donde podemos encontrar mucho contenido relacionado con el esquema y las herramientas de pruebas de VSTS. Desde consideraciones para las pruebas Web, hasta indicaciones para trabajar con las colecciones de datos de performance que se obtienen de las ejecuciones de las mismas, pasando por los clásicos Unit Tests, etc.

La página principal en CodePlex es http://vstt2008qrg.codeplex.com/ y aunque sea para leer en el metro, es recomendable echarle un vistazo.

Saludos @ La Finca

El Bruno

Crossposting from ElBruno.com

Buenas,

desde hace tiempo cuando escribo sobre VSTS 2010 tengo pendiente incluir a Camano en los posts. En realidad al ser un tema completamente nuevo, muchas veces escribía un post y luego pensaba como introducir a Camano.

Asi que primero lo primero, ¿qué es Camano?; pues Camano es una nueva herramienta incluida en VSTS 2010, pensada para la gestión de pruebas, donde se incluye la capacidad para definir y ejecutar pruebas.

Lo primero que nos llama la atención con Camano es que es una nueva herramienta fuera del IDE de Visual Studio, y con esto se rompe una de las premisas de Visual Studio que es “trata de brindar al desarrollador toda las herramientas necesarias para que nunca deba abandonar Visual Studio”. Pero claro, Camano no es una herramienta para los developers, está pensada exclusivamente para los equipos de testing. Es por esto que en la herramienta, completamente desarrollada con WPF, podemos interactuar con elementos de TFS, pero desde el punto de vista de un Tester.

Por ejemplo, sus 5 menúes principales permiten acceder a los elementos propios de un escenario de testing

  • Home; permite acceder al menu principal donde podemos, entre otras cosas conectarnos a un TFS para trabajar con el mismo.
  • Planning; permite organizar, crear y planear nuestros escenarios de testing.
  • Testing; permite acceder a nuestras pruebas y ejecutar las mismas.
  • Defect; permite reportar defectos a partir de los resultados de las pruebas o consultar los mismos.
  • Reports; permite acceder a un set de reportes.

Una de las novedades interesantes de Camano es que, en cualquier momento podemos acceder a las definiciones de planes de test y ver el estado de los mismos, el porcentaje en el que se han completado y las los test run asociados.

Adicionalmente al momento de ejecutar pruebas manuales, Camano se pasa a un modo Sidebar donde podemos ver los pasos requeridos por el test y al momento de ejecutar los mismos, podemos asignar el resultado de ejecución de estos pasos.

Todo esto integrado con las nuevas capacidades de Depuración Histórica y de las Coded UI Tests incluidas en VSTS 2010 con lo que podemos “grabar” el paso a paso de nuestro test y luego ejecutarlo automáticamente para evitar los pasos manuales.

Finalmente, cuando hemos completado nuestras pruebas, es posible ver el estado de progreso de las mismas,

o inclusive un poco más de detalle en un formato más gráfico

Esto es solo un primer acercamiento a una de las herramientas más interesantes de esta versión, en futuros posts haré un pequeño tutorial para ver como crear y automatizar un pequeño test plan.

 

Saludos @ Home

El Bruno

Crossposting from ElBruno.com

Buenas,

hoy es viernes y despues de pelearme todo el día con Team Foundation Server y con Silverlight 3; toca repasar algunos de esos posts/links/videos que tengo atrasados. Uno de ellos es Code Canvas, un proyecto de nuestros amigos de Microsoft Research que realmente te deja con la boca abierta.

Antes de mis comentarios el video (si te saltas el video, sos un atorado y no podes dejar de leerme, te recomiendo que te lo hagas ver por algún profesional)

 

Dentro de unos días se van a cumplir mis 10 años profesionales en la informática, si hago un poco de memoria durante estos 10 años las herramientas han madurado mucho, pero siempre detrás está nuestro amigo que nos da de comer: el código fuente. Ya hemos visto como las herramientas mejoran en cada versión, se agregan nuevas capacidades y con el paso del tiempo todo tiende a ser mucho más visual; pues Code Canvas es una nueva evolución en ese sentido.

Basado en los diagramas de VSTS 2010, los DGML (de los que algo comenté aquí); esta herramienta presenta el concepto de soluciones en un diagrama visual desde el cual es posible ir accediendo a niveles mayores de detalle, sin perder el control de la solución, pero llegando inclusive al código fuente y editando el mismo en este entorno. (repito, si has estado leyendo esto sin ver el video, lo flipas)

Pero si esto era bueno, el siguiente paso que es mostrar las relaciones basadas en clases y no en ensamblados, es impresionante. La gran pregunta es, ¿llegaremos a ver esto dentro de VSTS 2010? aunque sea en modo plugín en un tiempo … :D

 

 

Saludos @ Home

El Bruno

Fuente: http://blogs.msdn.com/kaelr/archive/2009/03/26/code-canvas.aspx

Crossposting from ElBruno.com

Buenas

hace ya bastante tiempo, uno de los primeros posts que escribí sobre Visual Studio Team System 2010 trataba sobre las nuevas capacidades para relacionar WorkItems entre si, definiendo el tipo de relacion: Child, Parent, Predecessor, etc.

Además de ser una buena opción para mantener organizados nuestros WorkItems, también era muy útil ya que se incoporaba dentro del editor de Queries de WorkItems la capacidad para visualizar gráficamente las mismas.

Pero un detalle que se me había escapado, es que al momento de importar las mismas dentro de Microsoft Project, esta relación se respetaba en Project. Aquellos que hemos sufrido a los fanáticos de Project en nuestras carnes, sabemos que actualmente si bien podemos ver mucha información dentro de Project, el orden y relación de las tareas es una tarea manual. Pues bien con VSTS 2010, esto dejará de ser asi.

Supongamos las tareas del gráfico anterior, donde tenemos la siguiente información

  • 293: Tarea Jerárquica 1
    • Child: 294
  • 294: Tarea Jerárquica 2
    • Child: 295, 296, 297
  • 295: Tarea Jerárquica 3
  • 296: Tarea Jerárquica 4
    • Predecessor: 295
  • 297: Tarea Jerárquica 5
    • Predecessor: 296

Al momento de importar las mismas desde Microsoft Project

 

Nos encontraremos con la agradable sorpresa de ver que las mismas, en el diagrama de Gantt, respetan las relaciones y el orden que les hemos definido a nivel WorkItems

 

Pequeña característica que hará las delicias de más de un fanático de Project y que me dará más tiempo para tomarme unas cervezas con algún amigo o eso espero.

Saludos @ Home

El Bruno

Crossposting from ElBruno.com

El Bruno Visual Studio Team System

Buenas,

quien más, quien menos; si alguna vez estuviste trabajando en alguna empresa mediana o grande te habrás topado con un SAP. SAP es ese monstruo alemán que nació en el 1972 (tiene 4 años más que yo), que hoy tiene más de 40000 empleados en sus filas y es uno de los sistemas de gestión por referencia para las grandes organizaciones.

Internamente SAP en casi todas sus versiones siempre ha sido un producto muy cuidado y extremadamente práctico. Por ejemplo la versión actual SAP R/3 es una aplicación que se puede desplegar y escalar de forma masiva respetando el concepto sobre el que habló Rodrigo ayer de hacer las cosas simples:

una aplicación con 3 capas: capa de presentación, de aplicación y de base de datos.

Ojo, que internamente dentro de SAP podemos encontrarnos miles de módulos y de aplicaciones (SAP Business Warehouse, Internet Transaction Server, Sales Force Automation, etc.), pero cuando conoces un poco como funciona y como se escala, la verdad que es un ejemplo a seguir en lo que respecta al diseño de aplicaciones empresariales.

Sin embargo, la cosa deja de ser tan bonita cuando desde el mundo Microsoft empezamos a ver las opciones de desarrollo que nos brinda SAP: ABAP y Java. El 1ro, ABAP, nació como el lenguaje de reporting de SAP pero con el paso del tiempo se convirtió en un 4GL (dios que miedo!!!) que se mete en las tripas de SAP y permite adaptarlo a casi cualquier necesidad. Por otra parte, con la incorporación de SAP NetWeaver, Java pasó a ser parte de los lenguajes con los que se podía “programar” SAP.

¿Y qué pasa con Microsoft? – 1. DCOM

Pues que toca sufrir y mucho en algunas ocasiones. Si bien es posible instalar SAP sobre SQL Server, jamás se recomienda atacar la base de datos de SAP directamente especialmente si quieres mantener tu cordura mental. Lo mejor en todos los casos es utilizar alguno de los mecanimos de integración especialmente diseñados para estos escenarios.

Inicialmente la única opción de integración era utilizar C y la biblioteca librfc32.dll, sin embargo esta opción tenía muchos problemas sobre los que realmente no puedo hablar al respecto porque no los conozco.

En 1997 cómo había mucha gente joven dispuesta a perder tiempo y neuronas SAP lanza su DCOM Component Connector. Este conector se basaba en DCOM y permitía interactuar con los objetos de SAP y al ser un estándar Microsoft, se podía utilizar el mismo desde Visual Basic, C++, Visual Fox, J++, etc. Sin embargo, DCOM era una tecnología que si bien tenía algunas ventajas como por ejemplo separar físicamente los componentes en diferentes entornos (podías conectar desde el mundo Windows a un SAP en un mundo Unix), era un sufrimiento para los desarrolladores ya que COM era su base y … busca en la wikipedia DLL Hell y verás de lo que hablo. Pero bueno, era una opción y una muy buena para integrar aplicaciones con SAP.

SAP .Net Connector

Con la llegada del .Net Framework (año 2000) SAP decidió crear un conector para .Net. Lo bueno de esto es que por un lado era posible aprovechar toda la potencia de .Net como plataforma de desarrollo, pero lo malo es que el SAP .Net Connector llegó en el año 2004. Es decir, tuvimos 4 años la esperanza de hacer las cosas más fáciles, pero mientras a apechugar con lo que tengamos a mano. Pero una vez lo tuvimos en nuestras manos, pudimos ver que era realmente grandioso:

  • 100% integrado en el entorno de Visual Studio
  • capacidad para integrarnos con RFCs, BAPIs e IDocs
  • capacidad para publicación e integración a través de webservices

Por ejemplo, internamente lo que hacía este conector era crear un proxy en .Net para las entidades de SAP con las que “trabajábamos en local”. Esto era grandioso. En 2005 se lanzó una actualización de este componente con mejoras como el soporte para Remoting, y soporte para Visual Studio 2003.

SAP NetWeaver

SAP NetWeaver es una de las plataformas de integración de SAP (XI es otra), pero lo interesante de SAP NetWeaver es que ofrece mucha de la funcionalidad propia de los fomularios de SAP a través de WebServices. Y al ser un estándar, esta opción es una de las más utilizadas actualmente.

Lo interesante de esta opción es que en equipos complejos, puedes trabajar codo a codo con gente del mundo SAP (ABAP o Java) que creen y publiquen servicios específicos para ser utilizados desde el mundo .Net. Esto permite que todas aquellas personalizaciones que se apliquen a un SAP para un determinado negocio puedan ser utilizadas desde el mundo .Net sin problemas. De todas mis experiencias, éstas han sido las más fructíferas.

Otras opciones

Para finalizar y para no hacer un libro de un post, simplemente comentar que existen otras herramientas muy interesantes a tener en cuenta. Un ejemplo de ello puede ser Duet; Duet es un proyecto desarrollado en conjunto por Microsoft y SAP que tiene como objetivo lograr que los productos de Office puedan ser utilizados como Front-End para los procesos en SAP. Esto brinda una gran ventaja sobre la interfaz clásica de SAP ya que la suite de productos Office es la más popular del mercado. Además aprovechando las posibilidades de integración de Office con otros productos como Sharepoint o la capacidad de extensión a través de VSTO, se pueden lograr experiencias de usuario realmente productivas trabajando con Office + SAP.

Y si lo tuyo es la integración pura y dura, seguramente tu herramienta sea Biztalk. Como no podía ser de otra manera, existe una opción muy robusta para este caso, aunque lamentablemente o afortunadamente yo no tengo mucha experiencia para hablar sobre la misma:

Pues bien, mi idea era dar un poco una idea general sobre las diferentes capacidades y además creo que logré un objetivo personal: un post de integración a muy alto nivel sin un solo diagrama :D

 

Update: gracias al gran Andrés (thanks amigo !!)

Ey Bruno!

Gran articulo (as usual).

Dado que en mi cliente (que ya sabes cual es y por el cual puede que después de tanto tiempo en él acabe haciendo mutar mí apellido jajaja) estamos trabajando desde hace tiempo (y últimamente con más empuje) en las diferentes opciones de integración con SAP, pongo aquí una pequeña y humilde aportación:

- Respecto a la opción Netweaver: Gracias a él se pueden exponer como web services SOAP “estándar” Funtion Modules/BAPIs de SAP, pero no solo los que se creen custom. En principio cualquier modulo (incluso los estándar de SAP) se pueden exponer como un web service normal y corriente. Solo hay que activar la opción “Remote Enbaled module” que aparece en esta imagen (img8.imageshack.us/.../remoteenabledbapi.jpg) dentro de las propiedades del Funtion Module/BAPI en SAP. Una vez hecho esto, el WAS expone un explorador de web services (img8.imageshack.us/.../webservicebrowser.jpg) a través del cual podemos acceder a todos los Function Modules/BAPIs que dicho entorno SAP tenga configurados como “Remote Enabled” y generar el WSDL correspondiente (voila! Web reference de toda la vida en nuestro proyecto .NET). La URL del Web Service browser tiene esta estructura: http://<host_name>:<port_number>/sap/bc/bsp/sap/WebServiceBrowser/search.html?sap-client=<relevant_client>

- El Biztalk Adapter Pack: Aparte de poderse usar en integraciones  en las que “cuadre” BizTalk, este pack (cuyo  adaptador SAP reemplaza al antiguo SAP Connector) se puede usar también desde cualquier aplicación .NET. Es decir, se puede usar ese mismo Adaptador desde tu propia aplicación .NET sin necesidad de involucrar BizTalk, pudiendo llamar a SAP desde cualquier aplicación .NET, e incluso pudiendo hacer que SAP sea el que llame a un servicio WCF que contenga un endpoint de tipo SAPBinding expuesto en tu aplicación .NET (una aplicación .NET actuando como servidor RFC!). Las diferentes opciones de uso del Adaptador desde una aplicación .NET están documentadas aquí (technet.microsoft.com/.../cc185470.aspx). OJO, según informaciones que hemos recibido, el antiguo SAP Connector dejara de recibir soporte oficial de SAP en breve, por lo que es recomendable modificar las aplicaciones existentes que lo usen y empezar a usar el adaptador del Biztalk Adapter Pack.

 

Saludos @ Home

El Bruno

Crossposting from ElBruno.com

El Bruno Visual Studio Team System

Buenas,

una de las cosas buenas que tiene Team Foundation Server es que nunca dejará de sorprenderte. Por ejemplo, hace un par de años que utilizo Visual Studio Team System y siempre me aproveche de ese excelente recurso que es seleccionar un Query dentro de la rama WorkItems // Team Queries o My Queries y exportarlos a Excel.

Sin embargo, mientras probaba esto desde el ordenador de un compañero me encontré con el siguiente error:

TF80042: The document cannot be opened because you do not have Microsoft Excel 2003 or later, or one of its components installed. For more information, see the Team Foundation Installation Guide.

Después de navegar un poco, encontré la razón de este error: las extensiones para programador de .Net para Excel no están instaladas.

Para solucionar esto debemos seguir los siguientes pasos con Excel 2007

  • Acceder al menú Add or Remove Features de Office 2007
  • Expandir la lista de componentes y seleccionar .NET Programmability Support para que sea parte del producto instalado
  • Update y listo !!!

Asimismo si las extensiones no están instaladas, por la misma causa se puede disparar el error:

TF80042: The document cannot be opened because you do not have Microsoft Excel 2003 or later

 

Saludos @ La Finca

El Bruno

Crossposting from ElBruno.com

Buenas,

este es el 6to recopilatorio con los posts que voy escribiendo sobre las novedades de Visual Studio Team System 2010 (aka “What’s new in Visual Studio Team System 2010”). Esperemos que en próximo recopilatorio podamos comenzar a mostrar algo de las primeras Betas de VSTS 2010, porque últimamente he dedicado 100% del tiempo a probar las Coded UI Tests :D

WorkItems
Source Control
TFS Build
Herramientas de Modelado
Visual Studio
Visual Studio Test
Varios

Como todavía queda mucho material por comentar y muchos posts por crear, actualizaré este listado periódicamente.

Saludos @ Home

El Bruno

Crossposting from ElBruno.com

El Bruno Visual Studio Team System

Buenas,

una de las grandes quejas que por lo general tiene la gente cuando utiliza el Logging Application Block de Enterprise Library, está relacionado con el timestamp con el que se sella cada registro en la acción de traza. Independientemente del repositorio de Loggin (MSMQ, TextFile, Mail, base de datos, etc.), este dato nos permite saber la hora exacta en la que se registro la traza; pero por lo general salvo que vivas en el meridiano de Greenwich nunca coincide con la hora actual.

¿Porqué es esto?, pues porque el formato de grabación de información que por defecto trae EntLib (recordad que toda la información se procesa previamente por formatters) utiilza el siguiente formato:

Timestamp: {timestamp}

cuando en realidad para registrar la hora local del equipo donde se hostee el Logging Application Block se debería utilizar

Timestamp: {timestamp(local)}

Para cambiar esta configuración utilizamos como siempre la herramienta de configuración de Enteprise Library y en la sección Configuración // Logging Application Block // Formatters seleccionamos el Formatter correspondiente y editamos el template del mismo

Dentro del Template simplemente cambiamos el formato del TimeStamp y listo !!!

 

Saludos @ Home

El Bruno

Crossposting from ElBruno.com

Buenas,

después del evento de Visual Studio 2010, me di cuenta que en 120 minutos no se puede mostrar todas las novedades es practicamente imposible. Una de las cosillas que me quedaron pendiente de mostrar son las capacidades de los impresionantes Coded UI Tests.

Hace un tiempo escribí un post sobre como crear una prueba utilizando código para testear la suma en una calculadora. Pero como el framework de tests es el mismo que conocemos desde hace tiempo, y gracias a las enseñanzas de mi amigo Edu, se me ocurrió que podría aprovechar las capacidades de Data Driven Test de Visual Studio y de esta forma crear un set de datos para probar a cascoporro la calculadora.

El siguiente tutorial muestra como cambiar el comportamiento del test creado en el post anterior para que utilice para en las pruebas los datos de un archivo CSV.

Tutorial

1. Crear un archivo CSV con los siguientes valores

2. Selecccionar el test en el panel Test View y mostrar las propiedades del mismo

3. Seleccionar la propiedad Data Connection String y editar la misma

04. Seguir los pasos del asistente y seleccionar el archivo CSV que hemos creado en el paso 1.

05. Esta acción agregará el archivo al proyecto de pruebas

06. Además modificará el test donde se decorará al mismo con los atributos necesarios para que se pueda importar los datos desde el archivo CSV.

07. Debemos en este punto modificar nuestra prueba para que quede como el siguiente ejemplo:

   1: [DeploymentItem("CalculatorTest\\AddTestData.csv"), DeploymentItem("DataAddTest.csv"), 
   2:   DeploymentItem("CalculatorTest\\DataAddTest.csv"), DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\AddTestData.csv", 
   3:   "AddTestData#csv", DataAccessMethod.Sequential), TestMethod]
   4:     public void CalculatorAddCodedUITest()
   5:     {
   6:       // Click 'Unknown Name' text box
   7:       UITestControl calculatorWindow = new UITestControl();
   8:       calculatorWindow.FrameworkName = "MSAA";
   9:       calculatorWindow.PrimarySearchProperties.Add("Name", "Calculator");
  10:       calculatorWindow.PrimarySearchProperties.Add("ClassName", "SciCalc");
  11:       calculatorWindow.SearchScope = SearchScope.VisibleOnly;
  12:       calculatorWindow.Find();
  13:  
  14:       // Click 'C' button
  15:       WinButton btnClearAction = new WinButton(calculatorWindow);
  16:       btnClearAction.PrimarySearchProperties.Add("Name", "C");
  17:       btnClearAction.SearchScope = SearchScope.VisibleOnly;
  18:       btnClearAction.Find();
  19:       btnClearAction.Click(new Point(26, 8));
  20:  
  21:       // Click First  button
  22:        WinButton btnFirstNumber = new WinButton(calculatorWindow);
  23:       btnFirstNumber.PrimarySearchProperties.Add("Name", TestContext.DataRow[0].ToString());
  24:       btnFirstNumber.SearchScope = SearchScope.VisibleOnly;
  25:       btnFirstNumber.Find();
  26:       btnFirstNumber.Click(new Point(26, 8));
  27:  
  28:       // Click '+' button
  29:       WinButton btnAddAction = new WinButton(calculatorWindow);
  30:       btnAddAction.PrimarySearchProperties.Add("Name", "+");
  31:       btnAddAction.SearchScope = SearchScope.VisibleOnly;
  32:       btnAddAction.Find();
  33:       btnAddAction.Click(new Point(26, 8));
  34:  
  35:       // Click Second button
  36:       WinButton btnSecondNumber = new WinButton(calculatorWindow);
  37:       btnSecondNumber.PrimarySearchProperties.Add("Name", TestContext.DataRow[1].ToString());
  38:       btnSecondNumber.SearchScope = SearchScope.VisibleOnly;
  39:       btnSecondNumber.Find();
  40:       btnSecondNumber.Click(new Point(26, 8));
  41:  
  42:       // Click '=' button
  43:       WinButton btnEqualAction = new WinButton(calculatorWindow);
  44:       btnEqualAction.PrimarySearchProperties.Add("Name", "=");
  45:       btnEqualAction.SearchScope = SearchScope.VisibleOnly;
  46:       btnEqualAction.Find();
  47:       btnEqualAction.Click(new Point(26, 8));
  48:  
  49:       WinWindow wndTextBox = new WinWindow(calculatorWindow);
  50:       wndTextBox.PrimarySearchProperties.Add("ClassName", "Edit");
  51:       wndTextBox.SearchScope = SearchScope.VisibleOnly;
  52:       wndTextBox.Find();
  53:       WinEdit editTextBox = new WinEdit(wndTextBox);
  54:       Assert.AreEqual(editTextBox.Value.ToString(), 
  55:         string.Format("{0}. ", TestContext.DataRow[2].ToString()));
  56:     }

 

08. En la misma podemos ver

  • Líneas 1 a 3; los atributos específicos para que la prueba utilice el archivo con los datos.
  • Líneas 23 y 37; el click específico de los botones se realiza a partir de los valores del archivo de prueba.
  • Línea 54; el resultado de la prueba se valida a partir de los valores de la 3ra columna del archivo de prueba.
  • Línea 54; aplico además un formato especial para validar el número que se obtiene desde la caja de texto.

09. Cuando ejecutamos la prueba podemos ver el siguiente resultado

donde vemos que todas las pruebas pasan correctamente, menos la 3ra. Esto es porque en la 3ra fila de datos de prueba los valores que se pasan a la prueba son “12” y “6”; y al momento de buscar un botón con el texto [12] la prueba da un error.

 

El siguiente video muestra el paso a paso de la prueba y la ejecución de la misma (ojo que la prueba tarda bastante en comenzar)

<br/><a href="http://video.msn.com/video.aspx?vid=2784e289-fdc6-42b6-8314-7e334673bf7b" mce_href="http://video.msn.com/video.aspx?vid=2784e289-fdc6-42b6-8314-7e334673bf7b" target="_new" title="VSTS 2010 Data Driven Coded UI Test">Video: VSTS 2010 Data Driven Coded UI Test</a>

 

Saludos @

El Bruno

Crossposting from ElBruno.com

Buenas,

después de un día extremadamente largo, donde sufrí un poco pensando que el avión no llegaba a tiempo a Madrid; en el evento de Novedades de Visual Studio Team System 2010, los 120 minutos se han pasado en 10 minutos.

Ya lo comenté al principio, hay tantas cosas nuevas que es imposible mostrarlas a todas; pero por suerte después de comerme al mediodía un chuleton tamaño Bilbao, tuve las energías suficientes para mostrar casi todo.

En breve podréis ver el video de la presentación, pero por ahora dejo el acceso a la presentación del evento:

http://cid-bef06dffdb192125.skydrive.live.com/self.aspx/2009%2003%2018%20LiveMeeting%20Novedades%20en%20VSTS%202010

Saludos @ Home

El Bruno

Crossposting from ElBruno.com

El Bruno Visual Studio Team System

Buenas,

la página oficial de MSDN donde se detalla como mover servidores Team Foundation Server en diferentes escenarios tiene mucha información muy organizada. Sin embargo, si el escenario es renombrar un TFS en un mismo hardware hay un paso que no está documentado y que puede traernos algún dolor de cabeza.

Esta vez, no me llevaré el mérito ya que ha sido el amigo Alexis el que me ha apuntado, que si bien uno sigue todos los pasos de la migración cuando se navegan sites de MOSS/WSS la url que aparece en el host está con el “nombre viejo” del server. Yo le dije a Alexis que lo vería cuando tuviese tiempo, pero él se puso manos a la obra y se dio cuenta que en el directorio

C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\admisapi

el archivo webconfig había quedado con información del antiguo server:

   1: <authorization>
   2:   <allow roles="BUILTIN\Administrators" />
   3:   <allow roles="NOMBREANTIGUO\WSS_ADMIN_WPG" />
   4:   <deny users="*" />
   5: </authorization>

La solución es simplemente modificar este web.config, reiniciar el IIS y listo !!!

 

Saludos @ Bilbao

El Bruno

Crossposting from ElBruno.com

Buenas,

pues ya está todo organizado y el próximo miércoles a las 22:00 (GMT+1) se realizará el evento: Novedades de Visual Studio 2010 sobre el que Fernando comentó hace unos días y que han organizado la gente del programa académico Microsoft Student to Business e Ineta Latam (comité académico) para esta noche a las 22:00 GMT +1.

Para agregar esta entrada al calendario: http://visualstudio2010.events.live.com/event.ics 

Este es un pequeño listado de algunas de las novedades que veremos en el evento:

  • nuevas extensiones y capacidades para el trabajo con WorkItems
  • nuevos informes en las nuevas plantillas de 2010
  • nuevas funcionalidades en la integración con Office
  • nuevas funcionalidades para branching y merging
  • nuevas capacidades en la ventana de historico para los elementos de TFS
  • Gated CheckIn !!!
  • nuevas opciones para lanzar builds desde Shelvesets
  • nuevo editor gráfico para las builds
  • nuevas opciones para presentar la información con los resultados de una build
  • Diagramas de Secuencia
  • DGML !!!
  • Architecture Explorer
  • poquito –> nuevas funcionalidades para VB.Net 10
  • poquito –> nuevas funcionalidades para C# 4
  • RuleSet como feature por fin !!!
  • ejemplo del depurador histórico
  • incrementando la productividad del desarrollador
  • Test Impact Window cool !!!
  • Cobertura de codigo, igual pero mejor
  • etc …

 

Saludos @ La Finca

El Bruno

Crossposting from ElBruno.com

El Bruno Visual Studio Team System

Buenas,

no todo el mundo tiene la suerte de llevar una doble vida como Chuck aunque solo sea para que Sara te cuide, pero un par de compañeros MVPs han tenido la suerte de trabajar codo a codo con el equipo de producto de Team System durante el mes de diciembre; y el resultado de esta colaboración ha sido MPT: Microsoft Process Template.

MPT es una solución interna de Microsoft para el desarrollo de aplicaciones que se basa en el ciclo de desarrollo de productos de Microsoft y que se adapta a Visual Studio Team System 2008. Al ser una guía de proceso, incluye elementos de trabajo, consultas, documentación, informes, etc. que incorporan las mejores prácticas y lecciones aprendidas de diferentes equipos de trabajo.

Lo he instalado, pero todavía no lo he revisado a fondo en mi Test machine aunque por lo que veo es bastante interesante. Recomendado para aquellas personas que se aburran un sábado por la noche

Descarga: http://mpt.codeplex.com/

 

Saludos @ Home

El Bruno

Crossposting from ElBruno.com

Buenas,

para despejar un poco los posts de Team System, hoy me toca escribir una solución a un problema un tanto extraño:

¿cómo agregar soporte para el botón derecho del mouse en una aplicación Silverlight?

No tengo muy en claro el porqué no han incluido esta funcionalidad dentro de SL, supongo que por cuestiones de compatibilidad con otras plataformas; pero a mi jefe eso mucho no le importa el botón derecho suele ser una comodidad para algunos entornos, asi que a buscar una solución.

Si bien existen varias formas de lograrlo, yo me decanté por aprovechar las capacidades de los navegadores y que desde el navegador se dispare el evento del click para ser interpretado por la aplicación Silverlight.

El siguiente paso a paso muestra como realizar un pequeño ejemplo para agregar soporte para el click derecho del mouse en aplicaciones Silverlight.

Tutorial

1. Dentro de Visual Studio 2008 SP 1, con el toolkit de Silverlight instalado creamos un nuevo proyecto: menu File // New Project.

2. Seleccionamos Visual C# // Silverlight, del tipo Silverlight Application y le damos un nombre (SLRightClickDemo en este caso)

3. En el formulario de opción para el hosting de nuestra aplicacion SL, seleccionamos la primera opción Add a new ASP.Net Web Project to the solution to host Silverlight. (el nombre por defecto que nos propone es SLRightClickDemo.Web)

4. Como comenté en la introducción, mi idea es aprovechar las capacidades de Javascript para interceptar el evento Right Click de un ratón, es por esto que lo primero que modificaremos será el archivo de test SLRightClickDemoTestPage.html.

5. Seleccionar el archivo SLRightClickDemoTestPage.html; desplegar el menú contextual y seleccionar la opción Set as Start Page.

6. Editamos el archivo SLRightClickDemoTestPage.html; modificamos la definición del body para trabajar con los eventos del raton:

   1: <body onmousedown="MouseClickEvent();" oncontextmenu="return false;">

7. A continuación agregamos un nuevo bloque de Script con la definición de la función MouseClickEvent():

   1: <script type="text/javascript">
   1:  
   2:   function MouseClickEvent() {
   3:     try {
   4:       var silverlightControl = document.getElementById("Xaml1");
   5:       if (silverlightControl) {
   6:         silverlightControl.Content.ActualSilverlightControl.ProcessMouseClickEvent(event);
   7:       }
   8:     }
   9:     catch (e) { }
  10:   }
</script>

Esta función obtiene el control de la página llamado Xaml1 y luego invoca a una función ProcessMouseEvent pasandole como argumento los datos del evento del navegador.

8. Como la página por defecto de prueba no define el nombre del control para SL, le agregamos el id al mismo (línea 2) y además definimos el parámetros windoless a true para nuestra aplicación SL (línea 8):

   1: <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" 
   2:     width="100%" height="100%" id="Xaml1">
   3:     <param name="source" value="ClientBin/SLRightClickDemo.xap"/>
   4:     <param name="onerror" value="onSilverlightError" />
   5:     <param name="background" value="white" />
   6:     <param name="minRuntimeVersion" value="2.0.31005.0" />
   7:     <param name="autoUpgrade" value="true" />
   8:     <param name="windowless" value="true" />
   9:     <a href="http://go.microsoft.com/fwlink/?LinkID=124807" 
  10:         style="text-decoration: none;">
  11:          <img src="http://go.microsoft.com/fwlink/?LinkId=108181" 
  12:             alt="Get Microsoft Silverlight" style="border-style: none"/>
  13:     </a>
  14: </object>

9. El trabajo en nuestra página HTML ya está listo.

10. A continuación abrimos en modo de edición de código el archivo Page.xaml y realizamos las siguientes modificaciones:

   1: [ScriptableType]
   2: public partial class Page : UserControl
   3: {
   4:   public Page()
   5:   {
   6:     InitializeComponent();
   7:  
   8:     this.Loaded += new RoutedEventHandler(Page_Loaded);
   9:   }
  10:  
  11:   void Page_Loaded(object sender, RoutedEventArgs e)
  12:   {
  13:     // register current object
  14:     HtmlPage.RegisterScriptableObject("ActualSilverlightControl", this);
  15:  
  16:   }
  17:  
  18:   [ScriptableMember]
  19:   public void ProcessMouseClickEvent(ScriptObject evt)
  20:   {
  21:  
  22:     string buttonDesc = "";
  23:     int button = int.Parse(evt.GetProperty("button").ToString());
  24:     int clientX = int.Parse(evt.GetProperty("ClientX").ToString());
  25:     int clientY = int.Parse(evt.GetProperty("ClientY").ToString());
  26:     if (button == 1)
  27:       buttonDesc = "Izq";
  28:     else if (button == 2)
  29:       buttonDesc = "Der";
  30:  
  31:     string msg = string.Format(@"Click: {0}, en {1}, {2}", buttonDesc, clientX.ToString(), clientY.ToString());
  32:     MessageBox.Show(msg);
  33:   }
  34: }

11. El atributo [ScriptableType] que decora la clase (línea 1) permite que nuestra clase pueda trabajar con scripting.

12. En el evento Loaded() de la página registramos el mismo como un control que trabaje con script.

13. Agregamos una nueva función ProcessMouseClickEvent() (línea 19) que es la función que se invoca desde el navegador cuando se realiza un click con el mouse (ver paso 7).

14. F5 run, y listo.

 

El código de ejemplo de la demo se puede descargar desde http://cid-bef06dffdb192125.skydrive.live.com/self.aspx/Code%20Samples/2009%2003%2013%20Silverlight%20RightClick%20Demo.zip

 

 

Saludos @ La Finca

El Bruno

Crossposting from ElBruno.com

Publicado 13/3/2009 14:11 por El Bruno | con no comments

El Bruno Visual Studio Team System

Buenas,

si bien yo particularmente entiendo a los proyectos de MOSS como proyectos de “Next, Next, Check, Finish” y eso demuestra lo cortito de cerebro que soy; muchos proyectos de Sharepoint son extremadamente complicados: el entorno de desarrollo es dificil de configurar, los componentes de desarrollo tampoco son fáciles de configurar, etc.

Sumado a estos problemas, la gestión del ciclo de vida de un proyecto de MOSS puede tener muchas variantes ya que los artefactos que componen el resultante de un proyecto pueden ser de diferentes tipos, y esto supone diferentes pruebas para cada uno, un modelo de gestión diferente para sus requerimientos (opcional esto obvio), etc. Vamos que de a poco, si queremos hacer las cosas bien; se nos puede complicar bastante el tema.

Por suerte este grupo “no tan interno” de Microsoft llamado los VSTS Rangers últimamente han publicado varios whitepapers que nos pueden ser utilidad:

Seguro que no te aburres … :D

 

Saludos @ La Finca

El Bruno

Crossposting from ElBruno.com

Buenas,

por un problemilla personal (les aseguro que no me voy a Barcelona para ver el partido Barcelona – O. de Lyon) es muy posible que esta noche no pueda estar en el evento sobre Novedades de Visual Studio 2010 sobre el que Fernando comentó hace unos días y que han organizado la gente del programa académico Microsoft Student to Business e Ineta Latam (comité académico) para esta noche a las 22:00 GMT +1.

A simple vista esto no debería ser un problema, pero como soy el ponente la cosa se complica. Me da un poco de rabia porque tengo todo preparado desde hace tiempo y el tema es chulo pero no quiero dejar en banda a aquellos que se conecten.

Es por eso que, al mejor estilo Batman de los ‘70s, o del Chapulin Colorado; el evento lo posponemos una semana para el próximo miércoles a la misma hora en la misma sala de Live Meeting.

Cuando tenga la confirmación de la sala y la invitación dejaré una cita para el Outlook para que la puedan agregar en sus agendas y acordarse de mis parientes por la cancelación.

Y este es un pequeño listado de algunas de las novedades que veremos en el evento:

  • nuevas extensiones y capacidades para el trabajo con WorkItems
  • nuevos informes en las nuevas plantillas de 2010
  • nuevas funcionalidades en la integración con Office
  • nuevas funcionalidades para branching y merging
  • nuevas capacidades en la ventana de historico para los elementos de TFS
  • Gated CheckIn !!!
  • nuevas opciones para lanzar builds desde Shelvesets
  • nuevo editor gráfico para las builds
  • nuevas opciones para presentar la información con los resultados de una build
  • Diagramas de Secuencia
  • DGML !!!
  • Architecture Explorer
  • poquito –> nuevas funcionalidades para VB.Net 10
  • poquito –> nuevas funcionalidades para C# 4
  • RuleSet como feature por fin !!!
  • ejemplo del depurador histórico
  • incrementando la productividad del desarrollador
  • Test Impact Window cool !!!
  • Cobertura de codigo, igual pero mejor
  • etc …

 

Saludos @ La Finca (y disculpas nuevamente)

El Bruno

PD: la informática es una profesión complicada, pero ser padre soltero es más complicado aún !!!

Crossposting from ElBruno.com

El Bruno Visual Studio Team System

 

Buenas,

cuando tienes un servidor de Team Foundation Server que no se ha despertado en un buen día, te pueden suceder cosillas raras. Por ejemplo, encontrarte con un error TFS30162 al momento de crear un nuevo Team Project.

El problema con este tipo de errores es que no dan mucha información en el formulario de creación de Team Project, asi que debemos navegar al log de errores para averiguar cuál es el problema. Pero, una vez dentro del Log, las cosas tampoco son tan fáciles, ya que la pista que puede ayudarnos suele estar un poco escondida en el Log.

Por ejemplo la siguiente excepción describe en 50 línes varias excepciones anidadas, y es la última la que nos indica una posible solución al problema:

   1: ---begin Exception entry---
   2: Time: 2009-03-04 15:43:39Z
   3: Module: Template Importer
   4: Exception Type: Microsoft.TeamFoundation.Client.ValidationFailedException
   5: Exception Message: TF30175: Process template validation failed
   6: Stack Trace:
   7:    en Microsoft.VisualStudio.TeamFoundation.EngineStarter.ValidateTemplate(DirectoryInfo templateDirectory)
   8:    en Microsoft.VisualStudio.TeamFoundation.TemplateManagementService.ValidateMethodology(String folderPath, ILogHandler logHandler)
   9:    en Microsoft.VisualStudio.TeamFoundation.TemplateManagementService.Import(String folderPath, ILogHandler logHandler)
  10: --   Inner Exception   --
  11: Exception Type: Microsoft.VisualStudio.TeamFoundation.TaskFailedException
  12: Exception Message: TF30162: Task "SharePointPortal" from Group "Portal" failed
  13: Stack Trace:
  14:    en Microsoft.VisualStudio.TeamFoundation.ProjectCreationEngine.PerformAllTasks(ITaskPerformer taskPerformer, ProjectCreationContext creationContext, List`1 projectTasks)
  15:    en Microsoft.VisualStudio.TeamFoundation.EngineStarter.RunEngine(Boolean isValidationRun, String templateFolder)
  16:    en Microsoft.VisualStudio.TeamFoundation.EngineStarter.ValidateTemplate(DirectoryInfo templateDirectory)
  17: -- end Inner Exception --
  18: --   Inner Exception   --
  19: Exception Type: Microsoft.TeamFoundation.Client.PcwException
  20: Exception Message: Unable to connect to the Windows SharePoint Services at Madavcaptfs01
  21: Exception Details: The Project Creation Wizard was not able to connect to the Windows SharePoint Services
  22: at Madavcaptfs01. The reason for the failed connection cannot be determined at this time. 
  23: Because the connection failed, the wizard was not able to complete creating 
  24: the Windows SharePoint Services site.
  25: Stack Trace:
  26:    en Microsoft.VisualStudio.TeamFoundation.WssSiteCreator.VerifyLcidOnServer(ProjectCreationContext ctxt, Int32 lcid)
  27:    en Microsoft.VisualStudio.TeamFoundation.WssSiteCreator.ValidateSite(ProjectCreationContext context, XmlNode site)
  28:    en Microsoft.VisualStudio.TeamFoundation.WssSiteCreator.Validate(ProjectCreationContext context, XmlNode taskXml)
  29:    en Microsoft.VisualStudio.TeamFoundation.ProjectCreationEngine.TaskValidator.PerformTask(IProjectComponentCreator componentCreator, ProjectCreationContext context, XmlNode taskXml)
  30:    en Microsoft.VisualStudio.TeamFoundation.ProjectCreationEngine.RunTask(Object taskObj)
  31: -- end Inner Exception --
  32: --   Inner Exception   --
  33: Exception Type: System.Net.WebException
  34: Exception Message: No es posible conectar con el servidor remoto
  35: WebException: Status : ConnectFailure
  36: Stack Trace:
  37:    en System.Net.HttpWebRequest.GetRequestStream()
  38:    en System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
  39:    en Microsoft.TeamFoundation.Proxy.Portal.Admin.GetLanguages()
  40:    en Microsoft.VisualStudio.TeamFoundation.WssSiteCreator.VerifyLcidOnServer(ProjectCreationContext ctxt, Int32 lcid)
  41: -- end Inner Exception --
  42: --   Inner Exception   --
  43: Exception Type: System.Net.Sockets.SocketException
  44: Exception Message: No se puede establecer una conexión ya que el equipo de destino denegó expresamente dicha conexión 10.33.178.26:17012
  45: Stack Trace:
  46:    en System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
  47:    en System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP)
  48:    en System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)
  49: -- end Inner Exception --
  50: --- end Exception entry ---
  51:  

donde podemos ver que tenemos un timeout al momento de conectarnos a la url 10.33.178.26:17012.

En este caso resulta que el puerto de administración de Sharepoint ha cambiado y no se ha actualizado la configuración de Team Foundation Server, asi que debemos realizar este proceso manualmente utilizando el comando ConfigureConnections de la herramienta TfsAdminUtil.

Por suerte esta herramienta esta documentada en la MSDN y podemos leer como utilizar la misma en http://msdn.microsoft.com/es-es/library/bb778396.aspx

 

Saludos @ La Finca

El Bruno

Crossposting from ElBruno.com

Buenas

el próximo miércoles, 11 de marzo de 2009 de 19:00 a 21:00 nuestro amigo Marco Amoedo (MVP Dynamics CRM) nos ofrecerá una charla sobre la versión empresarial de Outlook Microsoft Dynamics CRM.

Puedes encontrar más información y el link de registro en la página de MadridDotNet, en http://madriddotnet.spaces.live.com/blog/cns!6453107D41F04C68!207.entry

A continuación la descripción del evento y una foto de Marco para que sepas a lo que te enfrentas:

Descripción:

Microsoft Dynamics CRM es mucho más que una pura herramienta CRM, es una robusta plataforma para aplicaciones de línea de negocio ("xRM"), construida sobre .Net siguiendo los principios SOA, que posibilita la creación de aplicaciones empresariales que no tienen porque estar relacionadas con la pura gestión de las relaciones con los clientes.
Durante esta charla veremos que tiene de interesante la plataforma Dynamics CRM para agilizar nuestros desarrollos de aplicaciones empresariales robustas e integradas. Veremos cómo se puede extender esta plataforma de forma sencilla para cubrir nuestro modelo de datos, como podemos automatizar y dar consistencia a los procesos de negocio utilizando Worfklows, como podemos ofrecer acceso a la aplicación utilizando varios tipos de clientes tanto online como offline e integrar aplicaciones externas, como podemos personalizar el Interfaz de Usuario e integrar nuevas funcionalidades, y sobre todo como utilizar el Framework .Net para extender la plataforma y la lógica de negocio fácilmente

 

Saludos @ La Finca

El Bruno

Crossposting from ElBruno.com
Publicado 9/3/2009 12:59 por El Bruno | 3 comment(s)
Archivado en:

El Bruno Visual Studio Team System

Buenas,

otro post que viene del cajón de borradores, pero este es uno que siempre es útil, especialmente cuando tenemos problemas con la sincronización de datos con Team Foundation Server. En algunos casos, cuando trabajamos con 2 servidores Team Foundation Server y en la misma sesión de Visual Studio cambiamos entre los mismos, es posible que cierta información quede almacenada en el cache y nuestro panel Team Explorer no funcione correctamente.

Limpiar esta cache, es un proceso realmente simple:

1. Cerrar Visual Studio requisito tan indispensable como obvio.

2. Navegar al directorio "%userprofile%\local settings\application data\Microsoft\team foundation\2.0"

3. Eliminar todo el contenido y subdirectorios

4. Festejar con un par de cervezas, porque ya no tendremos más problemas.

 

Saludos @ Home

El Bruno

Crossposting from ElBruno.com

Buenas,

después de un mes de trabajo en un proyecto con Silverlight, he de confesar que he quedado bastante contento. Inicialmente todo me parecían trabas o problemas, pero cuando te acostumbras a las limitaciones de esta tecnología comienzas a pasarlo realmente bien.

Uno de los detalles que más me molestó durante un tiempo, era lo “pesado” que era la edición en el IDE de Visual Studio de los controles o páginas XAML. Si bien la mayoría del trabajo lo realizaba con Expression Blend, en ocasiones era mucho más rápido editar los xamls directamente con Visual Studio.

Pero aquí va el pero del post el IDE cuando editas un archivo de este tipo, abres por defecto las vistas en modo texto y en modo diseño; y la 2da es pesada para Visual Studio. Por suerte existe una forma de deshacerse de este comportamiento, aunque esta vez nuestros amigos de Visual Studio se han esforzado en esconderla.

En el menu Tools // Options, debemos navegar a la opción Text Editor // XAML // Miscellaneous y seleccionar la opción Always open documents in full XAML view.

 

 

Un sólo check que nos dará muchas alegrías.

 

Saludos @ Home

El Bruno

PD: obviamente esto no es sólo para Silverlight sino para WPF en general.

Crossposting from ElBruno.com
Publicado 8/3/2009 0:13 por El Bruno | con no comments
Más artículos Página siguiente >