Saltar al contenido

Alcance de las expresiones

Las expresiones aparecen por todo wasabi: la etiqueta o la visibilidad de un campo, una validación, la condición de una compuerta, un mapeo entre pasos, la habilitación de un botón de acción, un filtro en una vista. Dondequiera que se ejecute una, puede ver un alcance: el conjunto de valores que tiene permitido referenciar. Lo que está en el alcance depende de dónde se ejecuta la expresión, y eso es lo que hace que las expresiones se sientan contextuales en lugar de globales.

Algunas cosas están disponibles casi en todas partes: los datos sobre los que trata la expresión (los valores de los campos de un formulario, o los campos del registro que se está procesando), las funciones integradas y seguras (fechas como today y now; operaciones como round, min y max; totales como sum, count y promedio; y una biblioteca de utilidades de listas y texto), y las referencias a fuentes de datos compartidas.

Dentro de un formulario, una expresión ve los valores de los campos de ese formulario, y el usuario y la sesión actuales. Cuando el formulario forma parte de un proceso en marcha, como una tarea de un flujo de trabajo, su alcance se amplía para incluir el proceso mismo:

  • La tarea: su id, su etiqueta y su tipo, a quién está asignada, cuándo comenzó y cuándo vence.
  • El proceso: su id, su nombre, su versión y sus variables en marcha, los datos que el proceso lleva de un paso a otro.
yaml
# un campo que solo aparece mientras el proceso sigue abierto
visible: =workflow.variables.status == 'open'

Fuera de un proceso, el alcance de la tarea y del proceso simplemente no está, y el mismo formulario sigue funcionando por sí solo.

En un browser o una acción sobre un documento, las expresiones deciden qué pueden hacer las personas. Las condiciones de habilitación y visibilidad de los botones de acción, y las anulaciones condicionales de un browser, pueden leer el rol del usuario, el registro que se está viendo, los valores actuales del formulario y si el formulario tiene cambios sin guardar o válidos:

yaml
# una acción que solo ve un gerente
aprobar: { label: Aprobar, message: aprobar, visible: =user.role == 'manager' }

Dentro de un paso de un flujo de trabajo, los mapeos y las condiciones de las compuertas ven los datos que el proceso lleva consigo. Los pasos en bucle también ven el elemento actual y su posición, y un paso que ejecutó un subproceso ve los resultados que recolectó. Estos se ejecutan en el servidor y son deterministas, así que no acceden al usuario ni a la sesión interactivos; cuando una decisión depende del rol de alguien, eso se expresa en la capa del formulario y del browser, o se lleva al proceso como una variable.

Como el alcance siempre es explícito y cerrado, las expresiones se mantienen seguras y predecibles: una expresión solo puede leer lo que su contexto le proporciona deliberadamente, nunca el estado arbitrario de la aplicación.