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.

PrefijoQué devuelvePá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

TipoOperadores
Aritméticos+, -, *, /. El + también une textos.
Comparación=, <>, <, >, <=, >=
Lógicosy, o. and y or se aceptan igual.
Pertenenciaen (in), con D.AlgoritmosDeBusqueda en algoritmos.

No existen ==, !=, not ni %.

if v.total > 100 y v.cliente <> ''
    v.descuento = 5
end

Condicionales

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
PalabraAlternativas
ifsi
elseif
else
endend 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 = 1

Bucles

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
next

exit 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_End

Salir

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 = '' ? salir

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 forma

Funciones

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ímiteQué implica
Línea a líneaCada instrucción completa en su línea.
Sin funciones propiasTodas las funciones son las del espacio F.. Reutiliza con F.ExecuteScript.
Sin manejo de erroresNo hay try. Comprueba con if antes de operar.
Sin recursiónUn script no se llama a sí mismo.

Siguiente: Esquema (S.). Recetas reales: Recetas de scripts.

En esta página