No artigo de hoje, vamos dar 6 dicas do que fazer quando acontece um erro com o resultado Inválido em um ExecAuto.
Quem nunca, ao programar em AdvPL e fazer um ExecAuto, se deparou com a mensagem de erro Inválido em um ExecAuto, apontando por exemplo para um campo.
Abaixo vamos dar 7 dicas do que fazer, caso isso ocorrer com sua customização.
- Testar Manualmente
O primeiro passo, é você testar a operação manualmente. Supondo que o ExecAuto é do cadastro de produtos, a operação é uma Alteração.
O que você vai fazer é:
- Abrir o mesmo cadastro (o de produtos)
- Vai posicionar no registro que deseja e fazer a mesma operação (alterar)
- Vai informar os campos do seu array, na mesma ordem que você adicionou
- Vai clicar em confirmar
Se acontecer o erro aqui, provavelmente ele vai mostrar um HELP falando qual é o problema, ai basta você analisar e aplicar a correção.
- Nome de algum Campo
Analise a mensagem do log, e veja se em alguma linha, ele traz o conteúdo do campo, mas não traz o nome do campo, conforme o print abaixo:
Esse print foi enviado por um aluno, no nosso grupo do WhatsApp, e notem que todos os campos têm a descrição na esquerda, menos esse, mas por qual motivo?
É que na verdade, o nome do campo é D1_SERIORI, mas foi digitado no fonte como D1_SERIEORI, então caso você encontre um cenário parecido com o seu, revise o nome do campo.
- Falha na Validação do Campo
Dando continuidade, tomemos como exemplo que, o campo onde está escrito “<– Inválido”, o ideal é você ver se tem alguma validação padrão (X3_VALID) ou validação de usuário (X3_VLDUSER).
Se tiver validações, ai você precisa estudar o que elas fazem, como por exemplo, se for algum ExistCPO ele vai validar se o código digitado no campo existe na outra tabela, pois pode ser que o registro não foi encontrado.
- Ordem dos Campos
O que pode impactar também nesse contexto, é a ordem dos campos, pois imagina o seguinte cenário:
- Você informa o campo A1_MUN
- Você informa o campo A1_EST
- Você informa o campo A1_COD_MUN
- Por trás o sistema vai disparar um gatilho e vai preencher o campo A1_MUN
Conforme o exemplo acima, o ideal é passar os campos na mesma ordem que estão na tela de cadastro. E para isso, existe a função FWVetByDic, que pode te ajudar, conforme exemplo abaixo:
//Adiciona os campos aAdd(aDadosOrig, {"BM_DESC", "Grupo Teste - Maratona", Nil}) aAdd(aDadosOrig, {"BM_PROORI", "1", Nil}) aAdd(aDadosOrig, {"BM_CLASGRU", "1", Nil}) aAdd(aDadosOrig, {"BM_GRUPO", "X001", Nil}) //Ordena os campos para ficar igual no dicionário aDadosOrde := FWVetByDic(aDadosOrig, "SBM")
- Espaços na Direita
Conforme relatamos no artigo sobre o erro A260Local (clique aqui), o que acontece, é que existem tabelas que tem o índice composto por vários campos, e ai você precisa passar a informação com o tamanho exato.
Então por exemplo, na SB2, temos o campo Código e Armazém, ai supondo que meu produto seja “F0001” e o armazém “02”, quando a rotina padrão vai validar, ele vai tentar validar “F000102” e vai dar erro que não encontrou.
Por isso, devemos adicionar espaços a direita, conforme o tamanho do campo no dicionário, então se for 15 caracteres, vai ficar “F0001 ” e ai a chave consequentemente de pesquisa vai ficar “F0001 02”.
Para esse cenário, existe a função AvKey, onde você passa qual é o campo, e ele já deixa com o tamanho igual do dicionário.
//Deixa a informação com o mesmo tamanho do campo no banco cProduto := "F0001" cProduto := AvKey(cProduto, "B1_COD") //Adiciona no array que será usado no execauto aAdd(aLinha,{"D3_COD", cProduto, Nil})
- Testar em um RPO Zerado
Se mesmo após todos os cenários acima, o problema persistir, faça o seguinte procedimento:
- Baixe um RPO zerado do portal do cliente
- Compile apenas o fonte que tem seu ExecAuto
- Teste a rotina
Se der certo, ai é alguma customização impactando, então será necessário revisar os fontes, gatilhos e validações.
Agora de se der errado, sobrou apenas o último tópico.
- Abrir Chamado Evidenciando
Se mesmo revisando todos os 6 tópicos acima, o problema persistir, o ideal é abrir um chamado evidenciando o problema, e use como exemplo o tópico 6 acima, onde mesmo com um RPO zerado o problema persiste.
Se possível faça um vídeo demonstrando, e solicite um exemplo funcional de ExecAuto.
Bom pessoal, por hoje é só.
Abraços e até a próxima.