Voltar para o blog
Desenvolvimento Fluig4 min de leitura

Fluig: não fixe documentId entre ambientes

Código que funciona em homologação e quebra em produção? O documentId e a tabela do formulário mudam entre ambientes. Veja como resolver em tempo de execução.

O processo passa em todos os testes de homologação. Na produção, o dataset volta vazio ou grava no lugar errado. Uma causa frequente é um número escrito no código: o documentId de um formulário ou o nome da tabela física dele.

O que muda entre ambientes

Esses identificadores são gerados no momento da publicação:

  • documentId do formulário: muda entre homologação e produção.
  • Tabela física do formulário: segue um padrão como ML001042, e o número também muda.
  • Número das atividades: pode variar entre versões do processo.

Por outro lado, o nome do dataset do formulário é estável, porque deriva do nome com que ele foi publicado. Essa é a âncora.

Como resolver pelo nome do dataset

Para descobrir o documentId em tempo de execução, consulte os metadados pelo nome do dataset. Um exemplo para SQL Server:

SELECT TOP 1 d.NR_DOCUMENTO AS DOCUMENT_ID, d.COD_LISTA
FROM SERV_DATASET ds WITH (NOLOCK)
JOIN DOCUMENTO d WITH (NOLOCK)
  ON ds.COD_EMPRESA = d.COD_EMPRESA
 AND ds.DSL_DATASET = d.NR_DOCUMENTO
 AND d.VERSAO_ATIVA = 1
WHERE ds.COD_EMPRESA = ?
  AND ds.COD_DATASET = ?
  AND ds.IS_ACTIVE = 1
  AND ds.TYPE = 'BUILTIN';

Com o COD_LISTA, você monta o nome da tabela. A tabela principal segue o formato ML + empresa com três dígitos + lista com três dígitos. Tabelas filhas podem ser encontradas em meta_lista_rel, pelo tablename.

Valide o resultado antes de usar em uma consulta, porque nome de tabela não pode ser parâmetro:

if (!/^ML\d{6}$/.test(tabela)) {
    throw "Tabela de formulario invalida";
}

Essa validação evita abrir uma porta para SQL injection.

Centralize isso em um dataset de metadados, para os demais só informarem o nome. Se quiser, guarde o resultado em memória durante a execução para não repetir a consulta.

Mas não dá para usar o dataset nativo?

Dá, e para volumes pequenos ele resolve. O dataset document também encontra o documento, mas varre o GED e pode ser lento em ambientes grandes. Foi essa lentidão que levou, em um projeto, um desenvolvedor a escrever o número direto no código.

Ler um dataset de formulário inteiro pelo DatasetFactory também pode custar caro. Em um ambiente, essa leitura chegou a levar horas. Para relatórios, a consulta direta à tabela, somente leitura e com a tabela resolvida em tempo de execução, costuma ser bem melhor.

O nome do formulário vira contrato

Se a âncora é o nome do dataset, trate esse nome como contrato:

  • Defina um padrão, como ds_frm_nome_do_formulario.
  • Registre o nome na documentação do projeto.
  • Lembre que, se o formulário for publicado com outro nome, datasets que dependem dele podem parar de filtrar sem erro.

O diagrama no repositório nem sempre é o da produção

Outra armadilha parecida. Em um processo de recebimento, uma widget classificava as etapas pelo número da atividade, conforme o diagrama do repositório. Em produção, rodava outra versão, com outros números, e o painel passou a mostrar veículos "dentro" da empresa e permanência zerada.

A correção foi classificar a etapa pelo nome da atividade naquela versão, e não por um número.

Regras práticas:

  • Guarde números de atividade em constantes no topo do script.
  • Confira as constantes com o XML do processo publicado.
  • Em relatórios, prefira o nome da atividade, considerando a versão.
  • Antes de confiar em um arquivo local, compare com o que está publicado. O mesmo vale para versões de formulário.

Checklist antes de publicar em produção

  • Nenhum documentId ou ML fixo no código.
  • Nenhuma URL, host ou porta de homologação nos scripts.
  • Datasources com o mesmo nome nos dois ambientes.
  • Grupos e papéis criados em produção.
  • Serviços REST cadastrados com o mesmo código.
  • Formulários publicados com o nome esperado.
  • Dataset de carga ou diagnóstico despublicado depois do uso.

Procurar por números longos e por ML0 nos scripts é uma revisão simples, que evita boa parte desses erros.

Perguntas frequentes

O documentId muda entre ambientes no Fluig?

Sim. Ele é gerado na publicação, por isso não deve ficar fixo no código.

Como descobrir a tabela de um formulário?

Pelos metadados do dataset do formulário, usando as tabelas SERV_DATASET e DOCUMENTO.

Por que o processo funciona em homologação e falha em produção?

Identificadores fixos estão entre as causas mais comuns. Outras são versões diferentes do processo, grupos faltando e serviços com configuração diferente.

Quer que seus processos mudem de ambiente sem susto? A consultoria Fluig da MyQube revisa o que está amarrado a um ambiente. Vamos conversar.

Sua operação ainda depende de planilhas e retrabalho?

Agende uma conversa gratuita e receba um diagnóstico inicial dos seus gargalos operacionais.

Falar com a MyQube

Ou conheça nosso serviço de Consultoria Fluig