Action Engine
O que é Action Engine
Action Engine é uma infraestrutura compartilhada para executar ações de negócio por meio de um contrato tipado.
DYONA define QUAL ação executar e COM QUAL contexto.
A aplicação consumidora decide COMO executá-la.
Action Engine não conhece fetch nem Axios, URLs, endpoints, JWT nem autenticação, backend nem regras de negócio. Essas decisões permanecem na aplicação consumidora.
DyonaAction
type DyonaAction = {
id: string;
label: string;
icon?: string;
scope: 'global' | 'record';
requiresParameters?: boolean;
};
globalé executada sem exigir um record selecionado.recordé executada sobre um record e exigecontext.record.requiresParametersindica que um objeto de parâmetros deve ser fornecido antes da execução. Isso é desenvolvido em Action Dialog.
DyonaActionContext
type DyonaActionContext = {
sourceId?: string;
record?: Record<string, unknown>;
values?: Record<string, unknown>;
parameters?: Record<string, unknown>;
};
O contexto carrega as informações de que a aplicação precisa para executar uma ação. Uma ação record exige context.record; sourceId, values e parameters são contexto opcional fornecido por quem chama.
Executar uma ação
Este exemplo completo usa uma ação de record Aprovar pedido. O executor apenas simula lógica da aplicação: não inventa backend nem endpoint.
import {
executeDyonaAction,
type DyonaActionExecutor,
} from '@typhonsoftware/dyona-form';
const action = {
id: 'approve-order',
label: 'Aprovar pedido',
scope: 'record',
} as const;
const context = {
sourceId: 'orders',
record: {id: 1024, status: 'pending'},
};
const executor: DyonaActionExecutor = async ({context}) => {
// A lógica de negócio da aplicação fica aqui.
return {
success: true,
message: 'Pedido aprovado',
data: {
id: context.record?.id,
},
};
};
const result = await executeDyonaAction(action, context, executor);
Fluxo de execução
DyonaAction
+
DyonaActionContext
↓
executeDyonaAction()
↓
DyonaActionExecutor
↓
DyonaActionResult
Ações globais
Uma ação global usa o mesmo contrato, mas não exige um record.
const globalAction = {
id: 'generate-order-summary',
label: 'Gerar resumo de pedidos',
scope: 'global',
} as const;
const globalExecutor: DyonaActionExecutor = async () => ({
success: true,
message: 'Resumo de pedidos gerado',
data: {totalOrders: 42},
});
await executeDyonaAction(
globalAction,
{sourceId: 'orders'},
globalExecutor,
);
DyonaActionResult
Em nível introdutório, um resultado de ação pode incluir:
success: se a ação teve êxito.message: uma mensagem de resultado para a aplicação apresentar.fieldErrors: mensagens de backend por campo, indexadas pelo nome do campo.data: dados retornados específicos da aplicação.refresh: destinos que podem precisar ser atualizados.
refresh e fieldErrors são explicados com mais detalhes em Action Result + Refresh. Quando este resultado é retornado por onSubmit ou um onAction customizado de DyonaForm, DyonaForm também apresenta o feedback correspondente de sucesso, erro geral e erro de campo.
Por que isso importa
Os componentes atuais e futuros do DYONA podem reutilizar o mesmo contrato de ações sem se acoplarem a um backend. Cada aplicação consumidora mantém seu transporte, autenticação e lógica de negócio, compartilhando um limite de execução consistente.
Continue aprendendo
- Data Sources — outro contrato de infraestrutura compartilhada.
- Testar Actions no Lab →