Incluir código externo en una KB GeneXus

Existen varias formas de incluir código nativo (java, C#) en aplicaciones Genexus.

Método 1)

Cuando se tiene que ponder algo de codigo especifico, unas pocas lineas de codigo, conviene usar los comandos para incluir codigo fuente dentro del codigo Genexus.

Método 2)

Hay casos, en que conviene desarrollar un Objeto Externo Nativo, cuando se necesita una funcionalidad mas compleja y el codigo es mas largo. Hay que crear un proyecto con Visual Studio o Eclipse y crear una dll o class para poder importarla en GeneXus.

Existen casos, en que solo tengo que incluir un bloque de código, pero es incomodo usar cualquiera de las opciones anteriores. Como son varias lineas de codigo no es practica el metodo 1, porque Genexus muchas veces no maneja correctamente los paréntesis en los código externo. Y como es poco código, el costo de mantener un proyecto externo, es demasiado solo para tener algunas lineas de código.

Método 3)

Este es un metodo *no recomendado*, pero que funciona. Es aplicable cuando tengo algunas decenas de lineas de codigo que quiero tener a mano en la KB, sin tener un proyecto externo.

Yo lo hago de esta forma

Creo un objeto procedure GeneXus que se llame ProgramaExterno y le pongo la regla con los parámetros necesarios por ejemplo:

parm(IN:&ParametroEntrada, OUT:&ParametroSalida). //ajustarlo poniendo nombre y tipo de parametros necesarios.

En el código se pone y va a ser sustituido:

//Este es el codigo que va a ser sustituido.
Msg("ACA VA EL CODIGO")
//Esto es para saber con que nombre queda el parametro de entrada en el fuente generado.
Msg(&ParametroEntrada.tostring())
//Esto es para saber con que nombre queda el parametro de salida
Msg(&ParametroSalida.ToString())



Salvo el objeto y lo especifico y genero.

Esto va a generar un archivo ProgramaExterno.java o ProgramaExterno.cs, que tiene los parámetros deseados y que Genexus lo puede llamar sin errores.

Luego se borra el objeto ProgramaExterno, pero no borrar el fuente generado.

En el código se invoca como programa externo

call("ProgramaExterno", &ParametroEntrada, &ParametroSalida)


y va a estar incluyendo ese archivo en el programa.

Ahora, solo falta editar el ProgramaExterno.java o .cs y buscar donde dice "ACA VA EL CODIGO" y ponerle el código nativo deseado, usando el nombre de variables de los parámetros de entrada y salida.

Luego que todo este funcionando, conviene subir archivo ProgramaExterno.java o cs como archivo autoextraible de la KB, para no perderlo.

Comentarios

  1. Enrique, buenas tardes. ¿Este procedimiento descrito funciona en Genexus 9?

    ResponderBorrar
    Respuestas
    1. Si, cualquiera de las 3 formas funcionan en GeneXus 9.

      Borrar
    2. Muchas gracias por contestar Enrique. Preguntaba si esto funciona en Genexus 9 porque al realizar el procedimiento descrito, cuando realizo la compilación me envía este error:
      Compiling prueba.java
      prueba.java:41: execute(int,byte,byte[]) in pprogramaexterno cannot be applied to (int[],int[],int[])
      new pprogramaexterno(remoteHandle, context).execute( GXv_int1, GXv_int2, GXv_int3) ;
      ¿Que me puede estar faltando? El "ProgramaExterno.java" lo tengo en el directorio de la KB dentro de la carpeta "web". ¿Debe estar en otra ubicación?
      Saludos y muchas gracias!!

      Borrar
    3. Lo que estas teniendo ahi es que no compila pues tiene diferencias en los parametros.
      significa que el método execute está definido así:

      public void execute(int a, byte b, byte[] c)

      Pero tu llamada usa:

      new pprogramaexterno(remoteHandle, context).execute(GXv_int1, GXv_int2, GXv_int3);

      Y esas tres variables (GXv_int1, GXv_int2, GXv_int3) son arreglos (int[]).

      Te recomiendo que primero lo hagas solo con GeneXus,(sin el codigo, pero si con los parametros correctos) y luego sustituyas el codigo java SOLO EN LA PARTE DEL METODO EXECUTE O EXECUTEPRIVATE, no cambiando la definicion de los parametros.
      Si te compila todo con GX, te tiene que compilar con tu codigo, y posiblmente tengas que cambiar alguna nombre de variable.

      Borrar

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

Migrando de GeneXus 9.0 a GeneXus X.

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

Aplicación monolítica o distribuida?