Story Transcript
Guía Conversión de Instancias 9.0 a XEv1
1
Índice Cambios importantes .................................................................................................................................... 4 Transacción como web component: ......................................................................................................... 4 Una instancia por transacción: ................................................................................................................. 7 Determinación de parámetros a la hora de invocar la transacción:......................................................... 7 Cambios en la estructura de la instancia: ................................................................................................. 7 Cambios en el tema: ................................................................................................................................. 8 Pasos para convertir instancias..................................................................................................................... 9 Previo a la conversión de instancias ......................................................................................................... 9 Modificar tema k2b en KB de 9.0.......................................................................................................... 9 Convertir KB a GeneXus X Evolution 1 ................................................................................................. 9 Verificar correcto funcionamiento de la KB sin patterns. ..................................................................... 9 Seteos en el directorio templates ......................................................................................................... 9 Agrupar instancias que van sobre la misma transacción en una sola .................................................. 9 Conversión de instancias ........................................................................................................................ 10 Configuración de tema............................................................................................................................ 11 Especificar, generar y compilar ............................................................................................................... 12 Error por referencia a controles en nodo events................................................................................ 12 Error por referencia a controles en código de la transacción............................................................. 13 Error por diferente Data Area en web form de la transacción ........................................................... 13 Manera distinta de invocar a la trn..................................................................................................... 13 Error por crear web component de transacciones con update transaction = false ........................... 14 2
Error por regla parm de la transacción incorrecta:............................................................................. 14 Reportes PDF........................................................................................................................................... 14 OAV y código de extensión de tabs del View (Entity Manager en la XEv1) ............................................ 15 Anexo I: Propiedades no convertidas ..................................................................................................... 18 Cancel Event ........................................................................................................................................ 18 Link To ................................................................................................................................................. 18 Link BackToSelection .......................................................................................................................... 18
3
Cambios importantes Con el objetivo de seguir avanzando, mejorando la calidad de las aplicaciones que se desarrollan con GeneXus, y aumentando la productividad del desarrollador, a partir de la versión de las k2btools en la X se realizaron cambios importantes, con respecto a lo que se estaba generando en su versión 9.0. Estos cambios pueden tener impacto y deben ser tenidos en cuenta a la hora de realizar la conversión de instancias. En esta sección enumeraremos los cambios que consideramos más importantes a la hora de trabajar.
Transacción como web component: El objeto transacción pasa a ser generado como web component. El web form es reducido de forma tal de solo contener el área de datos más los botones. Deja de poseer un título. Acá mostramos la figura de una transacción en la versión 9.0
4
Y a continuación la vemos en la X.
5
En el contexto de patterns, para invocar a la transacción, no se invoca ella sola sino que se invoca al entity manager (view en la versión 9.0) que es el objeto que la contiene. La realización de este cambio se debió a: •
•
Poder reutilizar el web form de la transacción en cualquier objeto. o Evita definir una nueva transacción si la transacción está en otro contexto, evitando volver a definir reglas, eventos , etc. o Hace que la aplicación sea más escalable, y que las reglas de negocio estén en un objeto único. Reutilización del tab general en el entity manager o No es necesario definir un tab general, para tener una vista display de la transacción sino que se reutiliza el mismo nodo. o Usuario tiene que escribir menos código. Lo que quiere ver es lo que está definido en la transacción.
Esto trae algunas consideraciones cuando se realiza la conversión:
6
• •
Invocación a la transacción por fuera de objetos generados por el patrón. En este caso en lugar de invocar a la transacción se deberá invocar al entity manager. Código en la transacción en slots de usuario que referencian la modificación del título (control k2bpgmdesc que ya no existe). Habría que eliminar ese código o ver de pasarlo al entity manager.
Una instancia por transacción: La arquitectura de GeneXus X, solamente permite tener una instancia del pattern aplicado por transacción. Para eso, antes de realizar el proceso de conversión, se deben unificar las instancias que aplican a más de una transacción en una sola.
Determinación de parámetros a la hora de invocar la transacción: En la versión 9.0, se determinaba la forma de invocar a la transacción a partir del nodo parameters, del nodo transaction. Esto traía por demás confusión y no existía el dinamismo de que modificando la regla parm de la transacción, se modificaba automáticamente la instancia, sino que había que hacerlo en los dos lados. A partir de GeneXus X, las k2btools leen la regla parm de la transacción y de esta forma infieren como se invoca la transacción. Para que el pattern pueda inferir esto de forma correcta se deben dar las siguientes condiciones: •
Las variables de la regla parm deben estar basadas en un atributo (menos la variable mode) y deben tener el mismo nombre del atributo.
Cambios en la estructura de la instancia:
7
En la versión 9.0, la estructura de la instancia fue modificada completamente. Entre los ejemplos más claros se encuentran la desaparición del nodo level (el pattern se basa en transacciones y el modo display muestra todos los niveles) y el nodo view se transformó en entity manager. Estos cambios de nombres son resueltos completamente con el conversor de instancias. El único cambio que se hace es que dado que el pattern en el modo display muestra los dos niveles, desaparece dentro del view el tab correspondiente al segundo nivel de la transacción. Si se quiere tener este tab, habría que agregarlo a mano.
Cambios en el tema: Para tener una interfaz más clara, se modificó la interfaz y se incorporaron dos nuevos temas (k2b2 y k2b3). Se modificaron los nombres de las clases. Esto produce tener una interfaz mucho más prolija, con menos tablas, y nombres claros. Esto tiene un impacto en: • •
Objetos que fueron realizados a mano (por fuera de patterns) Transacciones.
En pasos para la conversión explicaremos como lidear con estos problemas.
8
Pasos para convertir instancias Previo a la conversión de instancias Modificar tema k2b en KB de 9.0
Hacer un rename del tema de la 9.0 para que no sea el mismo que el que luego va a consolidar el patrón. En caso de no hacerlo en esta fase, igual se puede hacer más adelante. Convertir KB a GeneXus X Evolution 1
Realizar la conversión, una vez realizada, verificar el log de conversión sobre la presencia de errores. En caso de dudas, o problemas consultar al equipo de soporte de GeneXus. Verificar correcto funcionamiento de la KB sin patterns. Un paso muy importante es especificar, generar y compilar toda la aplicación. Verificar que todo especifique y genere, y que en ejecución la aplicación funcione de la misma manera que lo hacía en la 9.0. Este paso es fundamental pues permite separar los errores que son debidos a la versión de GeneXus (a soporte de GeneXus se le entrega una KB limpia sin patterns) de los que pueden provenir por la conversión de instancias dentro del patrón. Sin realizar esto, no se puede proseguir en la conversión de instancias. Seteos en el directorio templates
En el directorio templates, directorio donde se encuentran las instancias a convertir se deberá copiar el k2bentityservices.confing utilizado en esa KB. En caso de no estarlo el programa de conversión desplegará un error. El directorio de imágenes utilizado también deberá estar dentro del directorio templates para que el pattern pueda convertir las imágenes correspondientes a las acciones de usuario en objeto imagen.
Agrupar instancias que van sobre la misma transacción en una sola
En este punto se deberán encontrar cuales son las instancias que tienen el mismo nodo transaction raíz. Se tomará una instancia como principal, y de las otras se copiará todos los nodos levels, y se pasarán a la 9
instancia principal. Luego se borrarán las instancias copiadas. Si se desea mantener un modelo con la 9 y otro con la X, es posible aplicar en la 9.0 instancias con varios levels y su comportamiento es el mismo que el de tener varios levels separados en diferentes instancias.
Conversión de instancias Para convertir una instancia se debe hacer lo siguiente: Dentro del menú tools, se encuentra la opción Import Pattern Instances.
Esto despliega la siguiente pantalla que se muestra a continuación.
10
En Add… se deben agregar las instancias que se van a importar, para esto se va al directorio donde se encuentran las instancias y se agregan. Esta es la forma en la que se migran instancias de la 9.0 a instancias de la X. El programa conversor resuelve la mayoría de los problemas, sin embargo en la conversión pueden surgir algunos problemas, que en la parte de especificar, generar y compilar estableceremos como solucionarlas.
Configuración de tema En la base de conocimiento convivirán dos temas. El tema que ya existía en la kb vieja (k2bviejo, será el tema por defecto de la KB) y el tema asociado a los objetos nuevos que trae el patrón k2b. Para esto consolidar nuevamente el tema viejo, modificarle el nombre y cambiarle el tema k2bviejo. Dejar ese tema como tema por defecto del modelo, para que todos los objetos lo tomen. Consolidar luego de los objetos básicos del pattern k2bentityservices el tema k2b. Para esto en el settings del patrón k2bentityserivces colocar en el nodo theme: Theme: K2B SetObjectTheme = True.
En el nodo Layout seleccionar los layouts sin número (no el dos ni el tres).
De esta forma se obtendrá con los dos temas una aplicación con interfaz uniforme. Después si se desea usar el tema 2 o 3 de las k2btools tener en cuenta que hay que modificar todos los objetos que fueron
11
realizados a mano en la 9.0 para poder tener la interfaz uniforme dado que en esas dos nuevas interfaces se modifica el posicionamiento de los objetos en pantalla.
Especificar, generar y compilar Tanto en el proceso de conversión, especificación o generación, pueden surgir los siguientes problemas que hay que corregirlos en las diferentes transacciones. En futuras versiones se intentará mejorar el programa de conversor de forma que sea más inteligente y convierta automáticamente algunas de las conversiones que hoy el usuario en caso de error debe realizar a mano. Error por referencia a controles en nodo events
Errores por referencia a controles que cambiaron de nombre. Verificar los warnings de los objetos por ejemplo: 'K2BPgmDesc.Visible' is a non-standard expression. 'K2BPgmDesc' is assumed to be a control name as support for non-standard expressions is enabled. (Events, Line: 4, Char: 2) 'K2BPgmDesc' invalid control. (Events, Line: 4, Char: 2) 'Visible' is a non-standard expression and support for nonstandard expressions is enabled. (Events, Line: 4, Char: 13)
Esto quiere decir que se está referenciando una variable en los eventos que no existe más. En este caso k2bpgmdesc fue sustituída por PgmDescriptorTextBlock. Las descripciones de los filtros se siguen nombrando de la misma manera. Otros cambios de nombres de controles correspondientes a text blocks: •
FixedDataPaisId en la 9.0 por TextBlockPaisId (fixed data del trabajar con)
•
TextBlock1 en la 9.0 por TextBlockPaisId (fixed data views)
•
RptControlExcel se convierte en Export
12
•
K2BRefresh se convierte en Refresh
•
RptControl no tiene correspondiente en la conversión.
•
NewControl se convierte en Insert
•
BottomCompoment por WebComponentBottom1.
•
TopComponent por WebComponentTop
Error por referencia a controles en código de la transacción
Referencia a datos de pantalla que ahora no se encuentran. Referencia a k2bpgmdesc (descripción de la transacción). Botones: •
Btn_enterButton en la 9.0 por Enter en la X
•
Btn_checkButton por defecto no se genera en la X.
•
Btn_cancelButton en la 9.0 por Cancel en la X
Alguno de los errores que da, en estos casos cuando se salve o especifique la transacción dará el siguiente error.
\error: Invalid attribute 'K2BPgmDesc' (Events, Line: 40, Char: 1) error: 'Caption' invalid property. (Events, Line: 40, Char: 12)
Error por diferente Data Area en web form de la transacción
Cuando aparece en los eventos de la trn el error: Att does not have visible property, puede deberse a que determinados atributos que estaban en el borde de la dataarea en la versión 9.0, dejan de aparecer en su conversión a la X. Para esto agregue estos atributos dentro del data area del pattern. Manera distinta de invocar a la trn spc0008 Call to program TPais that cannot be generated. (Events, Line: 39)
13
Ahora la transacción es invocada como web component y posee URLAccess en false. Por esto todas las llamadas de objetos externos (por fuera de patterns) a la transacción comenzarán a dar error. Para esto en lugar de invocar a la transacción, invocar al entity manager que la contiene.
Error por crear web component de transacciones con update transaction = false
Las transacciones con update transaction en false provenientes de la 9.0 al no actualizarse, no se convierte su propiedad para que sean web compoents. Puede suceder que esa transacción sea creada dentro del entity manager y al no estar como web component, desplegaría mensajes de error. Object "TPAIS" referenced in a create function must be a component. (Source, Line: 5)
En caso de este error, ver de reaplicar el patrón k2bentityservices al objeto.
Error por regla parm de la transacción incorrecta:
Variable Areanegociocodigo1 not defined; N(10.2) assumed. Si comienzan a surgir estos errores en los objetos generados por el patrón, se debe ir a la transacción que desea invocar y verificar la regla parm. El pattern lo que hace automáticamente es invocar a la transacción con los nombres de las variables que aparecen en la parm. Estos nombres deberán ser iguales que el de los atributos. En caso de no serlo corregirlo. En este caso por ejemplo la parm contenía parm (In:&Mode, In:&AreaNegociosCodigo1), se cambio para que sea parm(In:&Mode, In:&AreaNegociosCodigo). En caso de no querer modificar la regla parm, se puede asignarle valor y definición a la variable en las instancias de patterns que la invoquen. Para esto coloque un nodo variable definiendo la variable y agregue un nodo events con el evento correspondiente para asignarle un valor.
Reportes PDF Hasta la versión 4.0 todavía no se cuentan con los reportes PDF. Se migra la propiedad pero momentáneamente los reportes pdf no serán generados. Cuando se libere la versión con los reportes el usuario no deberá configurar nada y automáticamente volverá a tener la generación de los repotes pdfs.
14
OAV y código de extensión de tabs del View (Entity Manager en la XEv1) En la versión de la X, el código correspondiente a la carga de los tabs del entity manager (view) es diferente con respecto al que se tenía en la 9.0. De esta forma, cualquier código que se haya adicionado con el objetivo de extender los tabs en tiempo de ejecución, no será compatible con el que presenta la versión. En esta sección daremos como migrar ese código, para poder tener el mismo comportamiento en ese entity manager. Además, en caso de que se estuviera aplicado el pattern OAV, si bien el pattern no está migrado a su versión en GeneXus X, damos el código necesario para que se puedan reutilizar desde el entity manager los objetos generados por el patrón OAV en GeneXus 9.0. Daremos aquí un ejemplo genérico y luego daremos otro ejemplo para el caso concreto del Patrón OAV:
Versión 9.0 había que agregar el código en dos subrutinas:
1) Subrutina LoadAllTabs (se agregaba el tab) 2) Subrutina SetWebComponent (se preguntaba según cuál era el tab seleccionado y se cargaba el web component correspondiente).
En la versión de la X, todo esto se hace en una única subrutina de nombre ‘LoadAllTabs’. En esta subrutina, lo que hay que hacer es :
15
For Each (se recorre según la estructura que se desee recorrer) &Tab = new() &Tab.Code = &Tab.Description = &Tab.WebComponent = &Tab.Link = &Tab.ComponentType = K2BComponentType.UserDefined &Tabs.Add(&Tab) EndFor
16
EntityManager nombre = ViewProductos. PKTransacciónPrincipal = ProductId FormDefinitionId y FormDefinitionDescription(ProductoFormDefinitionId, ProductoFormDefinitionDescription).
For Each &Tab = new() &Tab.Code = !"FormOAV" + trim(str(ProductoFormDefinitionId)) &Tab.Description = ProductoFormDefinitionName &Tab.WebComponent = HProductoOAVWC.Link(&ProductId, ProductoFormDefinitionId) &Tab.Link = ViewProductos.Link(&Mode, &ProductoId, &Tab.Code) &Tab.ComponentType = K2BComponentType.UserDefined &Tabs.Add(&Tab) EndFor
Para el caso del OAV, se tiene que agregar en events and subroutines un nodo sub, de nombre LoadAllTabs y en el end code colocar:
17
Anexo I: Propiedades no convertidas En la conversión de instancias, existen determinadas propiedades que en nuestra experiencia no eran utilizadas en la versión 9.0 y de ser utilizadas se usaban para casos muy particulares. En la versión actual estas propiedades no serán convertidas. Esto es para tener en cuenta, en caso de luego de la conversión presentarse problemas.
Cancel Event En la versión 9.0 se podía setear qué evento se iba a ejecutar cuando se presionara cancel en la transacción. En esta versión en caso de que se tuviera cancel event lo que hay que hacer es luego de la transformación, eliminar ese evento y colocar ese código en el slot de usuario cancel. Link To La propiedad LinkTo no será convertida. Para eso se sugiere en caso de tener LinksTo, cambiar esta propiedad por add -> Link y apuntar al objeto.
Link BackToSelection El elemento link asociado a la raíz workwiths o view, no será convertido. Esto se usaba para modificar el backtoselection, la idea es que el pattern si el workwith recibió parámetros idea otro mecanismo más inteligente a la hora de determinar el backtoselection.
18
19