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 usa C. o las funciones F.AddElement_* y F.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íaRutaSegmentos
SectionsS.Sections.<Seccion>.<Atributo>3
FieldsS.Fields.<Seccion>.<Campo>.<Atributo>4
DestinadoresS.Destinadores.<Seccion>.<Destinador>.<Atributo>4
AlgorithmsS.Algorithms.<Algoritmo>.<Atributo>3
ReportsS.Reports.<Categoria>.<Informe>.<Atributo>4
ColumnsS.Columns.<Categoria>.<Informe>.<Columna>.<Atributo>5
ScriptsS.Scripts.<Script>.<Atributo>3
ScriptsSectionsS.ScriptsSections.<Seccion>.<Script>.<Atributo>4
DynamicDocumentsS.DynamicDocuments.<Categoria>.<Documento>.<Atributo>4
IntervalsS.Intervals.<Intervalo>2
EnumsS.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:

ObjetoAtributos
SecciónID, Titulo, EtiquetaSingular, EtiquetaPlural, EtiquetaTextoPrincipal, Descripcion, Icono, EsBase, ContieneListado, EsSeccionLista, ReferenciaSeccionBase, ReferenciaSeccionLista, ReferenciaSeccionListadora
CampoID, Nombre, Etiqueta, Obligatorio, Indexado, ReferenciaCampoBase
AlgoritmoID, Nombre, Categoria, Subcategoria, DecimalesCalculo, DecimalesVisibles
InformeID, Nombre, Descripcion, Icono, Subcategoria, AltoDeFila, NoVisibleParaElUsuario, ReferenciaImpresionPorDefecto
ColumnaID
ScriptID, Nombre
Documento dinámicoID, 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.Etiqueta

Secciones 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é necesitasRuta
La referencia del campo, para una funciónS.Fields.VentasIngresos.ReferenciaCliente.ID
El valor en el registro que recorresI.VentasIngresos.ReferenciaCliente
El valor en el formulario abiertoC.ReferenciaCliente
El valor en la pregunta Facturav.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 if

Un 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.

En esta página