Construir um botão de ação personalizado
No NocoBase, ações (Actions) são botões dentro dos blocos usados para disparar lógica de negócio — por exemplo, "Novo", "Editar", "Excluir" etc. Este exemplo mostra como criar botões de ação personalizados com ActionModel, controlando os cenários de exibição com ActionSceneEnum.
É recomendável conhecer os seguintes tópicos antes; o desenvolvimento ficará mais tranquilo:
- Escreva seu primeiro plugin — criação do plugin e estrutura de diretórios
- Plugin — entrada do plugin e ciclo de vida
load() - FlowEngine → Extensão de ações — introdução básica a ActionModel e ActionSceneEnum
- i18n internacionalização — escrita de arquivos de tradução e uso de
tExpr()para tradução adiada
Resultado final
Vamos criar três botões de ação personalizados, correspondentes a três cenários de ação:
- Ação de nível de data table (
collection) — aparece na barra de ações no topo do bloco, ao lado do botão "Novo", por exemplo - Ação de nível de registro (
record) — aparece na coluna de ações de cada linha da tabela, ao lado de "Editar"/"Excluir", por exemplo - Aplicável aos dois cenários (
both) — aparece nos dois cenários
O código-fonte completo está em @nocobase-example/plugin-simple-action. Se quiser executar localmente para ver o resultado:
A seguir, montamos esse plugin do zero, passo a passo.
Passo 1: criar o esqueleto do plugin
Na raiz do repositório, execute:
Para mais detalhes, veja Escreva seu primeiro plugin.
Passo 2: criar os modelos de ação
Cada ação precisa declarar o cenário em que aparece, especificado pela propriedade static scene:
Ação de nível de data table
Crie src/client-v2/models/SimpleCollectionActionModel.tsx:
Ação de nível de registro
Crie src/client-v2/models/SimpleRecordActionModel.tsx:
Aplicável aos dois cenários
Crie src/client-v2/models/SimpleBothActionModel.tsx:
A estrutura dos três é idêntica — a diferença está apenas no valor de static scene e no texto do botão. Cada botão escuta o evento de clique via registerFlow({ on: 'click' }) e usa ctx.message para mostrar uma notificação, deixando claro para o usuário que o botão funcionou.
Passo 3: adicionar arquivos multilíngues
Edite os arquivos de tradução em src/locale/ do plugin:
Adicionar um novo arquivo de idioma pela primeira vez requer reiniciar a aplicação para ter efeito.
Para mais informações sobre escrita de arquivos de tradução e uso de tExpr(), veja i18n internacionalização.
Passo 4: registrar no plugin
Edite src/client-v2/plugin.tsx e use registerModelLoaders para carregamento sob demanda:
Passo 5: ativar o plugin
Após ativar, em "Configurar ações" do bloco de tabela você poderá adicionar esses botões de ação personalizados.
Código-fonte completo
- @nocobase-example/plugin-simple-action — exemplo completo dos três cenários de ação
Resumo
Capacidades usadas neste exemplo:
Links relacionados
- Escreva seu primeiro plugin — criar o esqueleto do plugin do zero
- Visão geral do FlowEngine — uso básico do FlowModel
- FlowEngine → Extensão de ações — ActionModel, ActionSceneEnum
- FlowEngine → Extensão de blocos — blocos personalizados
- FlowEngine → Extensão de campos — componentes de campo personalizados
- Component vs FlowModel — quando usar FlowModel
- Plugin — entrada do plugin e ciclo de vida load()
- i18n internacionalização — escrita de arquivos de tradução e uso de tExpr
- Documentação completa do FlowEngine — referência completa de FlowModel, Flow e Context

