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

Tabela Campo

[!WARNING] ATENÇÃO Documento incompleto!

Tipos de campo

Um campo do tipo LINK pode receber algumas opções, como:

CRUD: Abre um crud filtrado pelo p1 com o v1, podendo ser em uma nova janela ou não.

'OPCOES' => 'type:CRUD;popup:1;crud:MARTE_REPORT_AX;p1:MARTE;v1:SEQ_DB;icon:fa fa-tags',

O tipo GET_URL, por padrão, abre a url informada.

'OPCOES' => 'type:GET_URL;url:{url_desejada};p1:SEQ_DB;v1:SEQ_DB;icon:fa fa-cloud',

É possível abrir uma url baseada no retorno de um entryPoint.

'OPCOES' => 'type:GET_URL;url:reposts/entryPoint/{entry_point_action};p1:SEQ_DB;v1:SEQ_DB;icon:fa fa-link',

O retorno do entryPoint deve seguir o expresso abaixo:

$this->outputValues['report'] = $link_relatorio;
// se for multiple
$this->outputValues['report_filters'] = ['inspecao' => [$inspecao_seq_db]];
// senao for multiple
$this->outputValues['report_filters'] = ['inspecao' => $inspecao_seq_db];

Caso não queira abrir em nova janela, informar popup:0 e então será chamada a url por AJAX.

Nesse tipo também é possível mudar a URL, sem ser por AJAX, causando um redirecionamento da página, para isso, informar ajaxify:0. Exemplo para fazer do download de um item de telemetria:

'OPCOES' => 'type:GET_URL;popup:0;ajaxify:0;url:marte/telematic/download/0;p1:SEQ_DB;v1:SEQ_DB;icon:fa fa-cloud',

Código no core:

        $ajaxify = 'ajaxify';
        $newWindow = true;
        if (isset($options['popup']) && $options['popup'] == 0) {
            $newWindow = false;
            if (isset($options['ajaxify']) && $options['ajaxify'] == 0) {
                $ajaxify = '';
            }    
        }

Com o uso do GET_URL, é possível configurar uma url que permite realizar o download de um relatório em formato pdf.

'OPCOES' => 'type:GET_URL;popup:0;ajaxify:0;url:reports/assistencia_tecnica;p1:format=pdf&pdfAction=download&&form[os][];v1:SEQ_DB;icon:fa fa-file-text-o',

Conforme exemplo anterior, é necessário utilizar popup:0 e ajaxify para evitar que uma nova janela sem conteúdo seja aberta, e, adicionar format=pdf e pdfAction=download no início da QueryParam 'p1', de modo a evitar erro de concatenação com o valor de 'v1' definido.

Outros tipos (falta documentar):

switch ($options['type']) {
    case 'CLONE':
        return static::linkCloneRow($action, $row);
    case 'GET_URL':
        return static::linkGetUrl($action, $row);
    case 'POST_URL':
        return static::linkPostUrl($action, $row);
    case 'GIS':
        return static::linkGis($action, $row);
    case 'CRUD':
    default:
        return static::linkCrud($action, $row);
}

PROC_ST

Exemplo de uso do campo do tipo PROC_ST: (usado para controles de processamento ou integração)

Dica de boa prática: Separar cada campo para uma responsabilidade. Por exemplo, se existe algum processo de integração então pode-se criar um campo INTEGRACAO_ST para esse controle.

Criando um campo PROC_ST:

INSERT INTO nfs_core_ds_tabela_campo (TABELA_NOME, NOME, SEQ, SYS, SEND_XMOVA, GRID, GRID_MOBILE, DESCRICAO, DESCRICAO_RESUMIDA, TIPO, OBRIGATORIO, TAMANHO, TAMANHO_DECIMAL, MASCARA, INSERT_UPDATE, DISABLED, HINT, LINK, VALIDACAO, OPCOES, VALOR_DEFAULT, VALIDACAO_VIEW, FILTRO_VIEW, TOOLTIP_MESSAGE, PROPERTIES) VALUES('EQP_BOLETIM', 'TESTE', 100, 0, 1, 1, 1, NULL, NULL, 'PROC_ST', NULL, NULL, NULL, NULL, 'IU', '0', NULL, NULL, NULL, '0:Pendente;1:Liberado Int.;4:Integrado;9:Processado ERP', NULL, NULL, NULL, NULL, NULL);

Quando rodar o DS serão gerados 3 campos:

DDL => ALTER TABLE APP_EQP_BOLETIM ADD COLUMN TESTE_ST CHAR(1) NULL DEFAULT '0';
DDL => ALTER TABLE APP_EQP_BOLETIM ADD COLUMN TESTE_DH TIMESTAMP NULL DEFAULT NULL;
DDL => ALTER TABLE APP_EQP_BOLETIM ADD COLUMN TESTE_DESC VARCHAR(250) NULL DEFAULT NULL;

Veja que no campo OPTIONS foi usada uma declaração de campo do tipo LOV1, que será usada no campo TESTE_ST. Exemplo: '0:Pendente;1:Liberado Int.;4:Integrado;9:Processado ERP'

O campo Descrição e Descrição Resumida ser usado e será adicionado ao valor padrão.

Se precisar mudar o texto completo ou alguma outra propriedade, pode-se usar o setFields na declaração na nfs_core_ds_tabela.

VALIDACAO

FIltra os dados de uma uma tabela fk(especificada como link), exemplo:

{
  "filterLink": [{
    "condition": [{
      "field": "RO",
      "operator": "=",
      "value": "0",
      "comparator": "AND"
    },
    {
      "field": "FLAG_PRODUCAO",
      "value": "1",
      "operator": "=",
      "comparator": ""
    }]
  }]
}

ira adicionar a condição ao filtrar por registros da FK: RO = 0 AND FLAG_PRODUCAO = 1

VALIDACAO_VIEW

A validação view é muito usada para exibir ou não um campo.

TABELA_NOMENOMEDESCRICAOTIPOVALIDACAO_VIEW
ITEM_INSPECAOFLAG_FERRAMENTA_MEDICAOUsa Ferramenta de Medição?BOOL
ITEM_INSPECAOFLAG_ROLETEÉ Rolete Inferior?BOOLFLAG_FERRAMENTA_MEDICAO:1

No caso acima o checkbox FLAG_ROLETE (É Rolete Inferior?) somente será exibido quando a FLAG_FERRAMENTA_MEDICAO (Usa Ferramenta de Medição?) for verdadeira, ou em outra palavras, marcada como SIM.

Logo também é verdade que qualquer VALIDACAO_VIEW que depende da FLAG_ROLETE será ou não exibida baseada na sua exibição, exemplo

TABELA_NOMENOMEDESCRICAOTIPOVALIDACAO_VIEW
ITEM_INSPECAOFLAG_FERRAMENTA_MEDICAOUsa Ferramenta de Medição?BOOL
ITEM_INSPECAOFLAG_ROLETEÉ Rolete Inferior?BOOLFLAG_FERRAMENTA_MEDICAO:1
ITEM_INSPECAOMINIMOMínimoDECIMALFLAG_ROLETE:0
ITEM_INSPECAORODANTE_FERRAMENTA_MEDICAOFerramenta de Medição (Tabela de Conversão)LOVNFLAG_ROLETE:0
ITEM_INSPECAOSTANDERStanderDECIMALFLAG_ROLETE:0

Então quando a FLAG_ROLETE não ser exibida baseado no valor falso da FLAG_FERRAMENTA_MEDICAO os campos MINIMO (Mínimo), RODANTE_FERRAMENTA_MEDICAO (Ferramenta de Medição (Tabela de Conversão)) e STANDER (Stander) também não são exibidos. Caso seja necessário desabilitar essa hierarquia tem que seguir os passos da VALIDACAO_VIEW sem validar seus dependentes na sua hierarquia.

VALIDACAO_VIEW sem validar seus dependentes na sua hierarquia

Para não usar essa hierarquia basta adicionar na coluna PROPERTIES da nfs_core_ds_tabela_campo a chave no json { "tree_validation": "false" }

Exemplo

TABELA_NOMENOMEDESCRICAOTIPOVALIDACAO_VIEWPROPERTIES
ITEM_INSPECAOFLAG_ROLETEÉ Rolete Inferior?BOOLFLAG_FERRAMENTA_MEDICAO:1{¶ "tree_validation": "false"¶}

Com isso as VALIDACAO_VIEW que dependem da FLAG_ROLETE são independetes dela ser exibida ou não.

FILTRO VIEW

Traz os registros do campo baseados no valor de outro campo.

FK

Filtro baseado em duas FKs

Filtra os registros de um campo, baseado no valor de outro campo do qual o mesmo possua relacionamento. Possuii a seguinte estrutura:

TABELAA:TABELAB

Exemplo:

  • Tenho a tabela OS contendo os campos FK CLIENTE e EQUIPAMENTO;
  • Quero que apenas os registros de EQUIPAMENTO que possuem relação com o CLIENTE definido na OS estejam disponiveis para seleção:
TABELA_NOMENOMELINKFILTRO_VIEWTIPO
OSCLIENTECLIENTE-FK
OSEQUIPAMENTOEQUIPAMENTOCLIENTE:EQUIPAMENTOFK

[!NOTE] Neste caso o sistema irá procurar na tabela EQUIPAMENTO pelo campo FK relacionado ao CLIENTE e filtrará os registros de acordo com o CLIENTE definido na OS

Tambem podemos definir o filtro para campos que possuem a tabelaA como link, como no caso de precisar filtrar o CLIENTE baseado no baseado no valor de AGENDAMENTO_SERVICO, usando o filtro CLIENTE:AGENDAMENTO_SERVICO

TABELA_NOMENOMELINKFILTRO_VIEWTIPO
OSAGENDAMENTO_SERVICOAGENDAMENTO_SERVICO-FK
OSCLIENTECLIENTECLIENTE:AGENDAMENTO_SERVICOFK

[!WARNING] Note que A TabelaB sempre sera utilizada como a tabela que possui vinculo entre as FKs

Filtro baseado no campo FK de uma tabela:

Filtra os registros de um campo, baseado no valor de um campo em uma outra tabela desde que este segundo campo seja do tipo FK e possua o mesmo LINK. Possui a seguinte estrutura:

FIELD:TABELA:NOME_DO_CAMPO

Exemplo:

  • Tenho a tabela MO_APT contendo os campos FK OPER e SUBATIDADE;
  • A tabela OPER possui o campo SUBATIVIDADE_PRODUCAO que por sua vez é do tipo FK e possui LINK para SUBATIDADE;
  • Na tabela MO_APT, quero que apenas os registros de SUBATIVIDADE que possuem relação com a OPER definido na MO_APT estejam disponiveis para seleção(relação feita através do campo SUBATIVIDADE_PRODUCAO):
TABELA_NOMENOMELINKFILTRO_VIEWTIPO
MO_APTOPEROPER-FK
MO_APTSUBATIVIDADESUBATIVIDADEFIELD:OPER:SUBATIVIDADE_PRODUCAOFK

Filtro por LOVN

Para filtrarmos os registros de um campo de uma tabela baseado no valor de um outro campo, sendo que ambos os campos possuem um relacionamento de "muitos para muitos(n x m)", podemos utilizar o por LOVN, sendo a sua estrura:

PREFIXO:TABELA_DE_RELACIONAMENTO:TABELA_B:TABELA_A
  • PREFIXO: Neste caso será "LOVN";
  • TABELA_DE_RELACIONAMENTO: Nome da tabela que possui o relacionamento entre a TABELA_A e a TABELA_B(TABELA_TABELAB);
  • TABELA_A: Tabela correspondente ao campo cujo os registros serão filtrados;
  • TABELA_B:Tabela correspondente ao campo cujo o valor será utilzado como filtro. {.grid-list}

Exemplo 1

Para filtrar as subatividades baseado no valor da atividade

TABELA_NOMENOMELINKFILTRO_VIEWTIPO
MO_APTATIVIDADEOPER-FK
MO_APTSUBATIVIDADESUBATIVIDADELOVN:OPER_SUBATIVIDADE:SUBATIVIDADE:ATIVIDADEFK

ou para filtra a atividade baseado no valor da subatividade

TABELA_NOMENOMELINKFILTRO_VIEWTIPO
MO_APTATIVIDADEOPERLOVN:OPER_SUBATIVIDADE:ATIVIDADE:SUBATIVIDADEFK
MO_APTSUBATIVIDADESUBATIVIDADE-FK

Outros Exemplos:

Supondo que haja uma tabela LOVN entre Fazenda e Gleba (APP_FAZENDA_N_GLEBA) e na tela de OS haja os campos para escolher a fazenda e gleba, sendo que após escolher a fazenda deve trazer somente as glebas que estão na LOVN daquela fazenda, para isso é somente fazer a seguinte configuração na linha da nfs_core_ds_tabela_campo onde está a GLEBA:

LOVN:FAZENDA_GLEBA:GLEBA:FAZENDA

MASCARA

Regex

Para usar regex, configure o valor do campo "máscara" da seguinte forma:

regex:<regex>

Exemplo:

regex:[a-z1-9]*

Tela

Configurar Botão de Ação (Integração/Extorno, Relatório)

Para configurar um botão de ação basta usar a tabela nfs_core_ds_field_action depois dar permissão para qual usuário/grupo deseja liberar.

Campos:

  • SEQ_DB: Gerado automaticamente, não é necessário inserir.
  • TABELA: Adicionar a tabela a qual a botão irá pertecenter.
  • DESCRICAO: Importante adicionar para diferenciar de outros botões.
  • CONFIG: Campo mais importane que é onde vai a configuração do botão que pode ter os seguintes
    • text: Title do botão
    • icon_class: Classe para adicionar o ícone do botão, veja mais aqui
    • url: Endereço por ser internet ou externo, é possível passar variáveis que estejam no corpo da página, veja mais no exemplo abaixo
    • button_class: Classe do botão veja mais aqui

Exemplo:

SEQ_DBTABELADESCRICAOCONFIGENTRY_POINTINS_DHATIVODELETEDNAME
1OSAção de Integração de OS{"text": "Novo Details","icon_class": "fa fa-plus","url" : "/details/new/{{ seqDb }}/{{ seqQii }}/{{ seqPanel }}","button_class": "btn-primary"}2019-07-30 18:42:5610

Resultado:

download.png

Galeria Simova

download.jpeg

A Galeria Simova foi criada para permitir que o usuário selecione tanto fotos do computador como fotos padrão do sistema cadastradas na nova tabela nfs_lib_image situada na nfs_cloud.

Alterações no Banco de Dados

  • nfs_lib_image: Inserida no nfs_cloud com os campos:
    • IMAGE: Base64 da imagem;
    • IMAGE_THUMBNAIL: Thumbnail da Imagem;
    • ENABLED: Imagem deve ser exibida (1) ou não (0);
    • CATEGORY: Categoria da imagem;
    • DESCRIPTION: Palavras chave utilizadas para filtrar as imagens da Galeria.

Alterações no CRUD - campo UPLOAD: Exibe a Galleria Simova ou utilizar o Drag and Drop files para arrastar arquivos, função galleryPreview(); - campo IMG_MOBILE: Padrão, seleciona arquivos do computador, função simplePreview().

[!WARNING] Na tabela nfs_ds_core_tabela_campo quando este for do tipo UPLOAD e se quer fazer o upload/download de arquivos que não sejam imagens precisa configurar o campo VALIDAÇÃO no formato desejado sem misturar extensões de imagem com extensões de arquivos Ex: **(0:*pdf;1:docx;2:doc;) E para que funcione, as extensões configuradas precisam estar também na tabela nfs_par_parametros nos campos: para arquivos de texto, e arquivos que não sejam imagens CRUD_EXTENSOES_PERMITIDAS_UPLOAD -> 0:txt;1:jpeg;2:png;3:docx para arquivos de imagens-> CRUD_EXTENSOES_UPLOAD_PERMITIDAS_VISUALIZACAO -> png:image/png;jpeg:image/jpeg

Melhorias

  • Barra de Ferramentas:

    • Rotação da imagem: Rotaciona a imagem em 90 graus tanto para a direi quanto para a esquerda. Necessário salvar.
    • Excluir imagem: Adicionar a tabela a qual a botão irá pertecenter.
    • Cancelar seleção: Importante adicionar para diferenciar de outros botões.

Exemplo:

download_(1).jpeg

Exemplo:

Imagem Selecionada:

download_(2).jpeg

Imagem Rotacionada:

image_rotated.e7af1e3f.jpeg Após rotacionar clicar em Salvar; Mensagem:

download_(3).jpeg

Estrutura

Fluxo da Aplicação: Ao passar pela criação do campo no CrudController é retornado um <button id="simova_gallery">;

selecionar_imagens.jpeg

O button é acionado através do evento de click no arquivo Gallery.js; Ao passar pelo evento de click é feita uma requisição para a GalleryController a fim de buscar as imagens dafault cadastradas na nfs_lib_image; Populando a simovagallery.twig e retornado para a requisição esta preenchida; Ao retornar (conteúdo) é inserido no modal que é carregado.

gallery_image_padrao.43af8289.jpeg

Modal: Contém duas abas: Importar Imagem | Biblioteca do Sistema Na aba Biblioteca do Sistema contém as fotos (base64) cadastradas na tabela nfs_lib_image, enquanto em "Importar Imagem" abre o seletor de arquivos do computador.

gallery_image_computer.632d4451.jpeg

Como é feito o preview das imagens selecionadas

Na tabela nfs_core_ds_tabela_campo existe o campo VALIDACAO que é preenchido da seguinte maneira quando se refere a um campo que fará upload de arquivos ou imagens exemplo:

0:*gif;1:*png;2:*jpg

Neste campo são definidas os tipos de extensões que o campo permitirá, quando estiver nos formatos de arquivos de imagem, como os do exemplo acima será feito uma tratativa no sistema verificando o tipo de campo:

-> caso seja UPLOAD será exibida a galeria simova (galleryPreview); -> caso seja IMG_MOBILE será exibido apenas o botão para selecionar arquivos do computador (simplePreview)

Quando forem definidos exempo:

0:*txt;1:*xml;2:*docx;3:*html

Neste caso será feita a verificação destes campos e o preview será de uma imagem padrão, localizada em public/assets/img/file-selected.png

Logo, se não estiver aparecendo imagem ao selecionar algum arquivo de acordo com os exemplos acima deve-se verificar se a extensão do arquivo bate com as descritas neste documento ou definidas na tabela nfs_core_par_parametros nos campos CRUD_EXTENSOES_UPLOAD_PERMITIDAS_VISUALIZACAO e CRUD_EXTENSOES_PERMITIDAS_UPLOAD.

Configurações

1-Criar a tabela nfs_lib_image no Banco de Dados NFS_CLOUD

Executar o comando abaixo:

    USE NFS_CLOUD;

    create table nfs_lib_image (
    SEQ_DB bigint(20) unsigned not null auto_increment,
    IMAGE mediumblob null,
    IMAGE_THUMBNAIL blob null,
    ENABLED tinyint(1) null,
    CATEGORY varchar(250) null,
    DESCRIPTION varchar(100) null,
    PRIMARY KEY (`SEQ_DB`)
    ) ENGINE = InnoDB default CHARSET = utf8 collate = utf8_general_ci;

2-Campo adicionado na tabela nfs_upload:

Executar o comando abaixo:

    select distinct concat('ALTER TABLE ', t.TABLE_SCHEMA, '.', '`nfs_upload` ADD LIB_IMAGE_SEQ_DB INT NULL')
    from information_schema.TABLES t
    where t.TABLE_NAME = 'nfs_core_sys_tipo_campo';

3-Campo LIB_IMAGE_SEQ_DB deve ser adicionado também na nfs_core_ds_tabela_campo:

Executar o comando abaixo:

    select distinct concat('INSERT INTO ', t.TABLE_SCHEMA, '.', '`nfs_core_ds_tabela_campo` (TABELA_NOME, NOME, SEQ, SYS, SEND_XMOVA, GRID, GRID_MOBILE, DESCRICAO, DESCRICAO_RESUMIDA, TIPO, OBRIGATORIO, TAMANHO, TAMANHO_DECIMAL, MASCARA, INSERT_UPDATE, DISABLED, HINT, LINK, VALIDACAO, OPCOES, VALOR_DEFAULT, VALIDACAO_VIEW, FILTRO_VIEW, TOOLTIP_MESSAGE, PROPERTIES) VALUES (\'UPLOAD\', \'LIB_IMAGE_SEQ_DB\', 1, 0, 1, 1, 1, \'SEQ LIB IMAGE\', \'NFS_CLOUD SEQ LIB IMAGE\', null, null, null, null, null, \'IU\', 0, null, null, null, null, null, null, null, null, null)')
    from information_schema.TABLES t
    where t.TABLE_NAME = 'nfs_core_sys_tipo_campo';

CRUD da Galeria

ADICIONAR/EDITAR:

Para adicionar imagens na Galeria, por enquanto deve ser inserido diretamente no NFS_CLOUD -> nfs_lib_image através dos comandos INSERT e UPDATE no Banco de Dados, tendo como padrão os seguintes campos:

    SEQ_DB BIGINT(21) UNSIGNED NOT null AUTO_INCREMENT, | AUTO INCREMENT
    IMAGE MEDIUMBLOB NULL,                           | BASE64 || NULL
    IMAGE_THUMBNAIL BLOB NULL,                 | BASE64 Redimensionado || NULL
    ENABLED TINYINT(1) NULL                           | ATIVO (0 || 1) || NULL
    CATEGORY VARCHAR(250) NULL                      | NOME, COR, TIPO...
    DESCRIPTION VARCHAR(100) NULL                      | NOME, COR, TIPO...

EXCLUIR:

Basta deletar a linha desejada através do comando DELETE diretamente no Banco de Dados.

ARQUIVOS RELACIONADOS:

    Gallery.scss
    Gallery.js
    GalleryController.php
    base_layout.twig (contém o modal-gallery)
    simovagallery.twig (contém o conteúdo do modal-gallery)

Observações

  • Imagens Trazidas: Só serão trazidas imagens ENABLED = 1, e com o BASE64 IS NOT NULL;

Botões dos campos de data e hora

A configuração é feita na tabela core_par_parametros as chaves são separadas para os campos de data e campos de data e hora.

Campos tipo: DH, DHS (data e hora)


OPCAO_DATA_AGORA

Preenche a data e hora atuais.

Conteúdo: F:agora;DESC:Agora

OPCAO_DATA_HOJE

Preenche a data atual.

Conteúdo: F:hoje;DESC:Hoje

OPCAO_DATA_ONTEM

Preenche a data de ontem.

Conteúdo: F:ontem;DESC:Ontem

Campos tipo: DATA, DATE (data)


OPCAO_DATA_HOJE

Preenche a data atual.

Conteúdo: F:hoje;DESC:Hoje

OPCAO_DATA_1_DIA

Preenche a data atual + 24horas.

Conteúdo: F:addHours;P:24;DESC:Hoje + 1

OPCAO_DATA_2_DIA

Preenche a data atual + 48horas.

Conteúdo: F:addHours;P:48;DESC:Hoje + 2

inputs-data.png

Config

INSERT INTO suzano_sal_bobagro.nfs_core_par_parametros
(EMPRESA, FILIAL, `LOCAL`, NOME, CONTEUDO, TIPO)
VALUES(1, 9999, 9999, 'OPCAO_DATA_1_DIA', 'F:addHours;P:24;DESC:Hoje + 1', 1);
INSERT INTO suzano_sal_bobagro.nfs_core_par_parametros
(EMPRESA, FILIAL, `LOCAL`, NOME, CONTEUDO, TIPO)
VALUES(1, 9999, 9999, 'OPCAO_DATA_2_DIAS', 'F:addHours;P:48;DESC:Hoje + 2', 1);
INSERT INTO suzano_sal_bobagro.nfs_core_par_parametros
(EMPRESA, FILIAL, `LOCAL`, NOME, CONTEUDO, TIPO)
VALUES(1, 9999, 9999, 'OPCAO_DATA_AGORA', 'F:agora;DESC:Agora', 1);
INSERT INTO suzano_sal_bobagro.nfs_core_par_parametros
(EMPRESA, FILIAL, `LOCAL`, NOME, CONTEUDO, TIPO)
VALUES(1, 9999, 9999, 'OPCAO_DATA_HOJE', 'F:hoje;DESC:Hoje', 1);
INSERT INTO suzano_sal_bobagro.nfs_core_par_parametros
(EMPRESA, FILIAL, `LOCAL`, NOME, CONTEUDO, TIPO)
VALUES(1, 9999, 9999, 'OPCAO_DATA_ONTEM', 'F:ontem;DESC:Ontem', 1);

Usando o setFields para manipular campos e suas propriedades:

Exemplo:

	"setFields": {
          "PROC_ST": {
              "SYS": 0,
				"DESCRICAO":"Teste de gravação",
				"TIPO":"LOV1",
				"LOV":{"0":"Pendente","1":"Liberado Int.","4":"Integrado","9":"Processado ERP"}
          },
          "PROC_DESC": {
              "SYS": 0,
			"DISABLED":1
          },
          "ID": {
				"DESCRICAO":"ID DO BOLETIM"
          }
     }

Vídeo de exemplo:

🔗 Configurar Campo FK para Receber Múltiplos Valores

Para permitir que um campo do tipo **FK ** aceite múltiplos valores, é necessário configurar a propriedade allowMultipleFk como true no JSON armazenado na coluna CONFIG da tabela nfs_core_ds_tabela_campo.


🗂️ Local da Configuração

  • Tabela: nfs_core_ds_tabela_campo
  • Coluna: CONFIG (tipo JSON)
  • Propriedade: allowMultipleFk

✅ Exemplo de Configuração

Se o campo já possuir outras configurações, como customStyle ou recognition, a propriedade allowMultipleFk deve ser incluída dentro do mesmo objeto JSON:

{
  "customStyle": {
    "color": "blue",
    "fontSize": "14px"
  },
  "recognition": {
    "pattern": "^[0-9]+$"
  },
  "allowMultipleFk": true
}