Esta documentación está en fase de desarrollo y puede contener errores.

Espacio de Nombres (S.)

Referencia del espacio S. de DinaScript para acceder al esquema de Flex (secciones, campos, relaciones), a la sesión del usuario y a las variables de preguntas en tiempo de ejecución.

El espacio S. (Sistema) es la puerta de acceso al esquema de Dinaup Flex desde DinaScript. Con él consultas la estructura y configuración de tu sistema —secciones, campos, relaciones, algoritmos, informes— durante la ejecución de algoritmos, scripts y documentos dinámicos.

La idea clave: en vez de escribir a mano el identificador de un campo o una sección, lo referencias por su nombre. Así tu código no depende de identificadores internos y sigue funcionando aunque la configuración cambie.

S. es solo lectura: te da metadatos y referencias para construir consultas y lógica. Para recorrer registros usas el iterador I., y para crear o modificar datos, las funciones del espacio F..


Para qué sirve

Las rutas S. te permiten escribir código que se adapta a la configuración actual del sistema. Con ellas puedes:

  • Referenciar una sección o un campo por su nombre, sin manejar identificadores a mano.
  • Pasar esas referencias a las funciones de F. que cargan o filtran datos (F.DataListLoad, F.DataListLoadAddFilter, F.ProcessDataList_Ini).
  • Leer propiedades de un elemento del esquema: nombre, tipo de dato, si es obligatorio, visible o bloqueado.
  • Acceder a informes, columnas, algoritmos y documentos configurados para reutilizarlos desde código.
  • Resolver valores de enumeraciones e intervalos definidos en tu sistema.

Cómo se escribe una ruta S.

Una ruta S. se lee de izquierda a derecha, de lo general a lo concreto: primero la categoría, luego el elemento y, si aplica, la propiedad.

S.<Categoría>.<Elemento>[.<Subelemento>].<Atributo>
ParteQué esEjemplo
CategoríaEl tipo de elemento del esquema.Sections, Fields, Reports
ElementoEl nombre del elemento concreto.Productos, Clientes
SubelementoUn nivel más fino cuando lo hay (un campo dentro de una sección, una columna dentro de un informe).Activo, Total
AtributoLa propiedad que quieres leer. El más habitual es ID.ID, Nombre

El uso más frecuente es obtener el ID de una sección o un campo para pasarlo a una función:

// Cargar los productos activos y recorrerlos
F.DataListLoad(S.Sections.Productos.ID, 1, 999999)
F.DataListLoadAddFilter(S.Sections.Productos.ID, S.Fields.Productos.Activo.ID, '=', 1)

F.ProcessDataList_Ini(S.Sections.Productos.ID)
    F.Write(F.Concat("Producto: ", I.Productos.Nombre))
F.ProcessDataList_End

Acceso a secciones y campos

Las dos categorías que más usarás son S.Sections y S.Fields.

S.Sections — Secciones

Accede a una sección por su nombre y obtén sus propiedades o, sobre todo, su ID.

S.Sections.NombreSeccion.ID          // Identificador de la sección
S.Sections.NombreSeccion.Nombre      // Nombre de la sección

S.Fields — Campos

Accede a un campo dentro de una sección. La ruta lleva primero la sección y luego el campo, porque un mismo nombre de campo puede existir en varias secciones.

S.Fields.NombreSeccion.NombreCampo.ID         // Identificador del campo
S.Fields.NombreSeccion.NombreCampo.Nombre     // Nombre del campo

Con estas dos categorías construyes la mayoría de cargas y filtros de datos: la sección dice de dónde lees y el campo dice sobre qué filtras u ordenas.

F.DataListLoadAddFilter(S.Sections.Ventas.ID, S.Fields.Ventas.Estado.ID, '=', "pendiente")
F.DataListLoadSetOrder(S.Sections.Ventas.ID, S.Fields.Ventas.Fecha.ID, 0)

Campos de relación

Cuando una sección se relaciona con otra (una venta apunta a un cliente, una línea apunta a un producto), esa conexión vive en un campo de relación de la sección. Lo referencias como cualquier otro campo:

// El campo "Cliente" de la sección "Ventas" guarda la relación con el cliente
S.Fields.Ventas.Cliente.ID

Una vez estás recorriendo registros con el iterador, ese campo te da el valor de la relación del registro actual:

F.ProcessDataList_Ini(S.Sections.Ventas.ID)
    txt clienteDeLaVenta = I.Ventas.Cliente
    // ...usa el valor para cargar o cruzar datos del cliente
F.ProcessDataList_End

S.Fields... te da la referencia del campo (para filtrar, ordenar o leer su configuración). El valor de ese campo en un registro concreto lo obtienes con el iterador (I.Seccion.Campo) mientras recorres una lista.


La sesión y el usuario actual

Tu código se ejecuta dentro de una sesión: la de la persona o el proceso que lanza el algoritmo, script o documento. A través de S. puedes leer datos de esa sesión para adaptar el comportamiento a quién está ejecutando.

El dato más útil es el usuario de la sesión actual, que te permite, por ejemplo, personalizar un saludo, filtrar lo que ve cada persona o registrar quién lanzó una acción.

S.UsuarioSesionActual          // Usuario que está ejecutando ahora mismo

Usa el usuario de la sesión para personalizar y acotar: mostrar solo lo relevante para quien ejecuta o dejar constancia del autor de una operación. La sesión la gestiona Dinaup; tu código solo la consulta.


Variables de preguntas (v.X)

Un algoritmo o documento puede preguntar datos al usuario antes de ejecutarse (una fecha, una opción, un texto). Cada respuesta queda disponible en tu código como una variable del espacio v., usando el nombre que diste a la pregunta.

// La pregunta "FechaInicio" se lee como una variable v.
txt desde = v.FechaInicio

if v.IncluirInactivos = 1
    F.Write("Incluyendo registros inactivos")
end if

Las variables v. son las mismas que usas para tus variables locales dentro del script (ver DinaScript): las creas con txt o num y las lees con el prefijo v.. La diferencia es que, en el caso de una pregunta, el valor inicial lo aporta el usuario al ejecutar.

Combina las preguntas con S.: el usuario responde qué quiere ver (un estado, un rango) en una variable v., y tú usas las referencias S.Fields... para filtrar exactamente por ese campo. Así un mismo algoritmo sirve para muchos casos sin tocar el código.


Catálogo de categorías

Además de secciones y campos, S. cubre el resto del esquema de Flex. Todas siguen el mismo patrón: nombre del elemento y, normalmente, .ID para usarlo en una función.

CategoríaPara quéPatrón
S.SectionsSecciones del sistema.S.Sections.NombreSeccion.ID
S.FieldsCampos (incluidos los de relación) de una sección.S.Fields.NombreSeccion.NombreCampo.ID
S.AlgorithmsAlgoritmos configurados.S.Algorithms.NombreAlgoritmo.ID
S.ReportsInformes, organizados por categoría.S.Reports.Categoria.NombreInforme.ID
S.ColumnsColumnas de un informe.S.Columns.Categoria.NombreInforme.NombreColumna.ID
S.DynamicDocumentsPlantillas de documentos dinámicos.S.DynamicDocuments.Categoria.NombreDocumento.ID
S.IntervalsIntervalos personalizados.S.Intervals.NombreIntervalo
S.ScriptsScripts globales.S.Scripts.NombreScript.ID
S.ScriptsSectionsScripts asociados a una sección concreta.S.ScriptsSections.NombreSeccion.NombreScript.ID
S.EnumsValores de enumeraciones del sistema.S.Enums.NombreEnum.Valor

Patrón de uso típico

Estas piezas encajan así en un caso real: el usuario responde una pregunta, tú resuelves las referencias del esquema con S., cargas los datos con F. y los recorres con I..

El usuario responde la pregunta

El algoritmo pregunta un estado y guarda la respuesta en v.Estado.

Referencias del esquema con S.

Usas S.Sections y S.Fields para apuntar a la sección y al campo correctos, sin manejar identificadores a mano.

Carga y filtro con F.

Pasas esas referencias a F.DataListLoad y F.DataListLoadAddFilter para traer solo lo que pidió el usuario.

Recorrido con I.

Recorres el resultado con F.ProcessDataList_Ini y lees cada registro con el iterador I..

// 1. El usuario respondió la pregunta "Estado"
// 2. + 3. Referencias del esquema y carga filtrada
F.DataListLoad(S.Sections.Ventas.ID, 1, 999999)
F.DataListLoadAddFilter(S.Sections.Ventas.ID, S.Fields.Ventas.Estado.ID, '=', v.Estado)

// 4. Recorrido del resultado
F.ProcessDataList_Ini(S.Sections.Ventas.ID)
    F.Write(F.Concat(I.Ventas.Numero, " — ", I.Ventas.Cliente))
F.ProcessDataList_End

Preguntas frecuentes


DinaScriptFunciones (espacio F.)SeccionesAlgoritmosInformes

On this page