Codigo C# con [ ] en GeneXus 9.0


Migramos el GXWiki de la versión anterior, a la 2.0.
Todo funciona bien, pero cambió la forma en que se suben las imágenes, con la WikiAPI.
Para lograr que funcione correctamente debíamos pasar el contenido de las imágenes a base64.
Hacer eso en GeneXus X es trivialmente sencillo, pues alcanza con

Con Genexus 9.0, no encontré la forma de hacerlo en forma nativa por lo que teníamos que agregar algo de código C# en la aplicación.

El código no era complicado, era algo asi:

  
byte[] encData_byte = new byte[data.Length];
encData_byte = System.Text.Encoding.UTF8.GetBytes(data);
string encodedData = Convert.ToBase64String(encData_byte);
return encodedData;

Al querer incorporar la sentencia

csharp byte[] encData_byte = new byte[data.Length];

al compilar daba un error, pues no encontraba byteERR. El parser, el generador o el chupacabras estaban cambiando [] por ERR.

Probamos de varias maneras y la que al final nos funciono fue poner

csharp byte[
csharp ] encData_byte = new byte[data.Length];

Me hizo acordar a la frase de los filósofos del Cuarteto de Nos :

"hice facil las adversidades, y me compliqué en las nimiedades"

PD: Ya me habia encontrado varias veces con este drama con codigo HTML o javascript, pero era mas facil de resolver, pues se podia concatenar o poner variables, pero aca demoramos mucho mas en encontrarle una vuelta.

Comentarios

  1. Hola Enrique,
    Otras posibilidades para evitar ese error son:

    csharp byte[/**/] encData_byte = new byte[data.Length];

    ó

    csharp byte[[!!]] encData_byte = new byte[data.Length];

    Saludos.

    ResponderBorrar
  2. Armando:

    Muchas gracias!.
    Siempre es bueno tener otras opciones.
    Realmente probe varias combinaciones de [ y !

    Por ejemplo:

    [![]!]

    [[]]

    pero no habia logrado lo deseado...

    Igual creo que estaria bueno tener una forma de poder decirle al generador "esto incluilo en mi programa sin modificaciones", para no perder tiempo descubriendo este tipo de pisadas

    csharp Code(xxxxxxxxxxxxxxxxx) y

    que no toque lo que esta dentro de los parametros.

    ResponderBorrar
  3. Andabas pegando en el palo con las convinaciones que probaste :)

    Más allá de este error puntual, en lo personal muchas veces prefiero tener un cs externo con el código que necesito y después llamar al método correspondiente desde GX, así te evitás posibles problemas con el parser.

    Como bien decís, es bueno tener otras opciones.

    Saludos.

    ResponderBorrar
  4. Armando: Muchas veces uso las llamadas a CS, pero cuando el codigo es tan sencillo que se puede resolver en dos lineas de codigo, es un crimen incluir un fuente externo.

    Tiene sus bemoles el mantener el fuente externo sincronizado con las llamadas de la KB.

    Lamentablemente el objeto externo no incluye en la GX X la llamada a fuentes, pero es mucho mas facil mantener los fuentes actualizados pues se puede subir los archivos a la KB, lo cual es un paso enorme.

    ResponderBorrar
  5. Estimado Enrique como serìa el mismo còdigo pero en java para GEnexus9? desde ya muchas gracias...

    ResponderBorrar

Publicar un comentario

1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.

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.