Código sequencial no SharePoint: PAG-00001
Todo mundo quer um número de solicitação bonito, como PAG-00001. O problema é que o ID do item só existe depois que ele é criado. Veja por que a coluna calculada falha e como resolver com um fluxo curto.
O que queremos
Uma lista de solicitações em que cada item tem um código legível e único: PAG-00001, PAG-00002, e assim por diante. É o que as pessoas citam em e-mails ("pode olhar o PAG-00042?") e o que facilita a busca.
O SharePoint já tem uma coluna ID, que é um número sequencial único gerado pela própria lista. O código é o ID com um prefixo e zeros à esquerda. O desafio: o ID só passa a existir depois que o item é salvo.
Por que a coluna calculada não funciona
A ideia óbvia é criar uma coluna calculada com a fórmula ="PAG-"&[ID]. Relatos de usuários e respostas de moderadores da Microsoft mostram que isso não é confiável: ao criar o item, a parte do ID vem vazia ou zero, porque o ID ainda não existe na hora em que a fórmula é calculada; e, em alguns casos, a fórmula perde os colchetes e passa a tratar ID como texto. A recomendação nessas respostas é uma das duas alternativas abaixo.
| Alternativa | Guarda o valor? | Quando usar |
|---|---|---|
| Formatação de coluna (JSON) | Não. Só muda como o item é exibido na lista | Quando o código é apenas visual. O valor fica vazio para filtros, buscas e fluxos |
| Fluxo do Power Automate | Sim. Grava o código de verdade em uma coluna de texto | Quando o código precisa ser usado em buscas, relatórios, e-mails e outros fluxos |
O guia segue com o fluxo, que é o caminho que serve em todos os casos.
Passo a passo
- Crie a coluna de texto na lista: tipo Uma linha de texto, nome
Codigo(sem acento e sem espaço no nome interno, o que evita dor de cabeça nas expressões). Se quiser garantir que não haja códigos repetidos, ative Impor valores exclusivos (a coluna será indexada). - Crie o fluxo automatizado com o gatilho Quando um item é criado (SharePoint), escolhendo o site e a lista.
Escolha o gatilho certo: use "Quando um item é criado", e não "criado ou modificado". O fluxo vai alterar o item para gravar o código, e com o gatilho "ou modificado" essa alteração dispararia o próprio fluxo de novo, em um loop sem fim.
- Adicione a ação Atualizar item (SharePoint): mesmo site e lista, Id com o conteúdo dinâmico ID do gatilho e, no campo
Codigo, a expressão:concat('PAG-', formatNumber(triggerOutputs()?['body/ID'], '00000'))A funçãoformatNumbercom o formato00000completa com zeros à esquerda até cinco dígitos: o ID 1 vira00001, o 42 vira00042, e o 123456 continua123456, sem cortar nada. Conferido executando a expressão no Power Automate: o ID 42 geraPAG-00042e o ID 123456 geraPAG-123456. - Se a lista tiver colunas obrigatórias, a ação Atualizar item pode pedir esses campos. Preencha com os próprios valores do gatilho.
- Salve e teste: crie 3 itens e confira o código de cada um.
O que esperar
- Atraso de alguns segundos: o item aparece sem código por instantes, até o fluxo rodar. Se isso incomoda, oculte a coluna na tela de criação e mostre o código só nas visões.
- Buracos na numeração: o ID é gerado pela lista e itens excluídos deixam lacunas (por exemplo, 1, 2, 4). O código acompanha. Se a sua regra exige numeração sem buracos, o ID da lista não é o caminho certo.
- Sem código repetido: como o ID vem da lista, dois itens criados ao mesmo tempo recebem IDs diferentes, e portanto códigos diferentes.
- Itens que já existem: o fluxo só atua em itens novos. Para preencher os antigos, rode um fluxo manual uma vez, com Obter itens e Atualizar item para cada um, respeitando o limite de requisições.
- Quem edita o fluxo: o fluxo usa a conexão de quem o criou. Se essa pessoa sair da empresa, a conexão deixa de funcionar. Use uma conta de serviço em produção.
Variações úteis
- Prefixo com ano: gera algo como
PAG-2026-00042. O número continua contínuo, ele não reinicia a cada ano.concat('PAG-', formatDateTime(utcNow(), 'yyyy'), '-', formatNumber(triggerOutputs()?['body/ID'], '00000')) - Mais de um tipo de solicitação: use o mesmo fluxo e escolha o prefixo pelo tipo (aqui, uma coluna de escolha chamada
Tipo).concat(if(equals(triggerOutputs()?['body/Tipo/Value'], 'Reembolso'), 'REE-', 'PAG-'), formatNumber(triggerOutputs()?['body/ID'], '00000'))
Valide as expressões no verificador antes de colar no fluxo.