Descargar - K2BTools

Anuncio
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 "<%=EntityManagerLink%>" in events node with entity manager call code ........................ 17
Subordinated level found: <levelName> . In GeneXusXEv1 subordinated level is displayed in tab
general. Select to remove or keep this node" .................................................................................... 17
Parameter <parameterName> 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 <ObjectName> in action <ActionName>" not found in knowledge base. Rename GXObject
manualy" ............................................................................................................................................. 18
Link to web panel <webpanel> doesn´t exist in knowlege base. Fix object name in converted
instance ............................................................................................................................................... 18
User defined webpanel <webpanelName> does´nt exist in knowledge base. WebComponent is set
to dummy object. Please fix gxobject property .................................................................................. 18
View <viewName> Tab Code: <tabCode> ObjectName: <objectName> doesn't contain transaction
node. Instance transaction node is added. Please verify transaction node is correct." .................... 18
\Action <actionName> has an attribute argument <attName>. 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<TrnName>
ii. WorkWith:HWW<TrnName>
iii. GeneralComponent: H<TrnName>General
iv. ParalelTransactionComponent: H<MainTrnName><TrnName>
v. SubWorkWith: H<MainTrnName><TrnName>WC
vi. Export: PExcel<ObjectName>
vii. Repot: R<ObjectName>
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 \"<%=EntityManagerLink%>\" 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
<%=entitymanagerlink%> 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: <levelName> . 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 <parameterName> 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 <ObjectName> in action <ActionName>" 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 <webpanel> 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 <webpanelName> 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 <viewName> Tab Code: <tabCode> ObjectName: <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 <actionName> has an attribute argument <attName>. 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 <obj> Cannot be generated.
<obj> 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 <AttDeLaExtendida> = <Condicion>
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
<%EntityManagerLink%> 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
Descargar