Programa Genexus para cambiar codigo GeneXus usando expresiones regulares.

 


En una KB que tenia muchos años tuvimos que hacerla multi-idioma. 

Hay un trabajo grande de poner a los string que no son traducibles el símbolo ! delante. 

Por ejemplo donde antes decía

where ClienteActivo = 'S'

hay que poner

where ClienteActivo = EstadoCliente.Activo 

o

where ClienteActivo = !'S'

Hice un programa para leer un archivo de un export de GeneXus y cambiar el código para hacer el segundo cambio. 

Lo que hace es recorrer el archivo del export y se fija si esta en una parte modificable (Source, Rules, Conditions, Source de DataProvider o Data Selector, etc)

Dentro de esas partes, hay también propiedades, variables, etc que no deberían cambiarse por lo que solo cambia algo si está dentro de una sección <!CDATA. 

A su vez, hay varias excepciones que deben contemplarse, por ejemplo cuando se tiene codigo javascript embebido en el código, o comandos CSHARP, JAVA, SQL o los nombres de las Subrutinas que no deben cambiarse, y no se pueden marcar como no traducibles. 

Solo cambia aquellos strings que son mayúsculas y que tienen por alguna letra y números (si tiene algún carácter raro o es solo números no lo cambia). 

Una vez que tengo esto, utilizo la expresión regular

&Pattern=  "(?<!!)(?:'([^']{1,8})')" 

para buscar todos los string de largo hasta 8 caracteres, que no tengan un ! delante y solo con comillas simples y luego realizo el reemplazo.

Cambiar código reemplazando texto con expresiones regulares, es una actividad de riesgo, pero ahorra muchísimas horas de trabajo manual y aburridísimo.

Si alguien necesita hacer algo parecido (y lo quiere) le paso el código. 

 

Comentarios

Entradas más populares de este blog

Aplicación monolítica o distribuida?

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.