Scripts

Qué es un script de sección en Flex, los eventos de EventoScriptE que lo disparan, los campos que lo acotan y sus columnas.

Un script es código DinaScript que el motor ejecuta cuando pasa algo en una ficha de una sección: al crear un registro, antes de guardarlo, al cambiar un campo. El evento es el disparador; el código es lo que ocurre. En la Flex API es el tipo FlexObjectTypes.Scripts.

Antes de empezar

  • Un script siempre pertenece a una sección. Se crea desde la ventana de la sección, en Contenido → Scripts, o desde el panel Scripts del diseñador: en los dos, pulsa Nuevo. La pantalla: Scripts.
  • El evento se elige al crear y no se cambia: para otro evento se crea otro script.
  • El código se comprueba con el mismo compilador que lo ejecuta, sin guardarlo: Flex_ValidateCodeAsync(code, sectionId, eventFields) en el SDK, Comprobar en FlexHub. Los demás parámetros de Flex_ValidateCodeAsync son para la fórmula de un algoritmo.

Las columnas de un script

Lo que publica Flex_GetEditablesAsync(FlexObjectTypes.Scripts):

ColumnaRótulo en FlexHubQué es
nombreTítuloEl nombre del script, del que sale su palabra clave. Mínimo 3 caracteres.
titulolegibleUn título alternativo que el motor no lee. FlexHub no lo muestra.
scriptCódigoEl código DinaScript, legible. El servidor lo traduce a su formato interno al guardar; si no compila, no lo crea.
iconoEl icono.
eventoCuándo se ejecutaEl valor de EventoScriptE. Solo se elige en el alta.
campoid, campoid2 a campoid10Campos que lo disparanHasta diez campos. Con campos en la lista, el script solo se ejecuta cuando cambia uno de ellos.

Los eventos

El evento es el enum EventoScriptE. El motor lo reparte en dos familias: los eventos de formulario, que se producen sobre la ficha entera y no admiten campos, y los eventos de campo, que se producen en un campo concreto.

Eventos de formulario

ValorEventoScriptECuándo se ejecuta
1Formulario_Iniciado_AgregarNuevoAl empezar a crear un registro, antes de que el usuario escriba nada.
23Formulario_Iniciado_AgregarNuevo_PostRellenadoImportacionAl crear un registro, después de rellenarlo desde una importación o desde un destinador.
16Formulario_CargadoCuando el formulario termina de cargar sus datos.
17Formulario_ValoresDeCatalogosEstablecidosCuando los catálogos del formulario ya están cargados.
4Formulario_TickRecalculoEn cada ciclo de recálculo del formulario.
12Formuario_RecalcularListadoAl refrescar el listado de líneas.
2Formulario_PreACeptarJusto antes de guardar. Es el evento para validar y bloquear el guardado.
3Formulario_PreCancelarJusto antes de descartar los cambios.
19Formulario_AtajoDeTecladoAl pulsar la combinación de teclas asociada (rótulo Formulario_Macro).
20Formulario_AutoGuardarAl autoguardar (rótulo Formulario_Cargado_AutoGuardado).

Eventos de campo

ValorEventoScriptECuándo se ejecutaCampos
5Campo_CambiadoEl valor del campo cambia.Cualquiera menos los de tipo Botón.
6Campo_PierdeFocoEl usuario sale del campo.Cualquiera menos Botón y Sí/No.
7Campo_GanaFocoEl usuario entra en el campo.Cualquiera menos Botón y Sí/No.
8Campo_CierraRelacionCambiosEfectuadosSe cierra la ficha relacionada con cambios guardados.Solo Relación.
9Campo_CierraRelacionCambiosNoEfectuadosSe cierra la ficha relacionada sin cambios.Solo Relación.
10Campo_CierraRelacionSe cierra la ficha relacionada.Solo Relación.
11Campo_PreAgregarRelacionJusto antes de agregar un registro relacionado.Solo Relación. Exige un campo.
13Campo_ComboAplicarFiltroAl aplicar el filtro de un desplegable.Solo Relación.
15Campo_ClickEl usuario pulsa el campo.Solo Botón. Exige un campo.

Elige los campos del tipo que admite el evento: con otro tipo, el script no se ejecuta. Los campos que exige Campo_Click y Campo_PreAgregarRelacion salen en rojo en FlexHub hasta que se ponen.

No pongas la palabra «destinador» en el título de un script: con ella, el script se ejecuta en Formulario_Iniciado_AgregarNuevo_PostRellenadoImportacion (23) y no en el evento elegido. Al renombrar, el servidor rechaza el guardado con Título no permitido; al crear, FlexHub pregunta antes.

Lo que se escribe en el código

PrefijoQué ofrece
C.Los campos de la sección, por su nombre interno, con las relaciones encadenadas un nivel. Se leen y se escriben.
A.Los algoritmos de la sección: devuelve el valor calculado.
D.Los datos del contexto, por ejemplo D.DatosEspeciales.FechaActual.
F.Las funciones del motor, con su descripción. El catálogo lo publica Flex_GetScriptFunctionsAsync(): unas 994 funciones, cada una con Name, Description, Category, ReturnFormat, Obsolete y ForAlgorithms. Ver Funciones.
v.Las preguntas de un informe, documento o algoritmo, por su nombre interno.

En el código se escribe Name de cada función, que es lo que el servidor devuelve al releer el script. Keyword es un alias interno que compila igual pero se ve distinto al releer. Las rutas válidas de una sección las publica Flex_GetRoutesAsync(prefix, sectionId, path).

Un script bien compilado no garantiza que haga lo que se espera. Sin errores en la barra del editor significa que el código compila; el panel lo dice entero: Sin errores. El código es válido; comprueba que hace lo que quieres. Pruébalo sobre un registro de prueba antes de dejarlo en una sección en uso.

Ejemplos

Recetas reales de scripts, con el evento que usan: Recetas de scripts. La sintaxis del lenguaje: DinaScript.

Siguiente: Informes.

En esta página