FlowEngine
En NocoBase, FlowEngine es el motor que impulsa la configuración visual. Los bloques, los campos y los botones de acción de la interfaz de NocoBase se gestionan a través de FlowEngine: su renderizado, su panel de configuración y la persistencia de la configuración.

Para los desarrolladores de plugins, FlowEngine ofrece dos conceptos centrales:
- FlowModel: modelo de componente configurable. Renderiza la UI y gestiona las props.
- Flow: proceso de configuración. Define el panel de configuración y la lógica de tratamiento de datos del componente.
Si su componente debe aparecer en los menús "Añadir bloque / campo / acción" o necesita admitir configuración visual desde la interfaz, hay que envolverlo con un FlowModel. Si no necesita estas capacidades, basta con un componente React común. Consulte Component vs FlowModel.
¿Qué es FlowModel?
A diferencia de un componente React común, un FlowModel no solo se encarga de renderizar la UI: también gestiona el origen de las props, la definición del panel de configuración y la persistencia de la configuración. En resumen: las props de un componente común son fijas, mientras que las de un FlowModel se generan dinámicamente a través de un Flow.
Para profundizar en la arquitectura general de FlowEngine, consulte la Documentación completa de FlowEngine. A continuación se explica cómo usarlo desde la perspectiva del desarrollador de plugins.
Ejemplo mínimo
Crear y registrar un FlowModel se hace en tres pasos:
1. Heredar de la clase base e implementar renderComponent
renderComponent() es el método de renderizado de este modelo, equivalente al render() de un componente React. tExpr() se utiliza para traducción diferida, ya que define() se ejecuta al cargar el módulo y i18n aún no está inicializado. Consulte Context → Capacidades comunes → tExpr.
2. Registrar en el Plugin
3. Usarlo en la interfaz
Tras el registro, una vez iniciado el plugin (consulte la Visión general del desarrollo de plugins para activarlo), cree una página nueva en la interfaz de NocoBase y haga clic en "Añadir bloque": verá su "Hello block" disponible.

Añadir opciones de configuración con registerFlow
Renderizar no es suficiente: el verdadero valor de un FlowModel está en que sea configurable. Con registerFlow() puede añadir un panel de configuración para que el usuario modifique las propiedades desde la interfaz.
Por ejemplo, un bloque que permite editar su contenido HTML:
Puntos clave:
on: 'beforeRender': indica que este Flow se ejecuta antes del renderizado, escribiendo los valores del panel enthis.propsantes de pintar.uiSchema: define la UI del panel de configuración con formato JSON Schema. Ver UI Schema.handler(ctx, params):paramsson los valores que el usuario ha introducido en el panel; mediantectx.model.propsse trasladan al modelo.defaultParams: valores por defecto del panel.
Patrones habituales de uiSchema
uiSchema se basa en JSON Schema. v2 mantiene compatibilidad con esta sintaxis, pero su uso es limitado: principalmente describe formularios en el panel de configuración del Flow. Para el renderizado en tiempo de ejecución, se recomienda usar componentes Antd directamente, sin pasar por uiSchema.
Aquí los patrones más habituales (referencia completa en UI Schema):
Cada campo se envuelve con 'x-decorator': 'FormItem', lo que añade automáticamente título y disposición.
Parámetros de define()
FlowModel.define() configura los metadatos del modelo y controla cómo aparece en los menús. En el desarrollo de plugins, lo más usado es label, pero admite más parámetros:
La mayoría de plugins solo necesitan label:
Si necesita controlar la ordenación o ocultarlo, añada sort y hide:
Elección de la clase base de FlowModel
NocoBase ofrece varias clases base de FlowModel; elija según lo que vaya a extender:
Como regla general: para una tabla, use TableBlockModel (la más usada, lista para usar); para un renderizado totalmente personalizado, use CollectionBlockModel o BlockModel; para un campo, use FieldModel; para un botón de acción, use ActionModel.
Enlaces relacionados
- Extensión de bloques: desarrollar bloques con la familia BlockModel.
- Extensión de campos: desarrollar campos personalizados con FieldModel.
- Extensión de acciones: desarrollar botones de acción con ActionModel.
- Component vs FlowModel: ¿no sabe cuál usar?
- Definición de Flow: parámetros completos de
registerFlowy lista de eventos. - Documentación completa de FlowEngine: referencia completa de FlowModel, Flow y Context.
- Inicio rápido de FlowEngine: construir desde cero un componente de botón orquestable.
- Visión general del desarrollo de plugins: introducción general al desarrollo de plugins.
- UI Schema: referencia de la sintaxis de
uiSchema.

