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 de los scripts, los algoritmos y los documentos dinámicos. Se ejecuta línea a línea, no distingue mayúsculas y acepta palabras clave en inglés y en español (if y si). Se escribe en el editor de FlexHub: Scripts, Documentos y Algoritmos.
Prefijos
Cada dato se lee con una letra y un punto. S. y V. valen en todo tipo de script; el resto depende 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, o return) termina el script en esa línea:
¿ C.ReferenciaCliente = '' ? salirEn un documento dinámico, salir corta el documento: sale lo escrito antes y nada de lo de después, ni el HTML de fuera de las islas. Así no hace falta envolver el documento entero en un if. Para explicar al lector por qué no sale, pon delante F.Notice.
Comentarios
@ 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. Al escribir F. en el editor salen todas con su descripción; el catálogo está en Funciones. El botón Funciones del editor abre el mismo catálogo con buscador e inserta la elegida en el cursor.
txt codigo = F.PadLeft('7', 5, '0', 0)
num redondeado = F.Round(v.importe, 2)
F.MsgBox('Guardado', 1)Comprobar en el editor compila el código sin guardarlo. En scripts y documentos también se comprueba solo al dejar de escribir.
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 son las del espacio F.. Para reutilizar lógica, ponla en otro script y llámalo con F.ExecuteScript. |
| Sin manejo de errores | No hay try. Comprueba con if antes de operar, por ejemplo con F.IsEmpty_Text. |
| Sin recursión | Un script no se llama a sí mismo, ni por una cadena de F.ExecuteScript. |
Scripts reales para copiar: Recetas de scripts.