[VSTE4DB] Como realizar el deploy de nuestros proyectos de bases de datos ??

Buenas

después del Service Release 1 para Visual Studio Team Edition for Database Professionals, muchas cosas se han arreglado. Entre ellas algunos aspectos relacionados con el deploy de nuestros proyectos de bases de datos cuando trabajamos con Team Foundation Server y con el servidor Team Build. Éste es un tema sobre el que me preguntan bastante asi que repasaré algunas de las opciones que tenemos para lograr que nuestro deploy sea satisfactorio. El siguiente listado recoge algunos de los puntos que tenemos que tener en cuenta para trabajar con Visual Studio Team Edition for Database Professionals

 

1. Nuevo Schema para los proyectos de Base de Datos

Una vez instalado el Service Release 1 para Visual Studio Team Edition for Database Professionals cuando abrás nuevamente un proyecto de bases de datos, el mismo se actualizará a la nueva versión modificando las propiedades del mismo. Esto significa que todas las personas que trabajen con este proyecto deben actualizar a SR1.

 

2. Nuevas propiedades para los proyectos de Base de Datos

Los nuevos proyectos poseerán nuevas propiedades con las que podremos trabajar, por ejemplo en la pestaña Build, podremos ver algunos campos nuevos para la base de datos de detinos donde queremos hacer el deploy de nuestro proyecto.

Sin embargo, estos datos que vemos aquí no quedan reflejados en el archivo de proyecto. Debemos asegurarnos que los campos Target connection, Target database name y Default location for target database files posean información para poder procesar nuestro proyecto. Lamentablemente Visual Studio Team Edition for Database Professionals no guarda estos valores correctamente en el archivo de proyecto por lo que debemos revisar los valores del mismo.

Para esto debemos editar el archivo de nuestro proyecto (MyProyect.dbproj) y dentro del mismo verificar los valores de los elementos <TargetConnectionString>, <TargetDatabase> y <DefaultDataPath>. El siguiente ejemplo muestra la configuración para el modo test de un proyecto de prueba donde podemos ver los 2 primeros elementos con los valores modificados.

<PropertyGroup Condition=" '$(Configuration)' == 'Test' "> <AutoGenerateBuildScriptName>False</AutoGenerateBuildScriptName> <BuildScriptName>$(MSBuildProjectName).sql</BuildScriptName> <TargetConnectionString>SERVER=ElServerDelBruno; Database=dbTestDeploy; User Id=ElAdministratorDelBruno; Password=LaPasswordDelAdministratorDelBruno</TargetConnectionString> <TargetDatabase>dbTestDeploy</TargetDatabase> <DeploymentCollationPreference>None</DeploymentCollationPreference> <AlwaysCreateNewDatabase>true</AlwaysCreateNewDatabase> <GenerateDropsIfNotInProject>False</GenerateDropsIfNotInProject> <BlockIncrementalDeploymentIfDataLoss>True</BlockIncrementalDeploymentIfDataLoss> <TreatWarningsAsErrors>False</TreatWarningsAsErrors> <PerformDatabaseBackup>False</PerformDatabaseBackup> <SingleUserMode>False</SingleUserMode> <UseFuzzyMatchForColumns>False</UseFuzzyMatchForColumns> <SuppressWarnings></SuppressWarnings> <OutputPath>.Test</OutputPath> </PropertyGroup>

 

Para probar este ejemplo, y como tengo seleccionada la opción <AlwaysCreateNewDatabase>, simplemente borro la base de datos y compilo el proyecto. La nueva base de datos dbTestDeploy se debe crear exitosamente en el servidor seleccionado.

 

3. Integrando la compilación en TFS

Este es un punto muy delicado y donde pienso que Visual Studio Team Edition for Database Professionals tiene que madurar mucho todavía. Si nuestro proyecto de base de datos forma parte de una solución y hemos decido que la misma se compile en nuestro servidor de compilación, debemos tener en cuenta lo siguiente:

  1. Además de Visual Studio 2005, Visual Studio Team Edition for Database Professionals y Service Release 1 deben estar instalados en el servidor de Build.
  2. Es necesaria una instancia de Microsoft SQL Server 2005 o Microsoft SQL Server 2005 Express, en nuestro servidor de compilación para que Visual Studio Team Edition for Database Professionals pueda trabajar correctamente y crear los proyectos en tiempo de diseño.
  3. El siguiente error nos dice que el usuario con el que está ejecutándose el servicio no tiene configurada correctamente las opciones para Visual Studio Team Edition for Database Professionals
    MSBUILD : Build error TSD158: An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
  4. Para configurar estas opciones, es necesario abrir una sesión con el usuario que ejecuta el servicio, iniciar Visual Studio 2005 y verificar en las opciones la configuración para Visual Studio Team Edition for Database Professionals. Para esto desde el menu Tools // Options, debemos revisar la siguiente configuración, y es necesario recomendable crear un proyecto de base de datos desde este perfil para asegurarnos que funciona correctamente.

  5. Si después de configurar el usuario del servicio, el mismo sigue dando un error, es posible realizar esta configuración “a mano” agregando una tarea específica en nuestro proyecto de MSBuild:
    <Target Name="ConfigDBPro"> <Exec Command="REG ADD HKEY_CURRENT_USERSoftwareMicrosoftVisualStudio8.0DBProDialogPageMicrosoft.VisualStudio.TeamSystem.Data.DBProject.Settings.DataConnectionOptionsSettings /v DefaultSqlServerName /d scratch2k5"/> <Message Text="Configured registry entry for $(USERNAME)" /> </Target> </Project>
  6. Si esto tampoco funciona, es recomendable revisar si el usuario de dominio que ejecuta el servicio tiene los permisos recomendables dentro de la instancia de Microsoft SQL Server 2005 donde se ejecuta el servidor de compilación. Si no están definidos estos permisos, es recomendable asignar este usuario al grupo de SQL Server.

     

 

4. Realizando el despliegue desde TFS

Esta es la parte mas simple (¿?¿?), si hemos configurado nuestro proyecto para que haga un deploy automático de la base de datos; y queremos que este proceso se realice automáticamente desde nuestro servidor de compilación, estas son algunas opción para lograrlo.

 

  1. Agregar un nuevo target a nuestro proyecto de compilación en el evento AfterDropBuild, con una tarea del tipo MsBuild, donde indicamos la ruta de nuestro proyecto de base de datos y especificamos la configuración y el tipo de acción [Deploy].
    <Target Name="AfterDropBuild"> <MSBuild Projects="$(SolutionRoot)SolutionNameProjectNamedbTestDeploy.dbproj" Properties="Configuration=Test;OutDir=$(SolutionRoot)..binariesDefault" Targets="Deploy" /> <Message Text="Deploy completed from $(USERNAME)" /> </Target>
  2. Como última opción, podemos invocar a la herramienta SQLCMD para que ejecute el script que ha generado la compilación de nuestro proyecto. Para esto agregamos un nuevo target a nuestro proyecto de compilación en el evento AfterDropBuild con la siguiente información
    <Target Name="AfterDropBuild"> <Exec Command="sqlcmd.exe -S ElServerDelBruno -i $(DropLocation)$(BuildNumber)TestdbTestDeploy.sql -o $(DropLocation)$(BuildNumber)TestdbTestDeploy.log"/> </Target>

    Esta opción no es la mas agradable, pero cumple con la tarea requerida y realiza el despliegue de la base de datos.

5. Conclusión

Desde las primeras CTPs Visual Studio Team Edition for Database Professionals ha madurado mucho y creo que se ha consolidado como un perfil indispensable dentro del ciclo de vida de desarrollo. Lamentablemente, todavía hoy no es lo suficientemente configurable como otros productos, como para poder integrarlo tan fácilmente en un proyecto donde se aplique Integración Continua o alguna aproximación a las compilaciones automáticas. Es necesario un poco de paciencia, MSBuild y notepad para lograrlo.

Con la llegada de Microsoft Visual Studio 2008 veremos un perfil para DB más potente y seguramente este tipo de detalles serán solucionados. Mientras tanto cada vez que veo la siguiente imagen me lleno de alegría:

 

 

Referencias

Recomendable leer un poco en:

 

 

Saludos @ Lisboa

El Bruno

Crossposting from ElBruno.com

[VS2008] Aplicaciones y manifiestos

Buenas

si tienes que desarrollar aplicaciones con Visual Studio 2005 para Windows Vista, seguramente te has cruzado con algunos detalles a tener en cuenta por el User Account Control. Una de las soluciones a este problema es trabajar con los manifiestos de aplicaciones .Net, pudiendo encajar (embed) los mismos dentro de la aplicación. De esta manera, Windows Vista detecta nuestra identidad y sabe como reaccionar frente a nuestras acciones. Para un manifiesto simplemente agregamos la siguiente instruccion al evento PostBuild de nuestra aplicación:

"$(DevEnvDir)....Common7ToolsBinmt.exe" -manifest "$(ProjectDir)$(TargetName).exe.manifest" –outputresource:"$(TargetDir)$(TargetFileName)";#1

El problema, es que esta instrucción no es muy descriptiva y el mantenimiento de la misma suele ser bastante tedioso.

 

Por suerte Microsoft Visual Studio 2008 nos facilita mucho más el desarrollo cuando necesitamos ejecutar este tipo de acciones, y la siguiente imagen de las propiedades de un proyecto habla por si sola:

 

¿Y qué sucede si hemos agregado un manifest específico a nuestra aplicación? pues que lo veremos como el archivo a embeber dentro del proyecto en la lista de opciones

 

Saludos @ Lisboa

El Bruno

PD: es cierto el proyecto es de C#, pero sigo probando 100% VB en Microsoft Visual Studio 2008 !!!

Crossposting from ElBruno.com

[VS2008] Infragistics: Cool !!!

Buenas

cuando apenas llegué a España, en febrero del 2005, lo primero que hice (creo que fue a los 2 días de llegar) fue ir a una charla en las oficinas de Microsoft Madrid, donde David Carmona y nuestros amigos de Ilitia mostraban las primeras virtudes de Visual Studio 2005. (fue la primera vez que vi a Miguel Jimenez, aunque luego conocería a ambos 2 años después CodeCamp de por medio).

Si bien conocía el producto de probar las betas, no pude dejar de pasar una pregunta para un empleado de Microsoft (David) sobre esta versión, creo que fue algo así:

– veo que .Net Fwk 2.0 trae muchos nuevos controles windows ¿ que pasa con las empresas que viven de desarrollar y extender controles Windows, por ejemplo Infragistics ?

– Paralelamente al desarrollo de .Net Fwk 2.0, estas empresas han empezado a desarrollar y evolucionar sus productos para adaptarlos a las necesidades que no cubre el nuevo Fwk.

Como siempre, David tuvo razón; desde hace 2 años, Infragistics posee una de las mejores suite de controles .net del mercado: NetAdvantage.

 

En estos días, mientras esperamos a Microsoft Visual Studio 2008, la gente de Infragistics no se ha quedado quieta y está trabajando en nuevas suites de controles para WPF, por ejemplo (algo de esto pudimos ver en el TechEd) y en un proyecto muy interesante llamado Aikido (thanks Steve fo the guidance), aquí tengo que detenerme y ponerme a postear (esto pensé cuando me explicaron de que iba).

Aikido es la evolución de la suite Web de Infragistics, pero en este momento y con las tecnologías emergentes que trae Microsoft Visual Studio 2008. es un momento ideal para rediseñarse. Ademas de soportar las nuevas características de AJAX (cosa que hace desde el 2001 esta suite), rediseñar el modelo de objetos e integrarse completamente en Visual Studio, esta suite será compatible con Silverlight !!! Para los que usamos los productos de Infragistics esta es una muy buena noticia …

Aunque como una demo vale mas que mil palabras (y este post tiene XXX palabras), mejor echarle un vistazo en http://labs.infragistics.com/silverlight/

 

Saludos @ Lisboa

El Bruno

Crossposting from ElBruno.com

Lego Digital Designer (te deja tiempo para un par de cervezas …)

Buenas, si

  • ¿ tienes poca paciencia con las piecitas de tu LEGO ?
  • ¿ nunca encuentras ese engranaje negro entre todos los “palitos” grises ?
  • ¿ sigues pensando como armar un Optimus Prime con tu Lego de Harry Potter ?

gracias al amigo Damian me he encontrado con el interesantísimo Lego Digital Designer, un software free que nos permite armar modelos “virtuales” con las piezas del Lego. Hay personas que no entienden muy bien que ventajas posee este diseñador digital, y yo les digo:

tomen los tiempos entre poner y sacar una pieza del lego; y hacer un UNDO o REDO en LEGO Digital Designer

Listo se vende solo 😀 … Además si eres de esas personas que aman el oscuro claro mundo de Apple, también puedes descargarte una versión para MAC.

 

 

Saludos @ Lisboa

El Bruno

PD:  no hay muchos modelos publicados en la web, la busqueda http://www.google.com/search?hl=en&q=lego+filetype%3Alxf solo retorna 3 resultados.

Crossposting from ElBruno.com

Buscas un nuevo trabajo ? (o buscas algo mas ?)

Buenas

durante este período de vacaciones mucha gente se plantea dar un cambio en su vida. Este cambio puede ser algo tan simple como cambiar de trabajo, o algo más profundo como tirarse 4 semanas seguidas en un barcito en la playa olvidándose de todo lo que pasa a su alrededor y reflexionar sobre los conocimientos que te ha  dejado la película de Los Simpsons. En ambos casos, creo que hay que pensar un poco más al respecto.

Por ejemplo, cuando paso por la oficina de Avanade, usualmente me toca hacer alguna que otra entrevistas técnica. Cuando la primera pregunta que escucho es ¿ cuanto paga Avanade €€€ ?, se que la cosa va mal. Me explico un poco, no está mal preocuparse por el dinero, ni mucho menos esto lo dice un hipotecado, futuro padre, propietario de un Lego Mindstorms, flamante conductor, etc pero sin embargo creo que la búsqueda de trabajo tiene que apuntar a objetivos más altos.

Siempre he pensado que cuando durante un mes entero, no tenga ganas de ir a trabajar, me despierte de mala gana y con mal humor por el trabajo; simplemente renuncio y me pongo a buscar otro trabajo. En mi caso, el trabajo tiene que ser algo que te divierta, que diariamente te ofrezca nuevos desafios, que no se convierta en una tarea rutinaria que de a poco te consuma el cerebro, y por suerte; la consultoría me ofrece estos desafíos. Avanade como otras consultoras tiene sus ventajas y sus contras, la gente va y viene; pero me mantiene muy ocupado, demasiado entretenido y al día.

Es por eso que si estás pensando en cambiar de trabajo, puedes hacerte la siguiente pregunta ¿es posible lograr mis objetivos en mi trabajo actual? y también ¿ estoy buscando más dinero o algún tipo de desafío para mi carrera profesional ? estos puntos son fundamentales para acertar con un nuevo trabajo (lo dice alguien que sólo ha trabajado profesionalmente en 2 empresas diferentes en toda su vida).

Y, para todos aquellos que se van: mucha suerte y para que los que llegan: bienvenidos !!!

 

Saludos @ Lisboa

El Bruno

PD: obviamente si alquien está interesado en mi actual empresa, no dude en contactar conmigo, yo le comentaré (informalmente) un poco como son las cosas por aquí no en Lisboa desde un punto de vista 100% developer/tester/pm/etc … 😀

Crossposting from ElBruno.com

[DSL] How to: crear Shapes con textos multilinea (no viene de fabrica …)

Buenas

siguiendo con las experiencias con DSL, y tratando de ser más amigable con mi usuario final, hoy mostraré algo que se les pasó a los chicos de Redmond es muy importante y visualmente impactante: las cajas de texto multidioma. Pues si, parece un chiste, pero lamentablemente los Shapes que traen de fábrica las Domain Specific Language Tools para Visual Studio 2005 no permiten de una forma fácil y rápida la configuración para que los mismos soporten textos multilinea.

 

Introducción

Pero como siempre la solución es muy simple y partiendo del ejemplo que dejé en este post, donde teníamos un modelo con Users y Comments, modificaré a los comentarios para soporten textos multilínea.

Esta es la vista original de nuestro modelo

 

Si editamos uno de los comentarios y agregamos el siguiente texto:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque fringilla augue. Nulla vehicula est vitae augue. Aliquam in ipsum eget tellus iaculis consequat. Sed tristique congue enim. Pellentesque dictum interdum sem. Ut varius neque. Ut rutrum accumsan ligula. Nunc euismod urna vel lorem tempor feugiat. Fusce in nibh. Nam nec augue. Nulla aliquam lectus sit amet neque. Sed vestibulum consequat nunc. Curabitur a magna. Aenean hendrerit. Nulla sed nibh. Curabitur lectus libero, ultrices sed, sodales vitae, imperdiet in, risus. Suspendisse potenti. Integer et sapien. In ultrices mattis massa.

Veremos que nuestro comentario muestra en una sola línea todo el texto que hemos configurado dentro del mismo:

Solución

La solución a este problema consiste en extender la funcionalidad por defecto que trae un Shape en las Domain Specific Language Tools, sobreescribir la funcion InitializeDecorators() modificando uno de los elementos TextField que contiene el mismo y configurandolo para que soporte textos multilínea.

 

1 .  Seleccionar el Shape Comment y modificar la propiedad Generate Double Derived = True.

Nota: esta propiedad permite que podamos sobreescribir la función InitializeDecorators(), entre otras cosas.

 

2. Agregamos una nueva clase a nuestro proyecto llamada Shapes.partial.cs.

 

3. Dentro de esta clase agregamos el siguiente código, donde obtengo el TextField correspondiente al comentario, habilito el modo MultipleLines del mismo y lo posiciono dentro del Shape del comentario (parent) respetando los espacios del título y del ícono.

1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using Microsoft.VisualStudio.Modeling.Diagrams; 5 6 namespace ElBruno.Dsl15 7 { 8 9 public partial class CommentShape 10 { 11 protected override void InitializeDecorators(IList<ShapeField> shapeFields, IList<Decorator> decorators) 12 { 13 base.InitializeDecorators(shapeFields, decorators); 14 TextField commentField = (TextField)ShapeElement.FindShapeField(shapeFields, "Comment"); 15 16 // disable autosize and enable multiline 17 commentField.DefaultAutoSize = false; 18 commentField.DefaultMultipleLine = true; 19 20 // clear existing anchors, set up custom anchoring below. 21 commentField.AnchoringBehavior.Clear(); 22 commentField.AnchoringBehavior.SetTopAnchor(AnchoringBehavior.Edge.Top, 0.4); // bigger on top to display shape title and icon 23 commentField.AnchoringBehavior.SetLeftAnchor(AnchoringBehavior.Edge.Left, 0.1); 24 commentField.AnchoringBehavior.SetRightAnchor(AnchoringBehavior.Edge.Right, 0.1); 25 commentField.AnchoringBehavior.SetBottomAnchor(AnchoringBehavior.Edge.Bottom, 0.1); 26 } 27 } 28 29 } 30

 

4. Compilamos (generando previamente el código desde el Solution Explorer) y en modo debug podremos ver que nuestros comentarios son multilinea y ademas se acomodan al tamaño del Shape del comentario. Es interesante editar el texto dentro del comentario para ver como el espacio de edición se acomoda a los márgenes que hemos definido en el código.

 

 

Y para finalizar un video con el funcionamiento del mismo y obviamente el código de ejemplo descargable desde aquí (gracias Geeks.ms).

 


Video: DSL Tools – MultipleLine Shape

 

 

 

Saludos @ Lisboa again

El Bruno

Crossposting from ElBruno.com

Enterprise Library y Visual Studio 2008: future release …

Buenas

nuestros amigos de Microsoft Patterns and Practices ya están pensando en la nueva versión de Enterprise Library para Microsoft Visual Studio 2008. El objetivo es brindar la misma funcionalidad que actualmente existe en la versión 3.1 montado sobre Microsoft Visual Studio 2008, pero para obtener un poco mas de feedback de la comunidad nos anima a participar en esta encuesta -> http://www.zoomerang.com/survey.zgi?p=WEB226STCU2528

 

Fuente: http://blogs.msdn.com/agile/archive/2007/08/24/planning-the-next-release-of-enterprise-library.aspx

 

Saludos @ Wii World

El Bruno

Crossposting from ElBruno.com

[DSL] Como personalizar el DSL Explorer

 

Buenas

siempre me ha gustado ser muy cuidadoso en los detalles, hay pequeños detalles que marcan la diferencia en un producto. Un buen lugar para personalizar y dar un poco más de vida a un proyecto de Domain Specific Language Tools es en el DSL Explorer. Si partimos del ejemplo del comentario que posteé hace unos días veremos que el mismo representa los elementos y los comentarios de nuestro diagrama en un TreeView como muestra la siguiente figura:

 

A continuación vamos a modificar algunas de las propiedades de nuestro proyecto para modificar la apariencia del DSL Explorer.

  1. Agregar una nueva imagen al directorio “Resources” del proyecto, con un tamaño de 16×16 pixels.
  2. En el panel DSL Explorer, seleccionar el nodo Explorer Behavior y modificar las siguientes propiedades
    1. Name: DslSampleComment
    2. Title: Dsl Sample Comment
  3. Sobre el nodo Explorer Behavior desplegar el menú contextual y seleccionar la opción Add New ExplorerNodeSettings. Esta acción agrega un nuevo nodo que nos permite definir una personalización especial para alguna de las clases de nuestro modelo.
  4. Seleccionar el nuevo nodo ExplorerNodeSettings y modificar las siguientes propiedades
    1. Class: Comment
    2. Icon To Display: ResourcesComment 16×16.png
  5. Generamos el código desde el Solution Explorer y compilamos la solucion.
    Nuestro nuevo DSL Explorer muestra los nodos que representan a los comentarios con la imagen que hemos asignado en la personalización:

 

Si modificamos un poco más el modelo, cambiamos los ExampleElements por Users y personalizamos un poco más el modelo lograremos un modelo como el siguiente:

 

El código fuente del ejemplo se puede descargar desde aquí.

 

Saludos y happy coding

El Bruno

Crossposting from ElBruno.com

[VS2005] Como copiar automaticamente el output de un proyecto despues de compilar (… efecto Memento)

Buenas

ya sé que este es un proceso muy conocido y utilizado desde hace mucho tiempo. Pero como soy cortito esta es una de las cosillas que siempre me olvido como se hacen, asi que este post me servirá de recordatorio. Por ejemplo, quiero que cada vez que se compile un proyecto, se copien los assemblies generados al directorio de ejecución de Visual Studio 2005 (cuidado con esto !!!). Para lograr esto debemos seguir los siguientes pasos:

 

  1. Seleccionar el proyecto con el que y ver las propiedades del mismo.
  2. Dentro de las propiedades seleccionar Build Events.
  3. En la sección Post Build Events command line presionar Edit Post-build.
  4. Presionar Macros para ver el listado de las variables con las que podemos trabajar.
  5. Utilizando el comando copy, ingresar copy “$(TargetDir)” “$(DevEnvDir)” >Null.
    Donde $(TargetDir) representa el directorio de compilación, y $(DevEnvDir) representa el directorio donde se ejecuta Visual Studio.

 

 

De esta forma cada vez que se compile el proyecto se copiará todo el contenido del directorio de compilación al directorio de Visual Studio 2005, usualmente c:Program FilesMicrosoft Visual Studio 8Common7IDE. Si por algún motivo no se pueden copiar los archivos, en el panel de Errores veremos un nuevo item con la descripción del error que ha ocurrido.

Post apuntado para futuras lagunas mentales … !!!

 

Saludos @ Development Enviroment

El Bruno

Crossposting from ElBruno.com

[DSL] Agregar un elemento que represente un Comentario

Buenas

hoy un pequeño post con un ejemplo de una tarea muy trivial cuando trabajamos con Domain Specific Language Tools.

Requerimientos concretos:

– crear nuevas entidades-
– relacionar las mismas con otras entidades
– crear los elementos gráficos para representar las mismas

En este caso he pensado en agregar un nuevo shape que represente un Comentario y que el mismo pueda ser relacionado con entidades ya existentes en el modelo.

 

Tutorial

Estos son los pasos necesarios para realizar esta tarea: 

1. Para comenzar crearemos un nuevo proyecto del tipo Other Project Types // Extensibility // Domain Specific Language Designer, basado en el template Minimal Language. En este caso lo he llamado Dsl15.
Nota: Un ejemplo completo de estos pasos se puede repasar en este post, desde el paso 1 al paso 9.

 

2. El proyecto que crea el asistente, consiste en un modelo con una clase principal ExampleModel que esta relacionada con otra clase ExampleElement. Todos los modelos deben poseer solo una clase root,que engloba a los demás elementos del modelo. Además crea una relación entre ExampleElement con otros ExampleElement.

Para representar nuestro comentario agregamos una nueva Domain Class al modelo. Para esto, desde la Toolbox arrastramos una instancia de Named Domain Class al diagrama.

Nota: La herramientas Domain ClassNamed Domain Class agregan ambas una DomainClass a nuestro modelo; pero la 2da agrega además dentro de la clase una domain property que identifica univocamente a la clase entre las instancias de la misma.

3. Renombramos la clase de DomainClass1 a Comment y la Domain Property Name a Comment Text, esta propiedad será la encargada de almacenar el string que representará a nuestro comentario.

 

4. Utilizando la herramienta Embedding Relationship conectamos la clase ExampleModel a nuestra clase Comment. Este tipo de relación indica que la clase hija (Comment) estará contenida dentro de la definición de la clase padre (ExampleModel). Nuestro diagrama debe quedar como la siguiente imagen.

Nota: si queremos visualizar todo el diagrama completo como si fuese un árbol, y no ver la clase Comment duplicada, seleccionamos la que está relacionada, desplegamos el menú contextual y seleccionamos la opción Bring Tree Here.

 

5. Uno de los objetivos del ejemplo es poder relacionar los comentarios con las clases ExampleElement. Para esto seleccionamos la herramienta Reference Relationship y conectamos la clase ExampleElement con la clase Comment. Nuestro diagrama debe quedar como la siguiente imagen:

 

6. Una vez creados los componentes de nuestro modelo debemos crear los elementos que representarán gráficamente a los mismos y a sus relaciones. Dentro de la plantilla Minimal Language, tenemos las siguientes opciones Geometry Shape, Compartment Shape e Image Shape. Para nuestro comentario utilizaremos un Geometry Shape, que permite representar una figura geometrica con contenido de texto dentro del mismo. Utilizando la herramienta GeometryShape agregamos una nueva Shape al diagrama, este tipo de componentes se agregan en la sección Diagram Elements del Diagrama.

 

7. Renombramos el Shape de GeometryShape1 a CommentShape y modificamos algunas propiedades para personalizar el Look and Feel del Comentario.

Fill Color: 255, 255, 192

Fill Gradient Mode: Vertical

Geometry: Rounded Rectangle

Outline Color: 255, 255, 128

Outline Thickness: 0.01

 

8. A continuación personalizaremos el contenido del Shape para que dentro del mismo posea un título y un contenido que represente el comentario. Para esto seleccionamos el Shape y desplegando el menú contextual seleccionamos la opción Add // Text Decorator, renombramos la propiedad por Title y modificamos las siguientes propiedades:

Default Text: Comment

Font Style: Bold

Name: Title

Position: InnerTopCenter

 

9. Agregamos un nuevo Text Decorator y modificamos las siguientes propiedades:

Default Text:

Font Size: 7

Name: Comment

Position: Center

Nuestro CommentShape debe quedar como en la siguiente imagen.

 

9. Es necesario relacionar la clase Comment con el shape CommentShape para que la clase se represente con la figura que hemos creado. Dentro del panel DSL Explorer, seleccionamos el nodo Diagram, desplegamos el menu contextual y seleccionamos la opcion Add New Shape Map. Dentro del formulario de configuración, seleccionamos la clase Comment y el Shape CommentShape para el mapeo entre ambos.

 

 

10. Este mapeo crea una nueva conexión entre el shape y la clase. Aunque todavía es necesario relacionar la propiedad CommentText de la clase Comment con el Text Decorator Comment del shape CommentShape, para que nuestros cambios en el modo gráfico del comentario se reflejen dentro del modelo que hemos diseñado.

Seleccionamos el mapeo entre ambos elementos y seleccionamos el panel DSL Details. Sobre la pestaña Decorator Maps, marcamos el check sobre el decorator Comment y en el Combo Display Property seleccionamos la propiedad Name.

 

11. Otro componente gráfico que debemos agregar es la linea que una a los comentarios con los elementos del diagrama. Para esto desde la Toolbox agregamos un nuevo elemento del tipo Connector. Renombramos al mismo de Connector1 a ElementCommentConnector y modificamos las siguientes propiedades.

Color: 192, 192, 0

Name: ElementCommentConnector

Thickness: 0.01

 

12. A continuación mapeamos este conector a la relacion ExampleElementReferencescomments que conecta los elementos con los comentarios. Dentro del panel DSL Explorer, seleccionamos el nodo Diagram, desplegamos el menu contextual y seleccionamos la opcion Add New ConnectorMap. Dentro del formulario de configuración, seleccionamos la relación ExampleElementReferencescomments y el Conector ConnectorElementToComment para el mapeo. Debemos ver una nueva línea en nuestro modelo que representa la relación entre ambos.

 

13. Finalmente necesitamos crear las herramientas en la Toolbox que permitirán crear nuevos comentarios y asociarlos a elementos.
Dentro del panel DSL Explorer, seleccionamos el nodo Editor // Toolbox Tabs // Dsl15, desplegamos el menu contextual y seleccionamos la opción Add New Connection Tool. Dentro del nodo Tools por debajo de Dsl15 veremos que se ha creado una nueva herramienta llamada ConnectionTool1 que permite crear relaciones entre elementos. Seleccionando la misma modificamos las siguientes propiedades:

Caption: Reference Comment

Connection Builder: ExampleElementReferencescommentsBuilder

Name: ReferenceComment

ToolBox Icon: ResourcesExampleConnectorToolBitmap.bmp

 

14. Desplegamos nuevamente el menu contextual sobre Dsl15 y seleccionamos la opción Add New Element Tool y veremos que se ha creado una nueva herramienta llamada ElementTool1. Esta herramienta permite crear instancias de las clases de nuestro modelo. Seleccionando la herramienta modificamos las siguientes propiedades:

Caption: Comment

Class: Comment

Name: Comment

Toolbox Icon: ResourcesExampleShapeToolBitmap.bmp

 

15. El modelo y los componetes que lo componen está finalizado. Para probar el modelo primero debemos generar el código que compone el mismo, para esto desde el panel Solution Explorer presionamos el botón Transform All Templates. Una vez que se ha finalizado la generación de código podemos compilar y presionando F5 probar nuestro modelo.
Este es un ejemplo de Visual Studio en Modo Debugging con el modelo y los comentarios que hemos creado.

 

Conclusión

Pues bien que les sea útil y espero que sirva de referencia para aquellos que quieran comenzar a probar con las Domain Specific Language Tools. La creación de los modelos no es una tarea muy complicada pero si es necesario tener un en claro el dominio sobre el que trabajaremos, antes de comenzar. En futuros post, modificaré el shape de Comment para que sea multilínea, personalizaré los nosos del DSL Explorer y otras customizaciones más.

A continuación pequeño video que demuestra las capacidaes del mismo y el código de ejemplo se puede descargar desde aquí (gracias Geeks.ms).

 


Video: DSL – Comment Sample

 

Saludos @ Home

El Bruno

Crossposting from ElBruno.com