Esquema (S.)
Las rutas S. de DinaScript: secciones, campos, destinadores, algoritmos, informes, columnas, scripts, documentos, intervalos y enumeraciones, con su forma exacta y sus atributos.
El prefijo S. resuelve un elemento del esquema por su nombre interno y devuelve uno de sus atributos, casi siempre el ID. Con él, el código no lleva identificadores escritos a mano y sigue funcionando tras los cambios de configuración.
Antes de empezar
- Los nombres internos de tus secciones y campos: los publica FlexHub y los ves al escribir
S.en el editor. Ver Secciones y Campos. S.solo lee. Para escribir usaC.o las funcionesF.AddElement_*yF.API_*.
La forma de una ruta
Cada categoría exige un número fijo de segmentos. Con uno de menos o de más, el intérprete devuelve un error de jerarquización.
| Categoría | Ruta | Segmentos |
|---|---|---|
Sections | S.Sections.<Seccion>.<Atributo> | 3 |
Fields | S.Fields.<Seccion>.<Campo>.<Atributo> | 4 |
Destinadores | S.Destinadores.<Seccion>.<Destinador>.<Atributo> | 4 |
Algorithms | S.Algorithms.<Algoritmo>.<Atributo> | 3 |
Reports | S.Reports.<Categoria>.<Informe>.<Atributo> | 4 |
Columns | S.Columns.<Categoria>.<Informe>.<Columna>.<Atributo> | 5 |
Scripts | S.Scripts.<Script>.<Atributo> | 3 |
ScriptsSections | S.ScriptsSections.<Seccion>.<Script>.<Atributo> | 4 |
DynamicDocuments | S.DynamicDocuments.<Categoria>.<Documento>.<Atributo> | 4 |
Intervals | S.Intervals.<Intervalo> | 2 |
Enums | S.Enums.<Enumeracion>.<Valor> | 3 |
En Reports, Columns y DynamicDocuments el segmento de categoría se lee pero el elemento se busca solo por su nombre interno. Un elemento eliminado da error aunque exista: por ejemplo La sección 'X' está eliminada. Código de error (B-890).
F.DataListLoad(S.Sections.ComprasGastos.ID, 1, 200)
F.DataListLoadAddFilter(S.Sections.ComprasGastos.ID, S.Fields.ComprasGastos.FechaContable.ID, '>=', v.Fecha_Desde)
F.DataListLoadSetOrder(S.Sections.ComprasGastos.ID, S.Fields.ComprasGastos.FechaContable.ID, 0)Atributos
El último segmento es un atributo del objeto, con el nombre interno que le da el catálogo de clasificadores del servidor. Los principales:
| Objeto | Atributos |
|---|---|
| Sección | ID, Titulo, EtiquetaSingular, EtiquetaPlural, EtiquetaTextoPrincipal, Descripcion, Icono, EsBase, ContieneListado, EsSeccionLista, ReferenciaSeccionBase, ReferenciaSeccionLista, ReferenciaSeccionListadora |
| Campo | ID, Nombre, Etiqueta, Obligatorio, Indexado, ReferenciaCampoBase |
| Algoritmo | ID, Nombre, Categoria, Subcategoria, DecimalesCalculo, DecimalesVisibles |
| Informe | ID, Nombre, Descripcion, Icono, Subcategoria, AltoDeFila, NoVisibleParaElUsuario, ReferenciaImpresionPorDefecto |
| Columna | ID |
| Script | ID, Nombre |
| Documento dinámico | ID, Nombre, KeyWord, Categoria, Subcategoria, TipoDeFuncionAPI, ReferenciaSeccion |
Todos admiten además UltimaModificacionFecha_UTC y, salvo la columna, ReferenciaUsuario. Un atributo que no existe devuelve El atributo 'X' no se ha detectado como válido. Una sección no tiene Nombre: su texto es Titulo.
txt etiqueta = S.Sections.ComprasGastos.EtiquetaPlural
txt campo = S.Fields.ComprasGastos.FechaContable.EtiquetaSecciones y campos
S.Sections.<Seccion>.ID dice de dónde se lee; S.Fields.<Seccion>.<Campo>.ID dice por qué campo se filtra, ordena o escribe. El valor de ese campo en un registro concreto no sale de S.: sale de I. mientras recorres, de C. en el formulario o de una variable de relación con punto.
| Qué necesitas | Ruta |
|---|---|
| La referencia del campo, para una función | S.Fields.VentasIngresos.ReferenciaCliente.ID |
| El valor en el registro que recorres | I.VentasIngresos.ReferenciaCliente |
| El valor en el formulario abierto | C.ReferenciaCliente |
El valor en la pregunta Factura | v.Factura.ReferenciaCliente |
Un campo de relación se referencia igual que cualquier otro. Para escribir en un alta:
F.AddElement_Begin(S.Sections.ActividadEnTareasDeProyectos.ID)
F.AddElement_SetValue(S.Fields.ActividadEnTareasDeProyectos.ReferenciaTarea.ID, C.ID)
F.AddElement_SetValue(S.Fields.ActividadEnTareasDeProyectos.ReferenciaProyecto.ID, C.ReferenciaProyecto)
F.AddElement_Commit()Enumeraciones
S.Enums.<Enumeracion>.<Valor> devuelve el entero de un valor de lista. Los nombres son los legibles sin espacios ni signos, en minúsculas o en mayúsculas: el intérprete no las distingue.
txt fecha = F.Cast_DateToText(v.Factura.FechaExpedicion, S.Enums.formatofecha.diamesaño)
if C.TipoFactura = S.Enums.tipofactura.rectificativo
C.ReferenciaNumeracionSerie = C.ReferenciaTipoDeVenta.ReferenciaNumeracionRectificativas
end if
if C.ReferenciaEstado.EstadoTarea = S.Enums.tareaestado.enproceso
C.EnProceso = 1
end ifUn valor que no existe devuelve El valor 'X' no se ha detectado como válido. Código de error (E-5069).
Intervalos
S.Intervals.<Intervalo> devuelve el ID de un intervalo personalizado. Se usa como valor de un filtro * sobre un campo de fecha en F.DataListLoadAddFilter y con las funciones InDynamicRange_Date e InDynamicRange_DateTime.
Documentos, informes y scripts
Las categorías que apuntan a otros objetos sirven para enlazarlos desde el código:
@ El cuerpo del correo es otro documento dinámico
F.MetaData_Set('email_body', S.DynamicDocuments.Correos.FacturaPlantilladeEmail.ID)
@ Incluir el JSON de la factura en la plantilla de impresión
const data = <!--: F.Include(S.DynamicDocuments.API.FacturaJSON.ID, v.Factura) :-->;
@ Ejecutar otro script
F.ExecuteScript(S.Scripts.<Script>.ID)Quién ejecuta
S. no lleva la sesión. El usuario y la empresa que ejecutan están en D.SesionActual y D.EmpresaActual, en Espacios I., D. y A..
Siguiente: Registro del formulario (C.). Funciones de carga: Datos y listados.