DinaScript
El lenguaje de los scripts, algoritmos y documentos dinámicos de Flex: prefijos, tipos txt y num, operadores, condicionales, bucles y comentarios.
DinaScript es el lenguaje que ejecutan los scripts, los algoritmos y los documentos dinámicos. El intérprete lee línea a línea, no distingue mayúsculas y acepta if y si.
Antes de empezar
- Un sitio donde escribirlo: FlexHub → Scripts o FlexHub → Documentos. Las pantallas están en Scripts y Documentos.
- El catálogo de funciones
F.: Funciones.
Prefijos
Cada dato se lee con una letra y un punto. S. y V. valen para todos los tipos de script; el resto dependen del contexto.
| Prefijo | Qué devuelve | Página |
|---|---|---|
F. | Una función del motor. | Funciones |
S. | El esquema: secciones, campos, informes, enumeraciones, por su nombre interno. | Esquema (S.) |
C. | El registro abierto en el formulario. Se lee y se escribe. | Registro del formulario (C.) |
R. | El registro de la sección relacionada, en scripts con sección secundaria. | Registro del formulario (C.) |
I. | El registro que recorres dentro de F.ProcessDataList_Ini y F.ProcessDataList_End. | Espacios I., D. y A. |
D. | El entorno: D.SesionActual, D.EmpresaActual, D.DatosEspeciales, D.AlgoritmosDeBusqueda. | Espacios I., D. y A. |
A. | El valor de un algoritmo. | Espacios I., D. y A. |
V. | Una variable del script o una pregunta. | Esta página |
Variables
Dos tipos. txt guarda texto, fechas, identificadores y valores de relación; num guarda enteros, decimales y booleanos (1 verdadero, 0 falso). Se declaran una vez y después se leen y escriben con v.:
num total = 0
v.total = 100
txt saludo = 'Hola'
v.saludo = 'Buenos dias'El texto va entre comillas simples. Las preguntas de un documento, informe o algoritmo son variables v. con el nombre interno de la pregunta, ya rellenas al ejecutar.
Una variable de relación admite jerarquización con punto: v.Factura.ReferenciaCliente.CuentaDeCorreoPrincipal lee el correo del cliente de la factura. Una variable de texto sin sección detrás no la admite (error B-912).
Operadores
| Tipo | Operadores |
|---|---|
| Aritméticos | +, -, *, /. El + también une textos. |
| Comparación | =, <>, <, >, <=, >= |
| Lógicos | y, o. and y or se aceptan igual. |
| Pertenencia | en (in), con D.AlgoritmosDeBusqueda en algoritmos. |
No existen ==, !=, not ni %.
if v.total > 100 y v.cliente <> ''
v.descuento = 5
endCondicionales
if v.total > 100
v.total = v.total - 10
elseif v.total > 50
v.total = v.total - 5
else
v.total = v.total + 10
end| Palabra | Alternativas |
|---|---|
if | si |
elseif | |
else | |
end | end if, endif |
Una condición con una sola acción cabe en una línea: ¿ abre, ? separa.
¿ v.total = 0 ? v.total = 100
¿ C.ReferenciaProducto <> '' ? v.bloquearRecurso = 1Bucles
for v.variable to tope repite hasta next. La variable ya tiene que existir; el bucle no la declara.
num i = 1
num suma = 0
for v.i to 10
v.suma = v.suma + v.i
nextexit for sale del bucle. Para recorrer registros no hay for: se usan F.DataListLoad, F.ProcessDataList_Ini y F.ProcessDataList_End con el prefijo I.:
F.DataListLoad(S.Sections.ComprasGastos.ID, 1, 200)
F.DataListLoadAddFilter(S.Sections.ComprasGastos.ID, S.Fields.ComprasGastos.FechaContable.ID, '>=', v.Fecha_Desde)
F.ProcessDataList_Ini(S.Sections.ComprasGastos.ID)
F.Write(F.Concat('Factura: ', I.ComprasGastos.NumeroDeFactura))
F.ProcessDataList_EndSalir
salir (o fin) termina el script en esa línea. Es la comprobación habitual al principio de un script, para terminar cuando no tiene nada que hacer:
¿ C.ReferenciaCliente = '' ? salirComentarios
@ o /// al principio de la línea. Después de código no comentan nada: la línea entera se ejecuta.
@ Los pedidos anulados no computan
/// Segunda formaFunciones
Se llaman con F. y devuelven un valor o hacen algo:
txt codigo = F.PadLeft('7', 5, '0', 0)
num redondeado = F.Round(v.importe, 2)
F.MsgBox('Guardado', 1)Al escribir F. en el editor de FlexHub salen las funciones con su descripción. El catálogo completo, por categorías: Funciones.
El editor
Los scripts, los documentos dinámicos y las fórmulas de los algoritmos se escriben en el mismo editor de FlexHub. Comprobar pasa el código por el compilador sin guardarlo; en un script y en un documento, el editor lo comprueba además medio segundo después de dejar de escribir. Los fallos salen en el panel de debajo: al pulsar uno, el cursor salta a su línea. Con el código válido, la barra de estado dice Sin errores.
El botón del final de la barra de estado pone el editor en pantalla completa; se vuelve con Esc o con el mismo botón. Ayuda abre los ejemplos de DinaScript en un script y la ayuda del editor de documentos en un documento.
En un documento dinámico
El código va entre <!--: y :--> dentro del HTML. Un bloque puede tener varias líneas y un if puede abrir en un bloque y cerrar en otro:
<!--: if v.Factura.CondicionesDePago <> '' :-->
<p><!--: F.WriteText(v.Factura.CondicionesDePago) :--></p>
<!--: end if :-->Límites
| Límite | Qué implica |
|---|---|
| Línea a línea | Cada instrucción completa en su línea. |
| Sin funciones propias | Todas las funciones son las del espacio F.. Reutiliza con F.ExecuteScript. |
| Sin manejo de errores | No hay try. Comprueba con if antes de operar. |
| Sin recursión | Un script no se llama a sí mismo. |
Siguiente: Esquema (S.). Recetas reales: Recetas de scripts.