Mitra Global Services

Navimania 48 – Json avanzado (Rec2Json y Json2Rec)

Aquí estamos una semana más!

Hoy os voy a ampliar el tema de convertir Record en Json y además vamos a ampliarlo para hacerlo al revés, o sea, de Json a Record. Esto lo vimos en un ejemplo muy básico en el link.

El código base lo he encontrado en uno de los Gurús de Navision llamado Erik Hougaard, el código original esta en link. Pero también os tengo que confesar que lo he modificado un poquito y le he añadido extras. 😁

Dicho todo esto, vamos manos a la obra 😎

Voy a recuperar el proyecto que teníamos y a añadir una nueva codeunit para este ejemplo.

La primera función que añadiremos es la que utilizaremos en las dos partes, tanto en la de importar como en la de exportar.

Esta función sirve para quitar todo símbolo raro, puntos, espacios y substituirlos por guiones bajos. Al final del todo si hubiera más de un guión bajo también lo quitaría y lo dejaría solo con un guión.

Esto hace que tanto para exportar como para importar se utilicen los mismos nombres de los campos.

Exportar

Desarrollaremos la parte de la exportación.

La primera función será para convertir el valor del campo en un JsonValue.

Primero creamos las variables necesarias:

Y después lo pasamos por un Case para verificar cuál es el dato que debemos devolver:

Una vez creada esta función, vamos a la importante.

Lo primero que haremos es crear las variables necesarias:

Transformamos el variant en un RecordRef:

Recorremos y vamos añadiendo en el JsonObject los datos de la tabla:

Este proceso recorrerá toda la tabla y solo añadirá los campos de los datos de tipo normal y tipo flowfield.

Importar

Desarrollaremos ahora la parte de la importación.

La primera función es igual que antes para convertir a un tipo concreto de dato.

Lo primero como siempre son las variables:

Como podemos ver, en este caso es mucho mas sencillo y lo que hace es ir convirtiendo cada tipo para añadirlo al FieldRef:

Ahora vamos a la función de creación propiamente dicha, para añadir el Json al record que queremos.

Los primero son las variables:

Ahora abrimos el RecordRef y lo recorremos una primera vez para buscar y añadir los nombres de los campos en una variable de tipo Dictionary:

Después inicializamos el RecordRef y empezamos a recorrer esa variable de Dictionary para ir añadiendo cada dato del Json en nuestros campos:

Por último, igualamos el record a un variant para ser devuelto en la función:

En el importar hemos añadido unas funciones iniciales para facilitar su llamada:

La primera y la segunda, lo que hacen es una llamada al upload para recoger el Json.

La tercera simplemente es por si en lugar del número de la tabla, queremos añadir directamente el Rec que es siempre mucho más sencillo.

Para comprobar que todo esto funciona lo añadimos a la pageextension que ya teníamos creada en el ejemplo y creamos dos nuevos botones.

Uno para exportar y otro para importar:

Como siempre este ejemplo entero lo tenéis colgado en GitHub en el link.

Esperamos que esta explicación os resulte de utilidad y os emplazamos a nuestra próxima publicación.

Esteve Sanpons

ES