Primeros pasos: DinaCode
Introducción
¿Qué es DinaCode?
DinaCode es el lenguaje de scripting propio de la plataforma Dinaup, diseñado para permitir a los desarrolladores crear soluciones personalizadas, automatizar procesos y manipular datos de manera eficiente dentro del ecosistema Dinaup.
Características Clave
Sencillez y Flexibilidad: Sintaxis intuitiva y fácil de aprender.
Integración Profunda: Acceso a las funcionalidades y datos internos de Dinaup.
Funciones Poderosas: Amplia gama de funciones integradas para diversas tareas.
Estructuras de Datos Avanzadas: Soporte para tablas de dat~~~~os y diccionarios.
Casos de Uso
Automatización de tareas rutinarias.
Generación de informes y documentos dinámicos.
Integración con APIs y servicios externos.
Personalización de la lógica de negocio.
Plantillas de impresión
Generación de documentos estructurados para leer desde API
Contextos de Uso
DinaCode se puede utilizar en diferentes contextos dentro de Dinaup:
Algoritmos: Para crear lógica personalizada en procesos internos.
Scripts de Formularios: Manipulación y validación de datos de entrada.
Documentos Dinámicos: Generación de documentos personalizados en diversos formatos, Plantillas de impresion, documentos API, HTML,CSV,PDF,JSON,XML...
Primeros Pasos
Sintaxis Básica
DinaCode utiliza una sintaxis simple y legible. Las líneas de código se escriben de forma secuencial y se pueden utilizar estructuras de control como if
y for
.
Para que DinaCode se ejecute dentro de un documento dinámico, el código debe estar encerrado entre <!--:
y :-->
. Además, puede mezclarse con HTML u otros contenidos.
Ejemplos:
Declaración de Variables
Las variables en DinaCode se declaran especificando el tipo de dato (txt
o num
) seguido del nombre de la variable. Para utilizarlas posteriormente, se debe usar el espacio de nombres v.
.
Uso de variables:
Estructuras de Control
Condicionales
Bucles
Los bucles for
se escriben de la siguiente manera:
Espacios de Nombres y Variables
Espacios de Nombres
DinaCode utiliza diferentes espacios de nombres para organizar y acceder a variables y funciones:
v.
: Variables definidas por el usuario.F.
: Funciones integradas.C
: Campos de datos.R
: Campos relacionados (datos de tablas relacionadas, similar a unLEFT JOIN
) (Solo disponible en Algoritmos compuestos).D
: Datos especiales.S
: Constantes y enumeraciones del sistema.
Tipos de Datos
DinaCode soporta dos tipos de datos principales:
txt
: Cadenas de texto.num
: Números (pueden ser enteros o decimales).
Nota: Los valores booleanos se representan usando num
, donde 1
es verdadero
y 0
es falso
. Las fechas, fechas y horas, horas, Guids, se almacenan en formato txt
.
Funciones Integradas
DinaCode ofrece una amplia gama de funciones integradas disponibles a través del espacio de nombres F.
.
Funciones de Texto
Permiten manipular y analizar cadenas de texto.
F.Length(txt texto)
: Retorna la longitud de la cadena.F.Contains(txt texto, txt subcadena)
: Verifica sitexto
contienesubcadena
.F.ToUpper(txt texto)
: Convierte la cadena a mayúsculas.F.ToLower(txt texto)
: Convierte la cadena a minúsculas.F.Replace(txt texto, txt buscar, txt reemplazar)
: Reemplaza todas las ocurrencias.
Ejemplo:
Funciones Matemáticas
Para cálculos y operaciones numéricas.
F.Round(num valor, num decimales)
: Redondeavalor
al número de decimales especificado.F.Ceiling(num valor)
: Redondea hacia arriba al entero más cercano.F.Floor(num valor)
: Redondea hacia abajo al entero más cercano.
Ejemplo:
Funciones de Fecha y Hora
Manipulación y obtención de información sobre fechas y horas.
F.Day(txt fecha)
: Obtiene el día de la fecha.F.Month(txt fecha)
: Obtiene el mes de la fecha.F.Year(txt fecha)
: Obtiene el año de la fecha.
Ejemplo:
Funciones de Formato y Conversión
Para formatear y convertir tipos de datos.
F.FormatMoney(num valor)
: Formatea un número como moneda.F.FormatPercentage(num valor)
: Formatea un número como porcentaje.F.Cast_TextToNum(txt texto)
: Convierte una cadena a número.
Ejemplo:
Funciones de Interacción con el Usuario
Interacción directa con el usuario.
F.MsgBox(txt mensaje)
: Muestra un mensaje al usuario.F.PreguntarSiNo(txt pregunta)
: Realiza una pregunta de sí o no.
Ejemplo:
Funciones de WebClient
Para realizar solicitudes HTTP y comunicarse con APIs externas.
F.WebClient_Request(txt url, txt método, txt datos)
: Realiza una solicitud HTTP.
Ejemplo:
Funciones de Eventos y Triggers
Manejo de eventos dentro de Dinaup.
F.InitializeTrigger()
: Inicializa un trigger para un documento dinámico.F.TriggerIfFieldsFilled(num campoID)
: Configura el trigger para que solo se active si los campos especificados están llenos.
Funciones de Utilidades
Funciones generales de uso común.
F.NewPassword()
: Genera una contraseña aleatoria.F.NewGuid()
: Genera un identificador único global.
Funciones de Email
Para enviar correos electrónicos desde DinaCode.
F.EmailSend(txt destinatario, txt asunto, txt mensaje)
: Envía un correo electrónico.
Ejemplo:
Funciones de Metadatos
Manipulación de metadatos en documentos dinámicos.
F.MetaData_Set(txt clave, txt valor)
: Establece un metadato.F.MetaData_Read(txt clave)
: Lee el valor de un metadato.
Ejemplo:
Funciones de Gráficas
Creación y manipulación de gráficas.
F.Chart_New()
: Crea una nueva gráfica y devuelve su ID.F.Chart_AddSerie(num graficaID, txt nombreSerie)
: Añade una serie a la gráfica.F.Chart_AddValue(num graficaID, txt nombreSerie, num valor)
: Añade un valor a la serie especificada.F.Chart_ToHTML(num graficaID)
: Convierte la gráfica a código HTML.
Estructuras de Datos Avanzadas
Tablas de Datos (DataTable)
Las tablas de datos son estructuras que permiten almacenar y manipular conjuntos de datos en memoria.
Creación y Manipulación
Crear una tabla:
num tablaID = F.DataTable_New('Producto', 'Cantidad', 'Precio Unitario')Añadir una fila y establecer valores:
F.DataTable_AddRow(v.tablaID) F.DataTable_SetValueText(v.tablaID, 'Producto', 'Café') F.DataTable_SetValueNum(v.tablaID, 'Cantidad', 2) F.DataTable_SetValueMoney(v.tablaID, 'Precio Unitario', 5.00)
Renderización
Renderizar en HTML:
txt tablaHTML = F.DataTable_Build(v.tablaID, 'html|class="table table-striped"') F.Write(v.tablaHTML)Renderizar en JSON:
txt tablaJSON = F.DataTable_Build(v.tablaID, 'jsonaarray') F.Write(v.tablaJSON)
Ejemplos Prácticos
Generación de una tabla de productos HTML:
Diccionarios
Los diccionarios son estructuras de datos que almacenan pares clave-valor.
Diccionarios de Texto
Crear un diccionario de texto:
num diccionarioID = F.DicT_New() F.DicT_Add(v.diccionarioID, 'clave1', 'valor1') F.DicT_Add(v.diccionarioID, 'clave2', 'valor2')Obtener un valor:
txt valor = F.DicT_Get(v.diccionarioID, 'clave1')
Diccionarios Numéricos
Crear un diccionario numérico:
num diccionarioNumID = F.DicN_New() F.DicN_Add(v.diccionarioNumID, 'clave1', 100) F.DicN_Add(v.diccionarioNumID, 'clave2', 200)
Documentos Dinámicos
Generación de Documentos
Los documentos dinámicos permiten generar contenido personalizado en diferentes formatos, como HTML o PDF. Se puede mezclar DinaCode con HTML para crear documentos enriquecidos.
Uso de Buffers y Mezcla con HTML
Ejemplo de mezcla de DinaCode con HTML:
Incluyendo Contenido
Incluir otro documento dinámico:
F.Include(v.documentoID)Obtener el contenido de un documento dinámico:
txt contenido = F.GetDynamicDocumentContent(v.documentoID) F.Write(v.contenido)
Carga y Procesamiento de Datos
Carga de Listados de Datos
Permite cargar datos de secciones específicas.
Filtrado y Ordenación
Añadir un filtro:
F.DataListLoadAddFilter(S.Secciones.Clientes.ID, C.Clientes.Nombre, '=', 'Juan')Procesar los datos cargados:
F.ProcessDataList_Ini(S.Secciones.Clientes.ID) // Acceder a los campos con I.NombreDeLaSeccion.NombreDelCampo txt nombreCliente = I.Clientes.Nombre F.ProcessDataList_End
Funciones Avanzadas
Funciones de Google Maps
Permiten interactuar con Google Maps dentro de DinaCode.
Crear un mapa:
num mapaID = F.Maps_New()Añadir un punto clickable:
F.Maps_AddClickablePoint(v.mapaID, -34.6037, -58.3816, 'Buenos Aires')Convertir el mapa a HTML:
txt mapaHTML = F.Maps_ToHTML(v.mapaID) F.Write(v.mapaHTML)
Funciones de Intersecciones
Para calcular intersecciones entre intervalos.
Intersección de fechas:
num interseccion = F.Intersect_Date('2023-01-01', '2023-01-10', '2023-01-05', '2023-01-15')
Mejores Prácticas
Optimización de Código
La optimización del código es esencial para garantizar que tus scripts sean eficientes, mantenibles y fáciles de entender. A continuación, se presentan algunas prácticas recomendadas para optimizar tu código en DinaCode:
Evita redundancias y código innecesario: Revisa tu script para identificar secciones que realizan tareas similares y considera abstraerlas en funciones o reutilizar variables existentes. Esto reduce la complejidad y facilita el mantenimiento.
Utiliza
F.DataListLoad
para recuperar datos de forma eficiente: La manera más óptima de recuperar varios campos de un mismo registro es utilizandoF.DataListLoad
y, en caso de necesitar un solo registro, filtrar por su ID. Esta función está diseñada para cargar toda la información necesaria accedida medianteI.
en una sola operación (HIT), lo que minimiza las llamadas al servidor y mejora significativamente el rendimiento del script. Ejemplo de uso eficiente:// Declarar el ID del registro que deseas obtener num registroID = 123 // Cargar los datos de la sección específica filtrando por ID F.DataListLoad(S.Secciones.MiSeccion.ID, 1, 1) F.DataListLoadAddFilter(S.Secciones.MiSeccion.ID, C.MiSeccion.ID, '=', v.registroID) // Procesar los datos cargados F.ProcessDataList_Ini(S.Secciones.MiSeccion.ID) // Acceder a los campos del registro utilizando I. txt campo1 = I.MiSeccion.Campo1 num campo2 = I.MiSeccion.Campo2 // Realizar operaciones con los campos obtenidos F.Write(F.Concat('Campo1: ', v.campo1, ', Campo2: ', F.Cast_NumToText(v.campo2))) F.ProcessDataList_EndEn este ejemplo:
Carga eficiente: Al utilizar
F.DataListLoad
y filtrar por el ID del registro, se obtiene toda la información necesaria en una sola operación.Acceso a datos: Los campos del registro se acceden mediante
I.MiSeccion.Campo
, lo que es más rápido y limpio que realizar múltiples consultas individuales.Mejora del rendimiento: Reducir el número de operaciones y llamadas al servidor agiliza la ejecución del script y disminuye la carga en el sistema.
Planifica tus consultas y filtros: Cuando necesites trabajar con conjuntos de datos más grandes, utiliza filtros y ordenaciones para limitar la cantidad de datos procesados. Esto no solo mejora el rendimiento sino que también hace que tu script sea más eficiente en términos de recursos utilizados.
Optimiza los bucles y procesos iterativos: Evita colocar operaciones costosas dentro de bucles siempre que sea posible. Si necesitas realizar una operación repetidamente, considera si puedes moverla fuera del bucle o calcularla previamente.
Utiliza variables locales para almacenar resultados intermedios: Si un valor calculado se utiliza varias veces, almacénalo en una variable local (
v.
) en lugar de recalcularlo o volver a obtenerlo. Esto reduce el número de operaciones y facilita el mantenimiento del código.Mantén un estilo de código consistente: Sigue convenciones de nomenclatura y estructura para que tu código sea fácilmente entendible por otros desarrolladores. Un código limpio y consistente es más fácil de optimizar y depurar.
Implementando estas prácticas en tus scripts de DinaCode, mejorarás tanto el rendimiento como la calidad de tu código, lo que resultará en soluciones más efectivas y sostenibles a largo plazo.
Contacto y Soporte
Para obtener ayuda y soporte técnico, puede ponerse en contacto con el equipo de Dinaup a través de los canales oficiales.