Erro "The template language function 'substring' parameter is out of range"
O substring começa a contar em 0 e exige que a posição inicial esteja dentro do texto. Se você pede para começar numa posição que não existe (por exemplo, a posição 5 de um texto de 3 letras), ou se pede mais caracteres do que o texto tem, o fluxo para com...
A mensagem completa
The template language function 'substring' parameter is out of range: 'start index' must be non-negative integer and should be less than the length of the string. Please see https://aka.ms/logicexpressions#substring for usage details.
No histórico de execuções, essa mensagem aparece dentro de uma frase maior: Unable to process template language expressions in action 'NOME_DA_ACAO' inputs at line '0' and column '0': '...'. O nome da ação é o da ação que contém a expressão e muda de fluxo para fluxo. O trecho em destaque acima é o que identifica o problema.
O que significa
O substring começa a contar em 0 e exige que a posição inicial esteja dentro do texto. Se você pede para começar numa posição que não existe (por exemplo, a posição 5 de um texto de 3 letras), ou se pede mais caracteres do que o texto tem, o fluxo para com esse erro.
Causas mais comuns
- O texto é mais curto do que o esperado, por exemplo um código com menos caracteres que o normal.
- O texto veio vazio ou nulo e o corte assume um tamanho fixo.
- O início ou o tamanho do corte foi calculado com uma conta que deu um valor negativo.
- Confusão entre a posição (que começa em 0) e a contagem humana (que começa em 1).
Como corrigir
- Limite o tamanho do corte ao tamanho do texto: substring('abc',0,min(length('abc'),5)) devolve abc.
- Verifique se o texto não está vazio antes de cortar.
- Lembre que a primeira posição é 0.
- Para pegar só o começo ou o fim, as funções first, last e take também aceitam texto e evitam alguns erros de índice.
Exemplo: antes e depois
| Expressão | Resultado no Power Automate |
|---|---|
substring('abc',5,1) | Erro. The template language function 'substring' parameter is out of range: 'start index' must be non-negative integer and should be less than the length of... |
substring('abc',0,min(length('abc'),5)) | abc |
Os dois resultados vêm da execução real de 09/11/2026, e um teste automático do Me Ajuda Flow confere que o texto desta página é idêntico ao registrado.
Como evitar que o erro volte
- Veja o valor real: abra a execução e confira a entrada da ação que falhou, não só a expressão.
- Trate vazio e tipo antes de calcular: use
coalescepara vazio eintoufloatpara texto que parece número. - Confira a expressão antes de rodar: o analisador de fluxo e o verificador de expressões apontam parte desses problemas sem executar o fluxo.
Perguntas frequentes
O substring conta a partir de 0 ou de 1?
De 0. O primeiro caractere está na posição 0.
Dá para pegar o restante do texto sem informar o tamanho?
Dá. Se você omitir o terceiro parâmetro, o corte vai até o fim do texto, desde que a posição inicial seja válida.