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

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

Aplicación monolítica o distribuida?

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