¡Saludos, compañeros de programación en “NaviWorld”! Continuamos nuestro emocionante viaje en el mundo de las DLL para Navision. Hasta ahora, hemos explorado desde la creación básica de DLL hasta la ejecución en Navision. Además, nos aventuramos en la creación de DLLs para manejar JSON, pero ahora es el momento de profundizar. 🚀
El Desafío de los JSON:
El manejo de JSON en Navision, especialmente en versiones anteriores a 2018, puede resultar un terreno complicado. Pero ¡no temáis! Hoy, nos adentraremos en la creación de una clase dedicada exclusivamente a la lectura de JSON.
¿Listos para dominar este arte? pues ¡Vamos, manos a la obra! 🧐
Constructor y Variables Globales:
Comenzamos creando el constructor de nuestro proyecto y declarando la variable global que almacenará el JSON en formato texto. Al recibir el JSON como parámetro en el constructor, establecemos el escenario para las funciones que vendrán.
namespace MgtJson.Class
{
public class ReadJson
{
String StringJson;
public ReadJson(String NewStringJson)
{
StringJson = NewStringJson;
}
}
}
Funciones Esenciales:
Ahora, exploramos las funciones clave que harán de nuestra clase una herramienta invaluable para la lectura de JSON:
- GetValueJson_FromTag: Esta función permite obtener el valor de un tag específico dentro del JSON. Al proporcionar el nombre del tag, buscamos y devolvemos su valor.
public String GetValueJson_FromTag(String TagText)
{
JObject JsonObject = JObject.Parse(StringJson);
var Jtoken = JsonObject.GetValue(TagText);
String ValueText = Jtoken.ToString();
return ValueText;
}
- GetValueJson_FromPosition y GetTagJson_FromPosition : No solo obtenemos el valor, sino también el tag en una posición específica del JSON. Ideal para casos donde la posición es clave.
public String GetValueJson_FromPosition(int Position)
{
JObject JsonObject = JObject.Parse(StringJson);
JProperty property = JsonObject.Properties().ElementAt(Position);
String returnValue = property.Value.ToString();
return (returnValue);
}
public String GetTagJson_FromPosition(int Position)
{
JObject JsonObject = JObject.Parse(StringJson);
JProperty property = JsonObject.Properties().ElementAt(Position);
String returnValue = property.Name.ToString();
return (returnValue);
}
- GetJson_FormJson: Manejamos la complejidad de JSON dentro de JSON. Esta función devuelve el JSON interno en un formato legible y fácil de usar.
public String GetJson_FormJson(String JsonTagText)
{
JObject JsonObject = JObject.Parse(StringJson);
var Jtoken = JsonObject.SelectToken(JsonTagText);
String JsonValueText = Jtoken.ToString();
return JsonValueText;
}
- GetValue_FromJsonArray: Para trabajar con JSON arrays, creamos una función que extrae el JSON en una posición dada, abriendo nuevas oportunidades para explorar y manipular valores internos.
public String GetValue_FromJsonArray(int Position)
{
JArray JsonArray = JArray.Parse(StringJson);
String returnValue = JsonArray[Position].ToString();
return (returnValue);
}
- GetCountJson: Una función para saber cuantos registros tiene un JSON
public int GetCountJson()
{
JObject JsonObject = JObject.Parse(StringJson);
return JsonObject.Properties().Count();
}
- GetCountJsonArray: Una función esencial para conocer la longitud de un JSON array. Con esta información, podemos recorrerlo y extraer JSONs internos según sea necesario.
public int GetCountJsonArray()
{
JArray JsonArray = JArray.Parse(StringJson);
return JsonArray.Count;
}
- ExistsTag: Evitamos errores al exportar datos al verificar la existencia de un tag específico en el JSON.
public Boolean ExistsTag(String TagText)
{
Boolean IsExistsTag;
JToken Jtoken;
JObject JsonObject = JObject.Parse(StringJson);
if (JsonObject.TryGetValue(TagText, out Jtoken))
{
IsExistsTag = true;
}
else
{
IsExistsTag = false;
}
return IsExistsTag;
}
Con estas funciones, hemos armado un conjunto sólido para enfrentarnos a los retos de la lectura de JSON en Navision. Este viaje no ha hecho más que comenzar, y en nuestro próximo artículo, exploraremos como ejecutar todas estas funciones en nuestro Navision.
Como siempre, el código completo está disponible en mi repositorio de GitHub.
¡Espero que encontréis útiles estas herramientas! Hasta pronto, programadores de “NaviWorld”. 🚀