Skip to Content

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.

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, o return) termina el script en esa línea:

¿ C.ReferenciaCliente = '' ? salir

En 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 forma

Funciones

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.

Funciones de DinaScript buscando redondear: F.FormatNumber en Conversión y F.Round, F.RoundUp y F.RoundDown en Matemáticas, con F.Round abierto y sus parámetros, y el botón Insertar en cada una
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ímiteQué implica
Línea a líneaCada instrucción completa en su línea.
Sin funciones propiasTodas son las del espacio F.. Para reutilizar lógica, ponla en otro script y llámalo con F.ExecuteScript.
Sin manejo de erroresNo hay try. Comprueba con if antes de operar, por ejemplo con F.IsEmpty_Text.
Sin recursiónUn script no se llama a sí mismo, ni por una cadena de F.ExecuteScript.

Scripts reales para copiar: Recetas de scripts.

En esta página