jueves, 11 de agosto de 2016

Modificar un tag específico de un Archivo XML en Genexus

Bueno entre idas y venidas las necesidades apremian, por hoy modificar un tag específico de un Archivo XML.

Ahora si manos a la obra.

Primero obtener el contenido del tag que necesitamos modificar. Para ello leyendo un poco del Data Type XMLReader notamos que podemos usar la función ReadType para obtener el contenido del tag especificado y mediante la función Value obtener su valor.

&XMLReader.Open(&filePath)
&XMLReader.ReadType(1,"tag")
&tagValue = &XMLReader.Value
&XMLReader.Close()

En segundo lugar necesitamos obtener el contenido del archivo mediante el DataType File (más información del manejo de archivos aquí) y almacenar su contenido en un Varchar, en mi caso en la variable de nombre &XML.

&File.Source = &filePath
&File.OpenRead()
&XML = &File.ReadAllText()
&File.Close()

Tercero, armar dos Strings o Varchar, uno para búsqueda y otro para reemplazo dentro del String o Varchar obtenido anteriormente, que usaremos con la función StrReplace.

&search = "<tag>" + &tagValue + "</tag>"
&replace = "<tag>"+ &newTagValue.ToString().Trim()+"</tag>"
&XMLModified = StrReplace(&XML, &search, &replace)

Por último sobreescribimos el archivo XML con el nuevo contenido.

&File.OpenWrite(&filePath)
&File.WriteAllText(&XMLModified)
&File.Close()

PD: Para control de errores

sobre el XMLReader

&XMLReader.ErrCode
&XMLReader.ErrDescription

sobre el Data Type File

&File.ErrCode
&File.ErrDescription


lunes, 8 de agosto de 2016

Aplicación Java no despliega sobre Tomcat 8 en Genexus

Bueno hoy tocó hacer algunas pruebas sobre Java y Tomcat 8 con Genexus y me encuentro con la sorpresa de qué no se desplegaba mi app en el servidor de aplicaciones.

Tengo el servicio de tomcat levantado en forma manual asi que debo ingresar a la página de administración y arrancar la aplicación, al hacerlo me doy cuenta de un error en la app que no permite arrancarla:



Revisando el log de Tomcat ([path de instalación]/logs) me encuentro con un error relacionado con el GAM de Genexus, el cual no estoy usando:


Caused by: java.lang.NoClassDefFoundError: artech/security/api/gamrefreshtoken

pero googleando un poco me topo con el SAC#31566 que explica las configuraciones pertinentes para Tomcat 7, asi que a probar un poco las mismas para ver si funcionan sobre Tomcat 8.

Se editó justo lo que piden las configuraciones:
  • Asegurarse que la propiedad "use annotations for servlet definition" en web information se habilita (valor "Yes"). Propiedad ubicada en el Generador del ambiente Java correspondiente.

  • Utilizar la propiedad Java Package name y especificar un valor. (Por defecto ya venía configurada)


Y arrancando la app y accediendo al path correspondiente ya se despliega correctamente.

PD: Antes tocó solucionar otro error de clases no encontradas para la libreria gxscanner.jar:

java.lang.ClassNotFoundException: com.genexus.webpanels.GXJarScanner

o

Caused by: java.lang.ClassNotFoundException: com.genexus.webpanels.GXJarScanner

Que se solucionó incorporando la librería correspondiente en la carpeta lib de la aplicación en Tomcat descargada del site oficial de Genexus. Download. Les dejó tambien el acceso al SAC#36031  correspondiente (deben estar registrados en el site de Genexus para su descarga)