Story Transcript
Guía Conversión de Instancias 9.0 a XEv1
1
Índice Cambios K2BEntityServices XEv1 con respecto a K2BEntityServices 9.0 ...................................................... 5 Transacción como web component: ......................................................................................................... 5 Una instancia por transacción: ................................................................................................................. 8 Determinación de parámetros a la hora de invocar la transacción:......................................................... 8 Cambios en la estructura de la instancia: ................................................................................................. 8 Cambios en el tema: ................................................................................................................................. 9 Pasos para convertir instancias................................................................................................................... 10 Previo a la conversión de instancias ....................................................................................................... 10 Convertir KB a GeneXus X Evolution 1 ............................................................................................... 10 Verificar correcto funcionamiento de la KB sin patterns. ................................................................... 10 Distribución de instancias: .................................................................................................................. 10 Seteos en el directorio templates ....................................................................................................... 10 Unificación de instancias..................................................................................................................... 10 Proceso de conversión de instancias ...................................................................................................... 11 Conversión de instancias ........................................................................................................................ 15 Nodos GeneXus9.0ErrorToFix a corregir por el usuario ......................................................................... 17 Replace "" in events node with entity manager call code ........................ 17 Subordinated level found: . In GeneXusXEv1 subordinated level is displayed in tab general. Select to remove or keep this node" .................................................................................... 17 Parameter is not part of primary key. Remove this node, or obtain transaction key value with user code placed in event start node. ........................................................................ 17
2
Object in action " not found in knowledge base. Rename GXObject manualy" ............................................................................................................................................. 18 Link to web panel doesn´t exist in knowlege base. Fix object name in converted instance ............................................................................................................................................... 18 User defined webpanel does´nt exist in knowledge base. WebComponent is set to dummy object. Please fix gxobject property .................................................................................. 18 View Tab Code: ObjectName: doesn't contain transaction node. Instance transaction node is added. Please verify transaction node is correct." .................... 18 \Action has an attribute argument . If use transaction is set to true, tabluar node has not base table. Use a variable insted of attribute or set usetransaction to false .. 19 Especificar, generar y compilar ............................................................................................................... 19 Warning : Invocación a la transacción no puede ser generada ......................................................... 19 Warning : Invocación a la transacción no puede ser generada ......................................................... 20 Error por referencia a controles en nodo events................................................................................ 20 Error por referencia a controles en código de la transacción............................................................. 21 Error por diferente Data Area en web form de la transacción ........................................................... 22 Manera distinta de invocar a la trn..................................................................................................... 22 Error por crear web component de transacciones con update transaction = false ........................... 22 Error por regla parm de la transacción incorrecta:............................................................................. 23 Error componente user defined que no recibe el modo ................................................................... 23 Invocación a viejo PK2BGetTrnContext en código por fuera de slots de la transacción .................... 23 OAV y código de extensión de tabs del View (Entity Manager en la XEv1) ............................................ 23 Código de extensión de tabs en el view.............................................................................................. 24 Anexo I: Propiedades no convertidas ..................................................................................................... 25 Cancel Event ........................................................................................................................................ 26 Link To ................................................................................................................................................. 26 Link BackToSelection .......................................................................................................................... 26
3
4
Cambios K2BEntityServices XEv1 con respecto a K2BEntityServices 9.0 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
5
Y a continuación la vemos en la XEv1.
6
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 misma 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 la transacción. 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:
7
• •
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. El programa de conversión unifica varias instancias sobre 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 XEv1, k2btools lee la regla parm de la transacción y de esta forma infiere 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 que el atributo.
Cambios en la estructura de la instancia: 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.
8
Estos cambios de nombres son resueltos completamente con el conversor de instancias.
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 enfrentar estos problemas.
9
Pasos para convertir instancias Previo a la conversión de instancias 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.
Distribución de instancias:
Para convertir las instancias de la 9.0 a la XEv1 las mismas deberán estar distribuidas. Es importante no olvidar hacer este paso. Distribuir las instancias y dejar las mismas en un directorio de nombre templates, con la misma estructura que posee en la KB original.
Seteos en el directorio templates
En el directorio templates, 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. Unificación de instancias En la XEv1 sólo se puede tener una instancia por transacción. Si bien en la XEv1 si se importan dos instancias sobre la misma transacción se unifica, recomendamos realizar la unificación antes de 10
convertir en la versión 9.0. De esta forma ante cualquier problema, se puede determinar unívocamente de que instancia de la 9.0 proviene el error.
Proceso de conversión de instancias Para estar seguro de la correcta configuración de las instancias, recomendamos seguir este proceso. Los puntos asociados a la conversión de instancias, serán detallados más adelante. 1. Forzar consolidación de objetos básicos del pattern k2bentityservices a. Crear una transacción pequeña y aplicarle el pattern. b. Una vez que se aplicó, borrar la instancia y luego la transacción. 2. Setear en el settings del pattern k2bentityservices el nombre de los objetos, para que sean similares a los de la 9.0. a. Ir a Preferences->K2bentityservicessettings b. Navegar al nodo objects c. Asignar propiedades: (acá se asignan las por default de la 9.0, en caso de haber customizado los valores default modificarlo según corresponda. i. EntityManager: HView ii. WorkWith:HWW iii. GeneralComponent: HGeneral iv. ParalelTransactionComponent: H v. SubWorkWith: HWC vi. Export: PExcel vii. Repot: R 3. Importar tema k2boriginal. K2BOriginal era el tema que se usaba en la versión 9.0. En caso que el nombre del tema k2boriginal sea igual a k2b, en el diálogo de importación, antes de importar colocar en options ThemeImportBehaviour: Overwrite 4. Setear el tema k2boriginal como el tema de la KB. Todos los objetos que no tengan el pattern aplicado tendrán este tema.
11
5. Si se customizó el tema usado en la versión 9.0, adaptar alguno de los temas que vienen en los patterns de la XEv1, para que tenga el mismo look & feel de la aplicación anterior. Proceder como se explica abajo. En caso de no haber modificado el tema (se trabajó con el azúl y nunca se tocó), usar el tema k2b que viene en la versión XEv1 de las k2btools y no seguir los pasos que se especifican abajo. a. Hacer un save as del tema k2b3. De ahora en más el tema salvado se va a llamar k2bnuevo. b. Configurar las clases para que tengan el mismo look & feel que el aportado por k2boriginal i. Para esto se puede hacer en otra KB, se crea una instancia de patterns, se hace un save as del tema y se va modificando la interfaz para adaptarla. Luego se importa en la KB nueva. ii. Agregar las siguientes clases (copiarlas y pegarlas de k2original) 1. Bajo Attributes: a. K2BBoxAttribute b. K2BGridAttribute c. K2BTrnAttribute 2. Bajo Button: a. K2BButtonTableGrid 3. Bajo Grid: a. K2BNoPagingGrid b. K2BTransactionGrid 4. Bajo Table: a. K2BTableAttributeTitle b. K2BTableGridContainer c. K2BTableTabsContainer 5. Bajo TextBlock: a. K2BAttributeTitle b. K2BGridTitle 12
c. K2BTextView
c. Hacer un save as de los objetos de Layout: WWLayout3, SubWWLayout3, EntityManagerLayout3 y GeneralLayout3, por otro nombre (de acá en más será prefijo de Layout + nuevo). d.
Modificar estos objetos de Layout salvados para adaptar su interfaz a la interfaz que se quiere tener.
e. Hacer un save as del objecto K2BRecentLinks3 (K2BRecentLinksNuevo) f.
Hacer un save as del objeto K2BTabbedView3 (K2BTabbedViewNuevo)
g. Adaptar la master page a la nueva versión de las k2btools (K2BMasterPageOriginal) i. Agregar el siguiente código al evento start de la master page Form.JScriptSrc.Add("K2BTools.js")
h. Adaptar Header a la nueva versión de las k2btools i. En el objeto Header que se estaba utilizando en la versión 9.0, eliminar del webform la variable k2bstack ii. Eliminar en el evento start el código &K2BStack.Visible = K2BBoolean.False iii. Eliminar el evento K2BFreeStyleRecentLinks.Load iv. Eliminar la subrutina GetRecentLinksStartIndex v. Eliminar el evento refresh vi. En el webform sustituir la grilla Freestyle K2BFreeStyleRecentLinks por un webcomponent de nombre RecentLinksComponent vii. Agregar en el evento start el siguiente código RecentLinksComponent.Object = K2BRecentLinksNuevo.Create(&FormCaption, &includeInStack)
viii. En el evento K2BCloseHeader.Click colocar el siguiente código Call(K2BStackGoBack, &K2BURL) Link(&K2BURL)
13
i.
Especificar los Layouts a usar en el settings i. Ir al nodo Layout ii. En las propiedades colocar lo siguiente: 1. WorkWithLayout : WWLayoutNuevo 2. SubWWLayout : SubWWLayoutNuevo 3. GeneralLayout: GeneralLayoutNuevo 4. EntityManagerLayout:EntityManagerLayoutNuevo iii. Copiar y pegar el nodo WorkWithRulesLayout correspondiente al objeto WWLayout3. iv. Modificar en la propiedad LayoutObject: WWLayoutNuevo v. Modificar en la propiedad MasterPage: K2BMasterPageOriginal vi. Copiar y pegar el nodo EntityManagerRulesLayout correspondiente al objeto EntityManagerLayout3 vii. Modificar la propiedad LayoutObject : EntityManagerLayoutNuevo viii. Modificar la propiedad TabbedView: K2BTabbedViewNuevo ix. Modificar la propiedad MasterPage: K2BMasterPageOriginal x. Copiar y pegar el nodo SubWorkWithRulesLayout xi. Modificar la propiedad LayoutObject:SubWWLayout3 xii. Copiar y pegar el nodo GeneralRulesLayout correspondiente al objeto GeneralLayout3 xiii. Modificar la propiedad LayoutObject : GeneralLayoutNuevo
6. Configurar las propiedades generales de las k2btools a. En Preferences , Nodo K2BTools- >General i. WebTheme : K2BNuevo ii. SetObjectTheme:True
14
7. Importar una instancia, en lo posible que tenga una acción de usuario con imagen, para verificar que la imagen convierta correctamente. a. Verificar en los mensajes que despliega la conversión que el único rename de objetos sea los reportes Excel y pdf del nodo workwith. 8. Especificar, ejecutar, compilar, verificar en ejecución que todo funcione correctamente, con el look & feel correcto y que la acción con imagen se convirtió correctamente. 9. Importar las instancias (todas o de a poco) a gusto. 10. Especificar, compilar, ejecutar.
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.
15
Esto despliega la siguiente pantalla que se muestra a continuación.
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.
16
Dadas las diferencias existentes en la versión 9.0 de las k2btools con respecto a la XEv1, en muchos casos el proceso de conversión va a requerir la asistencia del usuario para que corrija la instancia convertida y determine que nodos va a utilizar. Para esto, en casos en que el usuario deba realizar una determinación, se agregará un nodo GeneXus9.0ErrorToFix, con un mensaje de error. El usuario deberá corregir ese error. Una vez corregido ese error puede borrar el nodo para que al aplicar la instancia no de más error.
Nodos GeneXus9.0ErrorToFix a corregir por el usuario
Replace \"\" in events node with entity manager call code
En caso de obtener este mensaje, ver en los nodos events del entity manager reemplazar el tag por la invocación al entity manager en que se encuentra parado con sus respectivos parámetros (ver código del entitymanager generado). El programa conversor no conoce los parámetros del objeto entity manager por eso hay que hacerlo manualmente
Subordinated level found: . In GeneXusXEv1 subordinated level is displayed in tab general. Select to remove or keep this node" En GeneXusXEv1, para las transacciones de dos niveles el segundo nivel es visualizado en el tab general. En la 9.0 además se puede querer tener un workwith o entitymanager asociado al tab del segundo nivel para poder visualizar este nivel. En este caso el usuario deberá escoger si quiere mantener este segundo nivel o no. En caso de no querer mantenerlo eliminar el nodo asociado al error.
Parameter is not part of primary key. Remove this node, or obtain transaction key value with user code placed in event start node. En los parámetros del entity manager se encontró un parámetro que no forma parte de la clave primaria de la transacción. Si el parámetro es una variable adicional que se debe pasar al entity manager, eliminar el nodo de error y dejar todo como estaba. Si en los parámetros del entity manager no está la PK de la transacción asociada completa, entonces a partir del parámetro debería existir alguna forma de determinar la PK. Para esto, colocar en la instancia un events start code, y colocar código de determinación de la PK, a partir de ese parámetro. Para asociar la PK, se debe asignar un valor a las variables del mismo nombre que el atributo.
17
Object in action " not found in knowledge base. Rename GXObject manualy" En caso que de este error, hay que revisar cuál es el objeto al que referenciaba la acción en la 9.0 y porque ese objeto no está en la XEv1. Puede ser que ese objeto haya sido renombrado en la XEv1. En tal caso, buscar el nombre nuevo y renombrarlo manualmente en la instancia de la XEV1.
Link to web panel doesn´t exist in knowlege base. Fix object name in converted instance En caso de error, hay que revisar cuál es el objeto al que referenciaba el link en la 9.0 y porqué ese webpanel no está en la XEv1. Puede ser que ese objeto haya sido renombrado en la XEv1. En tal caso, buscar el nombre nuevo y renombrarlo manualmente en la instancia de la XEv1. User defined webpanel does´nt exist in knowledge base. WebComponent is set to dummy object. Please fix gxobject property Existe un tab user defined cuyo objeto referenciado no existe. Hay que ver porqué el objeto existía en la 9.0 y en la XEv1 no, y realizar los cambios correspondientes.
View Tab Code: ObjectName: doesn't contain transaction node. Instance transaction node is added. Please verify transaction node is correct." En la version XEv1 todos los tabs subordinados y paralelos deben tener un relatedtransaction asignado. En la 9.0 esto no era necesario. El programa conversor si no encuentra el nodo transaction, convierte la instancia dejando en relatedtransaction el nombre de la transacción principal de la instancia. El usuario debe reveer esto, para ver en la 9.0 a que transacción aplicaba. Si la transacción a la que aplicaba era una transacción subordinada, debería eliminar el nodo, dado que esa información es visualizada en el tab general. Si la transacción a la que aplicaba es otra transacción, modificar la propiedad related transaction y asignarle valor.
18
\Action has an attribute argument . If use transaction is set to true, tabluar node has not base table. Use a variable insted of attribute or set usetransaction to false En el tab general de la XEv1, no existe tabla base cuando se utiliza usetransaction=true. Si se tiene este error, en caso de querer seguir usando la propiedad usetransaction en true, pasar variables como parámetros y determinar ese valor de las variables en el evento asociado a la acción o en el evento start. Si se quiere usear usetrasaction= false , ahí se tiene tabla base así que no hay necesidad de tener instanciadas las variables.
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. Algunas de estas referencias son corregidas automáticamente por el programa convertidor, pero otros escapan el alcance de este programa y en caso de detectarse error, hay que hacer el cambio sobre la instancia convertida.
Warning : Invocación a la transacción no puede ser generada
Call to program Cannot be generated.
es una transacción.
La razón de este problema es porque se está invocando a una transacción, que ahora es un web component, por tanto habría que invocar al entity manager. Para esto si el objeto es generado por el patrón modificar en la instancia la llamada de la transacción, para que invoque al entity manager y si no es generado por el patrón, modificar el objeto a mano, colocando el llamado al entity manager correspondiente a la transacción.
19
Warning : Invocación a la transacción no puede ser generada
spc0024Not enough parameters linking ENTITYMANAGERTPROPOSITOUBICACION. (Source, Line: 74) En la versión GeneXusXEv1, el view de la 9.0, pasará a recibir un parámetro más, que es el modo en que se va a ejecutar. En los programas que llamaban manualmente a un view, puede darles el warning de que falta adicionar un parámetro para que la invocación funcione correctamente. Para solucionar esto, agregar el parámetro faltante, ya sea en la instancia de patterns si el objeto es generado, o en el objeto mismo si no está dentro de los patterns. Si se tiene la extensión FixTransactionCalls, estos tipos de errores serían solucionados automáticamente.
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)
20
•
TextBlock1 en la 9.0 por TextBlockPaisId (fixed data views)
•
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)
En estos casos lo que se puede hacer es pasar el código del K2bPgmDesc para el entity manager. En el entity manager asociado se agrega un nodo events, event start y en el begin code coloca lo siguiente: For Each PK Where PK = &PK If = K2BPgmDesc.Caption = K2BPgmDesc.Caption + ' Literal' ... EndFor
21
Por Ejemplo, en TCotizacionMoneda For Each PaisCodigo PaisMonedaCodigo Where PaisCodigo = &PaisCodigo Where PaisMonedaCodigo = &PaisMonedaCodigo If MonedaPaisTipo = K2BTipoMoneda.Arbitraje K2BPgmDesc.Caption = K2BPgmDesc.Caption + ' Arbitraje de moneda' Else K2BPgmDesc.Caption = K2BPgmDesc.Caption + ' Cotización de moneda' EndIf EndFor
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)
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.
22
Error por regla parm de la transacción incorrecta:
Caso 1: Variable Areanegociocodigo1 not defined; N(10.2) assumed.
Caso 2: Supertype EmpresaId cannot be instantiated. Use subtype CentroOperativoEmpresaId spc0051instead in grid 'Grid'.
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 el caso 1 por ejemplo la parm contenía parm (In:&Mode, In:&AreaNegociosCodigo1), se cambio para que sea parm(In:&Mode, In:&AreaNegociosCodigo). En el caso 2 el problema es que el la regla parm donde tenía que estar el subtipo estaba el supertipo. 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.
Error componente user defined que no recibe el modo Parameter &DepositoId linking TDepositoUbicacionGeneral has wrong type El problema se debe a que en el tab user defined si no tiene nodo arguments se pasa el modo y la pk. El objeto al no ser aún generado por patterns queda recibiendo solamente la pk. Si se pasa a generar el objeto TDepositoUbicacionGeneral con patterns, o se agregan argumentos en el nodo arguments este problema se soluciona.
Invocación a viejo PK2BGetTrnContext en código por fuera de slots de la transacción spc0023 Parameter &TrnContext calling PK2BGETTRNCONTEXT has wrong type. (Events, Line: 42)
Para solucionar este problema, invocar al K2BGetTrnContext en lugar del PK2BGetTrnContext.
OAV y código de extensión de tabs del View (Entity Manager en la XEv1)
23
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. Esta nueva versión se encarga de automatizar todo este proceso. La única cosa que el programa no puede determinar es de qué forma de invocará al entity manager, para esto una vez terminado el proceso de conversión si surge el siguiente error correspondiente a un entity manager:
\error: Expecting attribute list after a 'Defined By' expression (Events, Line: 97, Char: 43) error: Expecting subroutine name after 'Sub' word. (Events, Line: 37, Char: 1) error: '{0}' is an unexpected expression. (Events, Line: 98, Char: 21) error: Unexpected expression (Events, Line: 102, Char: 36) error: '{0}' is an unexpected expression. (Events, Line: 102, Char: 26) error: '{0}' is an unexpected expression. (Events, Line: 103, Char: 26) error: '{0}' is an unexpected expression. (Events, Line: 104, Char: 26) error: '{0}' is an unexpected expression. (Events, Line: 105, Char: 2) error: '{0}' is an unexpected expression. (Events, Line: 106, Char: 2) error: Unexpected command 'Case' (Events, Line: 108, Char: 9) error: '{0}' is an unexpected expression. (Events, Line: 108, Char: 14) error: '{0}' is an unexpected expression. (Events, Line: 109, Char: 14) error: '{0}' is an unexpected expression. (Events, Line: 110, Char: 14) error: '{0}' is an unexpected expression. (Events, Line: 111, Char: 11) error: '{0}' is an unexpected expression. (Events, Line: 113, Char: 14) error: Unexpected command 'Endcase' (Events, Line: 114, Char: 6) error: '{0}' is an unexpected expression. (Events, Line: 115, Char: 26) error: '{0}' is an unexpected expression. (Events, Line: 116, Char: 26) error: Unexpected command 'EndIf' (Events, Line: 117, Char: 18) error: Unexpected command 'EndFor' (Events, Line: 118, Char: 10)
Para solucionar esto, abrir el nodo events y modificar el código generado por el programa conversor por el link al entity manager. En caso de dudas de cómo hacer link al entity manager, comentar esta sección de código, ver el código generado para los otros tabs y copiar la llamada el entity manager.
Código de extensión de tabs en el view.
En muchos casos se suelen invocar programas para extender dinámicamente los tabs del view. Estos procs reciben como parámetro la lista de tabs y devuelven la misma lista con los tabs nuevos agregados.
24
En la versión 9.0 se usa como tab, el sdt TabOptions, mientras que en GeneXus XEv1 se utiliza K2BTabOptions. Para esto hay que modificar los procs para trabajar con el K2BTabOptions. En el código del proc, además hay que setear la propiedad Tab.WebComponent. Luego de esto lo que hay que hacer es cargar el link del entity manager. Acá mostramos un ejemplo de como se soluciona esto en el código utilizado por k2b. Esto habría que agregarlo en un nodo events, inmediatamente después de invocar a el PLoadOAVTabs o PLOadDatosAdjuntosTab. PLoadOAVTabs.Call(&Tabs, &EntidadCodigo, &EntidadInstanciaId) PLoadDatosAdjuntosTab.Call(&Tabs) For &Tab in &Tabs If substr(&TabOption.Code,1,7)=!"FormOAV" OR &TabOption.Code = !"DatosAdjuntosWC" &Tab.Link = ViewMovimientoStock.Link(&Mode, &MovStockId, &MovStockTipoTrnStkCodigo, &Tab.Code) EndIf
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
25
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 Instance 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.
26
27