Metadados Dinâmicos para Gestão de Processos no Plugin Obatala
Atenção
Os snippets de código neste documento são apenas modelos ilustrativos.
O plugin Obatala permite a criação e o gerenciamento de processos curatoriais no WordPress, utilizando metadados dinâmicos para atender às necessidades específicas de cada etapa. Esta documentação detalha como implementar e utilizar esses metadados dentro das interfaces de processos e etapas.
Conceito de Metadados Dinâmicos
Os metadados dinâmicos no Obatala são dados adicionais associados a cada etapa de um processo, armazenados como post_meta
no WordPress. Esses metadados representam campos de formulário que podem ser configurados dinamicamente.
Exemplo de Metadado Dinâmico: Estrutura do flowData
O flowData
é uma estrutura que organiza as etapas de um processo e seus campos personalizados. Veja um exemplo de como o flowData
é estruturado:
<?php
flowData = [
"nodes": [
{
"id": "Etapa 1",
"type": "customNode",
"node_status": "Finished",
"dragHandle": ".custom-drag-handle",
"position": { "x": 50, "y": 50 },
"data": {
"stageName": "Etapa 1",
"fields": [
{
"id": "text-1",
"type": "text",
"title": "Campo sem título",
"config": {
"label": "Texto",
"placeholder": "texto",
"required": true,
"minLength": 0,
"maxLength": 100,
"pattern": "",
"helpText": ""
}
}
],
"condition": []
},
"sector_obatala": "681b5e85378a94.20171523",
"sector_history": ["..."],
"tempSector": "...",
"measured": { "width": 259, "height": 341 },
"selected": false
}
],
"edges": [
{
"id": "xy-edge__Start-Etapa 1",
"source": "Start",
"target": "Etapa 1",
"type": "buttonedge"
}
]
];
?>
🔹 nodes: Etapas do processo
Cada etapa do processo contém os seguintes componentes:
-
id: Identificador único da etapa (ex: "Etapa 1").
-
type: Tipo do nó, como "customNode", "startNode" ou "endNode".
-
node_status: Estado atual do nó (ex: "Stopped", "Finished").
-
dragHandle: Classe CSS utilizada para permitir o arrasto do nó na interface.
-
position: Objeto com as coordenadas x e y para a posição do nó na tela.
-
data:
-
stageName: Nome da etapa (ex: "Etapa 1").
-
fields: Lista de campos personalizados da etapa, cada um com:
-
id: Identificador do campo (ex: "text-1").
-
type: Tipo do campo (ex: "text", "email", "number", "phone", "address").
-
title: Título do campo (visível na interface).
-
config: Configurações específicas do campo:
- label, placeholder, required, minLength, maxLength, pattern, helpText, min, max, step (dependendo do tipo).
-
-
condition: (opcional) Lógica de decisão condicional entre etapas (array vazio por padrão).
-
-
measured: Dimensões do nó para renderização, com width e height.
-
selected: Define se o nó está atualmente selecionado (true ou false).
-
sector_obatala: ID do setor atual vinculado à etapa.
-
sector_history: Lista com o histórico de setores pelos quais o nó passou.
-
tempSector: Setor temporário associado à etapa.
🔹 edges: Conexões entre etapas
As conexões definem o caminho entre os nós e a sequência do fluxo.
Cada item contém:
-
id: Identificador único da ligação (ex: "xy-edge__Etapa 1-Etapa 2").
-
source: ID da etapa de origem.
-
target: ID da etapa de destino.
-
type: Tipo da conexão (ex: "buttonedge").
🔹 Campos adicionais no meta
Além do nodes e edges, a estrutura atual também inclui os seguintes campos complementares:
-
status: Estado geral do processo (ex: ["Finished"]).
-
stageData: Dados submetidos nas etapas, com os campos preenchidos, data/hora (updateAt) e usuário responsável (user).
-
submittedStages: Mapeamento de quais etapas foram submetidas.
-
current_stage: Etapa atual do processo (ex: "Etapa 5").
-
groupResponsible: Grupo responsável pela execução (ex: "grupo1").
Implementação de Metadados Dinâmicos
Criando Metadados Dinâmicos nas Etapas
Nas etapas (ProcessModel), os metadados configurados são utilizados como modelos para os campos exibidos no processo.
Interface para Adicionar Metadados Dinâmicos
A interface de administração do WordPress permite aos usuários adicionar e configurar metadados dinâmicos para cada etapa, usando uma interface em React.
import React, { useState } from 'react';
function DynamicFieldConfigurator() {
const [fields, setFields] = useState([]);
const addField = (type) => {
const newField = {
id: Date.now(),
type: type,
placeholder: "",
name: "",
label: "",
value: "",
};
setFields([...fields, newField]);
};
return (
<div>
<button onClick={() => addField('text')}>Adicionar Campo de Texto</button>
<button onClick={() => addField('number')}>Adicionar Campo Numérico</button>
<div>
{fields.map(field => (
<div key={field.id}>
<label>{field.label}</label>
<input
type={field.type}
placeholder={field.placeholder}
name={field.name}
value={field.value}
onChange={(e) => {
field.value = e.target.value;
setFields([...fields]);
}}
/>
</div>
))}
</div>
</div>
);
}
Armazenando Metadados como post_meta
Após configurar os metadados, eles são salvos no WordPress como post_meta
. Cada campo é armazenado com uma chave única que combina o tipo e o identificador do campo.
<?php
function save_dynamic_fields($post_id, $fields) {
foreach ($fields as $field) {
$meta_key = "{$field['type']}_{$field['id']}";
update_post_meta($post_id, $meta_key, json_encode($field));
}
}
?>
Exibindo Metadados Dinâmicos na Interface de Gestão de Processos
Na interface de gestão de processos, os campos dinâmicos definidos nos metadados são renderizados conforme as configurações.
import React from 'react';
function DynamicFieldRenderer({ fields }) {
return (
<div>
{fields.map(field => (
<div key={field.id}>
<label>{field.label}</label>
<input
type={field.type}
placeholder={field.placeholder}
name={field.name}
value={field.value}
onChange={(e) => {
field.value = e.target.value;
}}
/>
</div>
))}
</div>
);
}
Fluxo de Trabalho para Metadados Dinâmicos
- Configuração de Metadados nas Etapas: O usuário define campos personalizados através da interface de configuração na etapa.
- Armazenamento de Metadados: Os campos configurados são salvos como
post_meta
. - Renderização de Campos no Processo: Durante a execução do processo, os campos dinâmicos são renderizados na interface.
- Salvamento de Dados do Processo: Os valores preenchidos são armazenados como
post_meta
.
Diagrama do Processo de Metadados Dinâmicos
classDiagram
class Processo {
+String nome
+Date data
+String descricao
+List~Etapa~ etapas
+String status
+Date prazo
+List~Metadado~ metadados
+List~Arquivo~ arquivos
}
class Etapa {
+String nome
+String descricao
+List~Metadado~ metadados
+List~Pessoa~ pessoas
+List~Comentario~ comentarios
+List~Arquivo~ arquivos
+List~Notificacao~ notificacoes
+String status
+Date prazo
+Setor setor
}
class Metadado {
+String tipo
+String placeholder
+String nome
+String label
+String value
}
Processo "1" -- "*" Etapa : contém
Etapa "1" -- "*" Metadado : define
Processo "1" -- "*" Metadado : utiliza
Conclusão
Os metadados dinâmicos no plugin Obatala oferecem flexibilidade para a configuração de processos curatoriais, permitindo a criação e personalização de campos conforme a necessidade de cada etapa. A estrutura flowData organiza visualmente o processo e simplifica a interação do usuário com o sistema, melhorando a gestão de dados curatoriais.