Trabajar con mains

Es una ventana de utilidad para trabajar con objetos main. Tiene una serie de herramientas generales para cualquier generador, otras específicas para C#, otras específicas de C# / Win, y otras para Android.

Herramientas generales

La ventana de Trabajar con mains se encuentra en el menú Lsi.Extensions > Toolwindows > Work with mains. El atajo de teclado para abrirla es Ctrl+M. La ventana, en un entorno C# / Win, tiene el siguiente aspecto:

Trabajar con mains

En esta ventana se muestra una pestaña por cada generador disponible en la kbase actual. Para cada generador, se muestra la lista de los objetos main que usan dicho generador. En la parte inferior se muestran pestañas para los logs de los procesos que se hayan ejecutado en esta ventana.

Las operaciones disponibles para cualquier generador son las siguientes:

Botón "Refresh" Refresca la lista de generadores y mains. Usar este botón si se añade o quita un main / generador.
Ejecutar el objeto main
Ejecutar / menú Run > Run / Enter
Lanza la ejecución del objeto main seleccionado en la lista tal cual está compilado actualmente, sin especificarlo / generarlo. Esta operacion también se puede lanzar haciendo doble click en la lista.
Build all con el generador actual
Build all con el generador actual / menú Build > Build all with this generator / Alt+A
Ejecuta un build para generar los objetos main del generador de la pestaña actualmente seleccionada. En concreto hace lo siguiente:
  • Abre una ventana en la que se pregunta si hay que especificar los objetos pendientes. Por defecto no se especifican.
  • Genera los objetos especificados, solo con el generador actual
  • Compila los objetos main que usen el generador actual y que llaman a alguno de los objetos especificados durante el proceso.
En caso que hubiera objetos que ya estuvieran especificados previamente, pero no generados, por ejemplo porque se cortó un Build All, este proceso no los especificará pero si los generará. Esto puede hacer que queden mains pendientes de compilar. En este caso, hay que compilarlos manualmente con la operación "Compilar" que se describe a continuación.
Mientras se está ejecutando esta operación no se pueden lanzar ningún build (Build all, Rebuild all, etc) en la kbase.
Compilar
Compilar / menú Build > Genexus compilation / Alt+G
Compila los main seleccionados con los fuentes generados actualmente. No se especifica / genera nada.
Generar los objetos query
Build > Build query objects
Genera todos los objetos Query del entorno actual, sin especificar / generar nada.

Herramientas especificas para C#

Las siguientes operaciones están disponibles sólo para generadores C# win y web:

Depurar main en ejecución
Depurar / menú Run > Debug running instance / Alt+D
Esta operación se puede aplicar sobre un main que esté actualmente en ejecución. Al usarla se abre el Visual Studio y se asocia el proceso del main actualmente seleccionado en la lista para depurarlo.
Para poder usar esta opción el main debe estar compilado con opciones de depuración. Para ello hay que añadir la opción "/debug" en la propiedad "Compiler flags" del generador.
En caso de depurar una aplicación web, se intentará asociar cualquier proceso con nombre "w3p.exe" en ejecución. Si es una aplicación win, se intentará asociar cualquier proceso con nombre [nombredelmain].exe. En caso que exista más de uno, se pedirá qué proceso asociar.
La versión de Visual Studio a usar para depurar se indica en la ventana de configuración.
Editar RSP del main
Editar RSP / menú Tools > Edit RSP / Alt+S
Esta operación en el generador c# win sólo está disponible si la propiedad "Assemblies structure" del generador vale "By main".
Abre el editor de texto asociado para ver el contenido del archivo RSP del main. El archivo RSP contiene las opciones de compilacion del main, y la lista de fuentes generados que se compilan para generar ejecutable del main.
Abrir archivo fuente de un objeto
Abrir archivo fuente / menú Tools > Open object source file... / Alt+F
Abre el archivo fuente c# de un objeto en el Visual Studio. Al usar esta opción se pide de qué objeto abrir el archivo fuente, y despues se abre. También abre el objeto en Genexus.
La versión de Visual Studio a usar para abrir el archivo se indica en la ventana de configuración.
Botón "Production..." Abre una ventana con la gestión para preparar la versión de producción para instalar en el cliente. Esta gestión se describe a continuación.

Preparar producción en un entorno C#

Esta gestión ofrece algunas herramientas para preparar una versión de producción a instalar en el cliente de una aplicación generada en C#. Permite definir y ejecutar automáticamente tareas que hay que hacer cada vez que se prepara la producción.

La definición de las tareas a ejecutar se guarda en la kbase, en el archivo [DirectorioKbase]\LsiExtensions\production.xml. El archivo se guarda automáticamente al cerrar la ventana de edición de las tareas de la producción. Se puede copiar de una kbase a otra manualmente.

Las tareas soportadas son las siguientes:

A la ventana de la gestión de producción se accede pulsando el botón "Production...". Tiene el siguiente aspecto:

Ventana de produccion

File patterns to ignore Indica los patrones de nombres de los archivos que estan en la carpeta de la aplicación que no hay que copiar / comprimir. Si hay más de un patrón, se separan con el caracter puntos y coma.
Copy file images.txt to bin folder Sólo se aplica a entornos Win. Indica si hay que copiar el archivo Images.txt de la carpeta de generación a la carpeta bin.
New... / Edit... / Remove Agrega, modifica o borra tareas para prepara la producción. Hacer doble click sobre una tarea es equivalente a pulsar el botón "Edit..."
Move up / Move down Cambia el orden en que se ejecutan las tareas de la producción: Mueve arriba o abajo la tarea seleccionada.
Close Cierra la ventana de la producción y guarda los cambios hechos en las tareas a ejecutar.
Run selected tasks Ejecuta las tareas de la producción actualmente seleccionadas en la lista. Antes da un aviso de los archivos y carpetas que se van a reemplazar durante el proceso.
Prepare production (run all tasks) Ejecuta las tareas de la producción de la kbase. Antes da un aviso de los archivos y carpetas que se van a reemplazar durante el proceso.

La ventana de edición de una tarea para prepara la producción es la siguiente:

Tarea de produccion

Task type El tipo de tarea a ejecutar:
  • Compress: Comprime la carpeta web o la carpeta bin, dependiendo de si el generador es win o web, con el programa compresor indicado en la configuración.
    La compresión se hace con un programa externo. La configuración de qué programa usar se indica en la ventana de configuración.
  • Copy: Copia la carpeta web/bin a un cierto destino. En este caso, en el campo "Dest. directory (web folder)" / "Dest. directory (bin folder)" se indica a qué carpeta se copiará la aplicación.
  • Powershell script: Ejecuta un script powershell. Esto puede ser util para ejecutar tareas mas complejas (actualizar una base de datos, subir el archivo a un FTP, etc.). Al script se le pasan dos variables predefinidas: $LASTCOPYDESTINATION, con el path de destino de la última tarea de tipo "Copy" ejecutada, y $MODELPATH, con el path del modelo del que se está preparando la producción.
Environment type Sólo se aplica a tareas de tipo Copy / Compress. Indica si tarea se aplica a los programas creados por los generadores web o los generadores win.
Zip path Sólo se aplica si la tarea es de tipo Compress. Indica el path del archivo comprimido donde se va a guardar la aplicación. En caso que la aplicación sea Win se comprime la carpeta bin de la aplicación. Si es Web, se comprime la carpeta web.
Dest. directory Sólo se aplica si la tarea es de tipo Copy. Indica el path de la carpeta a la que se va a copiar la aplicación. Si es una aplicación Win se copia la carpeta bin. Si es web, se copia la carpeta web. La carpeta de destino se reemplaza con la actual de la aplicación.
Script path Sólo se aplica si la tarea es de tipo Powershell script. Indica el path del script a ejecutar.
Keep current client.exe.config / web.config file Sólo se aplica si la tarea es de tipo Copy. Si este campo está marcado y la caperta de destino ya existe, al copiar la nueva producción no se sobreescribirá el archivo de configuración de la aplicación (client.exe.config / web.config) que existe actualmente.
Stop IIS before copy and start after copy Sólo se aplica si la tarea es de tipo Copy y el entorno es de tipo Web. Si esta opción está marcada, antes de iniciar la copia de la aplicación se intentará parar el servicio del IIS en la maquina destino de la copia, y se iniciará al finalizarla.
IIS suele mantener bloqueos sobre los directorios de las aplicaciones web, impidiendo que se borren si la aplicación se está ejecutando. El objetivo de esta marca es evitar que falle la copia por este motivo.
El equipo en el que hay que parar el IIS se decide según la caperta de destino de la copia. Si es un path UNC (\\equipo\carpetacompartida\directorio) se asume que el equipo es el de la ruta. En cualquier otro caso, se asume que hay que parar el IIS en el equipo local.
El usuario que ejecuta el proceso de producción debería pertenecer al grupo de administradores del equipo en el que se va a reiniciar el IIS. Si no, es muy probable que el reinicio falle (no ha sido probado).
Keep a backup of the current destination directory Sólo se aplica si la tarea es de tipo Copy. En caso que la carpeta de destino exista actualmente, esta se renombrará con un sufijo "-old". Esto es útil para evitar por error perder archivos que se hubieran creado manualmente dentro de la carpeta destino. En caso que al ejecutar el proceso ya existiera una carpeta con sufijo "-old", esta se borrará al preparar la producción.
Enabled Indica si la tarea está habilitada. Si no está habilitada, no se ejecutará al preparar la producción.

Herramientas especificas para C# / win

Las siguientes operaciones están disponibles sólo para el generador C# win:

Iniciar un main con depuración
Iniciar con depuración / menú Run > Start debugging
Abre el Visual Studio y asocia el ejecutable del main seleccionado en la lista para poder depurarlo, sin iniciar su ejecución.
Esto es útil cuando se quiere depurar el inicio de ejecución del main. Para arrancar la ejecución del main, hay que pulsar el botón de iniciar con depuración en el Visual Studio.
Para poder usar esta opción el main debe estar compilado con opciones de depuración. Para ello hay que añadir la opción "/debug" en la propiedad "Compiler flags" del generador.
La versión de Visual Studio a usar para depurar se indica en la ventana de configuración.
Compilación personalizada
Compilación personalizada / menú Build > Custom compile / Alt+C
Esta operación sólo está disponible si la propiedad "Assemblies structure" del generador vale "By main".
Esta operación compila los objetos main seleccionados, sin especificar / generar nada. Se diferencia de la compilación que hace Genexus en lo siguiente:
  • Compila siempre el main, esté pendiente o no de compilar.
  • No compila nada mas que los mains seleccionados: Genexus puede compilar otros mains que esten pendientes.
  • Hace una revisión de los archivos RSP de los main a compilar, por si falta incluir algun archivo fuente.
Las revisión de los archivos RSP que tiene que hacer la compilación se indica en el campo "RSP repair with custom compilation" que aparece en la parte inferior de la ventana:
  • Repair all: Añade en los archivos RSP los fuentes que faltan
  • Repair BC only: Revisa que en los RSP no falten archivos asociados a Bussines components. No revisa otros archivos
  • Do not repair: No revisa los archivos RSP
Reparar archivos RSP
Reparar RSPs / menú Tools > Repair all RSPs... / Alt+E
Esta operación sólo está disponible si la propiedad "Assemblies structure" del generador vale "By main".
Permite revisar los archivos RSP buscando si falta incluir archivos fuente en ellos. Al usar esta opción aparece una ventana preguntado si solo hay que revisar. En este caso, se revisan los archivos RSP y se indica que archivos falta, sin modificar nada.
Si se indica que no sólo hay que revisar, el proceso modificará los archivos RSP para añadir los fuentes que faltan.
Borrar archivos de backup
menú Tools > Remove backup files...
La reparación de RSPs y la compilacion pueden generar archivos de backup en la carpeta del modelo. Esta opción permite borrarlos. Al usar esta opción se abrirá una ventana indicando los archivos de backup encontrados. Si se confirma dicha ventanta, los archivos se borrarán.
Quitar un archivo fuente de todos los RSPs
menú Tools > Remove entry from all RSPs...
Permite quitar un archivo fuente de todos los RSPs. Al usar esta opción se abrirá la seleccion de archivos, para indicar qué archivo quitar, y al confirmar se quitará la entrada correspondiente a dicho archivo de todos los RSPs del modelo actual.
Botón "Zip modules" Esta operación sólo está disponible si la propiedad "Assemblies structure" del generador vale "By main".
Esta operación está hecha con el objetivo de poner una actualización parcial de la aplicación en un cliente. Por ejemplo, si se ha detectado un error en un cierto módulo, y se desea poner una actualización de éste, sin llevar toda la aplicación entera.
Esta operación comprime las dlls de los mains seleccionados en un archivo, añadiendo también el archivo Genexus.Programs.Commons.dll (incluye las definiciones de SDTs, dominios, etc). El archivo comprimido se genera en la carpeta indicada en la ventana de configuración.
Al usar esta operación se lanza el proceso de compresión y se abre el Explorador de Windows con la carpeta en la que se ha generado el archivo comprimido.

Notas sobre la reparación de RSPs

Las operaciones de compilación personalizada y reparación de RSPs mantienen una caché de los nombres de los archivos fuentes generados por cada objeto, necesaria para que estos procesos sean más rápidos. Esta caché se guarda en la kbase, en el archivo [DirectorioKbase]\LsiExtensions\SourceFilesCache.xml. La primera vez que se haga la reparación de RPSs esta cache se genera por completo y puede tardar bastante tiempo, dependiendo del tamaño de la kbase. Las siguientes veces tardará mucho menos.

En caso de instalar una nueva versión de las extensiones, o si la cache quedase corrupta, puede ser necesario regenerar esta cache. Se puede borrar usando el botón "Clean kbase objects cached information..." en la ventana de configuración.

Limitaciones

Herramientas específicas para Android

Las siguientes operaciones están disponibles sólo para el generador de Smart devices / Android, y se encuentran todas en el menú "Android" de la pestaña del generador de Smart devices:

Abrir archivo fuente de un External Object
Abrir archivo fuente / menú Tools > Open object source file... / Alt+F
Abre el archivo fuente de un External Object. Al usar esta opción se pide de qué objeto abrir el archivo fuente, y despues se abre con el editor de texto indicado en la configuración.
SDK Manger
Menú Android > SDK Manager
Lanza el ejecutable del Android SDK Manager ("SDK Manager.exe" del directorio del Android SDK)
AVD Manager
Menú Android > AVD Manager
Lanza el ejecutable del gestor de dispositivos del emulador de Android ("AVD Manager.exe" del directorio del Android SDK)
Android device monitor
Menú Android > Android device monitor
Lanza el ejecutable del monitor de dispositivos ("tools\monitor.bat" del directorio del Android SDK)
Abrir directorio de los APIs de Genexus de la kbase
Menú Android > Open GX APIs sources directory
Abre en el Explorador de Windows la carpeta que contiene los fuentes de los APIs de Genexus para Android. Esta carpeta es [DIRECTORIO-DEL-MODELO]\mobile\Android\FlexibleClient\src\com\artech\android\api.
Editar el archivo UserExternalApiFactory.java
Menú Android > UserExternalApiFactory.java
Abre el archivo [DIRECTORIO-DEL-MODELO]\mobile\Android\FlexibleClient\src\com\artech\externalapi\UserExternalApiFactory.java con editor de texto indicado en la configuración.