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:
documentIddo 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
documentIdouMLfixo 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 MyQubeOu conheça nosso serviço de Consultoria Fluig