Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

CONFIG JSON — referência (Crud All Custom)

Objeto gravado na coluna CONFIG de nfs_crud_all_custom. O assistente em /admin/crud-all-custom monta a maior parte; use a aba JSON para chaves avançadas ou cópia entre ambientes.

Esqueleto mínimo (no admin: Aplicar esqueleto vazio ou template minimal via API):

{
  "ui": {
    "enabled": true,
    "mode": "cards",
    "fields_layout": "compact",
    "fields_columns": 2,
    "actions_in_header": true
  },
  "main": {
    "title": "",
    "fields": []
  },
  "children": [],
  "replicate_from_main_enabled": true,
  "replicate_field_pairs": [],
  "replicate_excluded_fields": []
}

Metadados (colunas da tabela, não dentro do JSON)

ColunaObrigatórioNotas
MAIN_TABLESimUppercase no save
TITULOSim
SLUGNãoÚnico por (EMPRESA, FILIAL, LOCAL, MAIN_TABLE)
DESCRICAONão
EMPRESA, FILIAL, LOCALSim (default 9999)Escopo EFL
ATIVOSim0 = não resolve no runtime
CONFIGSimJSON válido

ui — apresentação

ChaveValoresRuntime
enabledboolean (default true)Desliga customização visual se false
modecards (default), classicclassicNfsCrudFormAll sem wrapper cards (blocos azuis)
fields_layoutcompact, gridSó com mode=cards; grid força 1 coluna de campos
fields_columns2cards + compact; runtime fixa em 2 colunas
actions_in_headerbooleanSalvar/Limpar no topo (cards)
page.accentcor #hexDestaque no cards (via ui.page no assistente)
page.background, header_background, header_text, header_border#hexOpcional; sanitizados no PHP
page.meta_iconFontAwesomeEx.: fa-database
page.show_table_metabooleanExibe nome da tabela principal no header
sections.defaultcores padrão dos cardsFallback de filhas
sections.draftestilo card rascunhoBorda tracejada
sections_by_tablemapa por nome de tabelaSobrescreve título/cores por filha

Regras no assistente (crudAllCustomUiRules.js): com mode=classic, fields_layout, fields_columns, actions_in_header, accent, promotedChildTableKeys e fundos de card não aplicam no runtime. Com fields_layout=grid, fields_columns e promotedChildTableKeys também não se aplicam.


main — tabela principal

ChaveTipoDescrição
titlestringTítulo do card / seção
iconstringFontAwesome (fa-wrench ou fa fa-wrench)
header_background#hexCabeçalho do card (mode cards)
header_text, body_background, border_color#hexOpcional
fieldsstring[]Whitelist de NOME de campo; [] = todos
layoutobjectReservado / extensões futuras

children[] — tabelas no formulário

Cada item:

{
  "table": "OS_TECNICO",
  "title": "Técnico",
  "icon": "fa-user",
  "header_background": "#e87a6f",
  "fields": ["SEQ_DB_TECNICO", "INI_DH"]
}
ChaveDescrição
tableNome no DS. Se está em FK_DOWN da principal → vínculo no save; senão → extra_tables
title, icon, header_backgroundCard no mode cards
fieldsWhitelist; vazio = todos os campos da tabela

Ordem do array = ordem dos cards (childTableOrder).

Filhas do DS não listadas → hidden_children (não aparecem).


promotedChildTableKeys

Tipo: string[] — nomes de tabelas filhas que, no layout cards + compact, ficam na coluna direita quando há conteúdo na principal.

ConfiguraçãoComportamento
Omitido ou []Todas as filhas elegíveis podem ir à direita
Lista parcialSó as marcadas à direita; as demais ficam abaixo da OS

Exemplo: duas filhas OS_TECNICO e EQP_APT, com promotedChildTableKeys: ["OS_TECNICO"] — após preencher a OS, OS_TECNICO tende à coluna direita e EQP_APT abaixo.

Em ui.mode=classic ou ui.fields_layout=grid, esta chave é ignorada no runtime.


Replicação

ChaveClássico EPCustom assistenteCustom JSON
replicate_from_main_enabledSimCheckboxSim
replicate_modeSimRadio ask / auto / on_clickSim
replicate_field_pairsSimPares explícitos OS → filhaSim
replicate_field_mapSimImportado/convertido para pares no editorSim (retrocompat)
replicate_field_map_scopeSim— (só JSON, retrocompat)Sim
replicate_excluded_fieldsSim— (só JSON)Sim

replicate_mode

ValorComportamento
autoCópia ao mudar a OS (pares do CONFIG e campos com FILTRO_VIEW/gatilho). Valor já editado manualmente na filha, diferente da OS, não é sobrescrito de novo
askDiálogo Sim/Não antes de aplicar cópia — vale para pares e para FILTRO_VIEW/gatilho, mesmo sem replicate_field_pairs. Após Não, não envia o valor na filha no save; mudar de novo a OS ou o campo na filha pode perguntar outra vez. Campos de edição contínua (texto, número, data/hora, multiselect) confirmam ao concluir a interação (blur/fechar LOV)
on_clickCópia só ao interagir com campo pareado na filha; FILTRO_VIEW não preenche sozinho. Se a OS mudar depois, pode perguntar atualização

Se inválido ou ausente no PHP: auto. Valor inicial no assistente ao criar registro: ask.

FILTRO_VIEW (DS) vs replicate_field_pairs

OrigemO que faz
replicate_field_pairsPares explícitos OS → filha definidos no CONFIG
FILTRO_VIEW + gatilho no DSFilha segue valor canônico da OS (ex.: LOV restrito ao cliente da OS). Exige replicate_from_main_enabled: true; respeita replicate_mode

Não é necessário repetir no JSON um par que já está coberto só pelo FILTRO_VIEW, mas o par pode coexistir (o diálogo no modo ask considera os dois).

replicate_field_pairs

Lista explícita de pares main + childTable + childField:

"replicate_field_pairs": [
  { "main": "DESCRICAO", "childTable": "EQP_APT", "childField": "INI_DH_ONLINE" }
]

Somente os pares listados participam da cópia. Campos com mesmo nome não são pareados automaticamente.

replicate_field_map (retrocompat)

Objeto legado: chave = campo na principal, valor = campo na filha.

"replicate_field_map": {
  "DESCRICAO": "INI_DH_ONLINE"
}

Ao abrir no manager, esse formato é convertido para replicate_field_pairs.

replicate_field_map_scope (retrocompat)

Limita um par a filhas específicas (chave CAMPO_MAIN:CAMPO_FILHA):

"replicate_field_map_scope": {
  "DESCRICAO:INI_DH_ONLINE": ["EQP_APT"]
}

Filhas fora da lista não recebem aquele mapeamento, mesmo tendo o campo destino. No manager, o escopo é representado após conversão para pares explícitos.

replicate_excluded_fields

Lista de nomes homônimos que não devem replicar.


Outras chaves

ChaveUso
extra_tablesTabelas avulsas além das declaradas em children[] (raro; assistente deriva de children)
enable_mobile_tablesBoolean; comportamento mobile. O assistente remove ao salvar — incluir via JSON se necessário

Chaves ignoradas (aviso na validação)

  • workflow
  • child_relations

Não são lidas pelo runtime; a validação pode emitir aviso.


Exemplo completo (cards + duas filhas)

{
  "ui": {
    "enabled": true,
    "mode": "cards",
    "fields_layout": "compact",
    "fields_columns": 2,
    "actions_in_header": true,
    "page": { "accent": "#1ab7bc", "meta_icon": "fa-wrench" }
  },
  "main": {
    "title": "Ordem de serviço",
    "icon": "fa-wrench",
    "header_background": "#f0ad4e",
    "fields": ["DESCRICAO", "STATUS"]
  },
  "children": [
    {
      "table": "OS_TECNICO",
      "title": "Técnico",
      "icon": "fa-user",
      "header_background": "#5bc0de",
      "fields": []
    },
    {
      "table": "EQP_APT",
      "title": "Equipamento",
      "fields": ["EQP_SEQ_DB"]
    }
  ],
  "promotedChildTableKeys": ["OS_TECNICO"],
  "replicate_from_main_enabled": true,
  "replicate_mode": "ask",
  "replicate_field_pairs": [
    {
      "main": "DESCRICAO",
      "childTable": "EQP_APT",
      "childField": "INI_DH_ONLINE"
    }
  ],
  "replicate_excluded_fields": [],
  "replicate_field_map_scope": {}
}

Equivalência com Entry Point CrudAll

Conversão de nfs_entry_point (CrudAll) para CONFIG:

Entry Point (CrudAll)Custom CONFIG
main_hidden_fieldsInverso de main.fields[]
children_fields[T].hidden_fieldsInverso de children[].fields
hidden_childrenFilhas FK não listadas em children[]
extra_tablesFilhas em children[] sem FK + extra_tables explícito
replicate_field_pairsPares explícitos main + childTable + childField
Demais chaves replicate_*Mesmos nomes no JSON

Validação

POST /admin/crud-all-custom/validate retorna:

TipoExemplos
errorsMAIN_TABLE inexistente no DS, JSON inválido, falha no preview de UI
warningsCampo inexistente no DS, chave workflow / child_relations, children[].table vazio

Alertas abaixo do editor após Validar CONFIG. Com errors, corrija antes de usar no runtime.