Saltar al contenido principal

Action Engine

Qué es Action Engine​

Action Engine es infraestructura compartida para ejecutar acciones de negocio mediante un contrato tipado.

DYONA define QUÉ acción ejecutar y CON QUÉ contexto.
La aplicación consumidora decide CÓMO ejecutarla.

Action Engine no conoce fetch ni Axios, URLs, endpoints, JWT ni autenticación, backend ni reglas de negocio. Esas decisiones permanecen en la aplicación consumidora.

DyonaAction​

type DyonaAction = {
id: string;
label: string;
icon?: string;
scope: 'global' | 'record';
requiresParameters?: boolean;
};
  • global se ejecuta sin requerir un record seleccionado.
  • record se ejecuta sobre un record y requiere context.record.
  • requiresParameters indica que debe proveerse un objeto de parámetros antes de ejecutar. Esto se desarrolla en Action Dialog.

DyonaActionContext​

type DyonaActionContext = {
sourceId?: string;
record?: Record<string, unknown>;
values?: Record<string, unknown>;
parameters?: Record<string, unknown>;
};

El contexto lleva la información que la aplicación necesita para ejecutar una acción. Una acción record requiere context.record; sourceId, values y parameters son contexto opcional entregado por quien llama.

Ejecutar una acción​

Este ejemplo completo usa una acción de record Aprobar pedido. El executor solo simula lógica de aplicación: no inventa backend ni endpoint.

import {
executeDyonaAction,
type DyonaActionExecutor,
} from '@typhonsoftware/dyona-form';

const action = {
id: 'approve-order',
label: 'Aprobar pedido',
scope: 'record',
} as const;

const context = {
sourceId: 'orders',
record: {id: 1024, status: 'pending'},
};

const executor: DyonaActionExecutor = async ({context}) => {
// La lógica de negocio de la aplicación va aquí.
return {
success: true,
message: 'Pedido aprobado',
data: {
id: context.record?.id,
},
};
};

const result = await executeDyonaAction(action, context, executor);

Flujo de ejecución​

DyonaAction
+
DyonaActionContext
↓
executeDyonaAction()
↓
DyonaActionExecutor
↓
DyonaActionResult

Acciones globales​

Una acción global usa el mismo contrato, pero no requiere un record.

const globalAction = {
id: 'generate-order-summary',
label: 'Generar resumen de pedidos',
scope: 'global',
} as const;

const globalExecutor: DyonaActionExecutor = async () => ({
success: true,
message: 'Resumen de pedidos generado',
data: {totalOrders: 42},
});

await executeDyonaAction(
globalAction,
{sourceId: 'orders'},
globalExecutor,
);

DyonaActionResult​

De forma introductoria, un resultado de acción puede incluir:

  • success: si la acción tuvo éxito.
  • message: un mensaje de resultado para que la aplicación presente.
  • fieldErrors: mensajes de backend por campo, indexados por nombre de campo.
  • data: datos devueltos específicos de la aplicación.
  • refresh: destinos que pueden necesitar actualizarse.

refresh y fieldErrors se explican con más detalle en Action Result + Refresh. Cuando este resultado se devuelve desde onSubmit o un onAction custom de DyonaForm, DyonaForm también presenta el feedback correspondiente de éxito, error general y error de campo.

Por qué importa​

Los componentes actuales y futuros de DYONA pueden reutilizar el mismo contrato de acciones sin acoplarse a un backend. Cada aplicación consumidora conserva su transporte, autenticación y lógica de negocio, mientras comparte un límite de ejecución consistente.

Continuar aprendiendo​