Beleza, hoje rolou uma situação clássica. Um colega criou uma picklist em Quote, e depois precisou da mesma picklist em Opportunity. O que ele fez? Criou o campo de novo, na mão, e digitou valor por valor. Mesmo nome, mesmos valores, dois lugares diferentes pra manter.

Funciona? Funciona. Mas no dia que alguém pedir um valor novo, ou trocar um texto, você vai ter que lembrar de abrir cada objeto e repetir a mudança. E se esquecer de um, os dados começam a divergir sem ninguém perceber.

Foi aí que eu perguntei: por que não usou uma Global Value Set? Bora destrinchar isso.

O que é uma Global Value Set

Uma picklist comum (custom picklist) é amarrada a um objeto. Ela nasce como campo daquele objeto, e os valores moram ali dentro.

A Global Value Set (ou Global Picklist Value Set) funciona diferente. Segundo a documentação oficial, ela existe de forma independente, como um conjunto de valores separado dos objetos. Qualquer picklist que for criada a partir dela compartilha esses mesmos valores.

Pensa assim: em vez de cada objeto ter a sua própria lista, você tem uma lista central, e os campos só apontam pra ela.

Global Value Set: Canal_de_Venda
    ├── Quote.Canal_de_Venda__c
    └── Opportunity.Canal_de_Venda__c

Mudou a lista central, mudou pra todo mundo que usa.

Por que vale a pena

Quando a mesma lista de valores precisa existir em mais de um objeto, a Global Value Set facilita bastante a vida:

  • Manutenção em um lugar só. Você altera os valores na Global Value Set e a mudança vale pra todos os campos que usam ela.
  • Consistência entre objetos. Se os valores são copiados de um objeto pro outro (Quote pra Opportunity, por exemplo), não tem risco de um lado ter um valor que o outro não tem.
  • Valores protegidos. Toda Global Value Set é restrita por natureza. Só um admin consegue adicionar ou alterar valores, e ninguém consegue gravar um valor fora da lista, nem via API.
  • Rastreabilidade. Na página de detalhe da Global Value Set existe a seção Fields Where Used, que mostra todos os campos que usam aquela lista.

Repara no segundo ponto. Se os campos são diferentes e alguém digita um valor com acento num objeto e sem acento no outro, a cópia entre objetos começa a dar problema. Com a lista central, isso simplesmente não acontece.

Como criar e usar

São duas etapas: primeiro você cria a lista central, depois cria os campos apontando pra ela.

1. Criar a Global Value Set

  1. No Setup, digite Picklist no Quick Find e selecione Picklist Value Sets.
  2. Ao lado de Global Value Sets, clique em New.
  3. Preencha o Label. É esse nome que vai aparecer na hora de criar o campo.
  4. Escreva uma Description clara, dizendo pra que servem os valores e em quais objetos a lista é usada.
  5. Digite os valores, um por linha.
  6. Se quiser, marque a ordenação alfabética e/ou o primeiro valor como default.
  7. Clique em Save.

2. Criar o campo usando a Global Value Set

  1. No Setup, vá em Object Manager e escolha o objeto (Quote, por exemplo).
  2. Clique em Fields & Relationships e depois em New.
  3. Selecione Picklist e clique em Next.
  4. Preencha o Field Label.
  5. Em Values, mantenha a opção Use a global value set e escolha a lista que você criou.
  6. Siga com field-level security e page layouts normalmente, e salve.

Depois é só repetir a etapa 2 no outro objeto (Opportunity). Sem digitar nenhum valor de novo.

Um detalhe legal: cada campo pode ter o seu próprio valor default, independente do default da Global Value Set. Isso vale inclusive pra default via fórmula.

Pontos de atenção

Antes de sair transformando tudo em global, vale conhecer as regras que a documentação oficial deixa claras:

O que Regra
Tipo de listaSempre restrita. Não dá pra converter pra não restrita.
Valores por Global Value SetAté 1.000, somando ativos e inativos.
Global Value Sets por orgAté 500.
Campos usando a mesma listaSem limite.
Usada em mais de 13 objetosVocê ainda pode desativar valores, mas não pode mais substituir (replace) nem excluir valores.
Associação do campoNão dá pra desfazer. Se o campo precisar de outra lista ou de valores próprios, é preciso excluir o campo e criar outro.
Excluir um valorVai pra fila de background jobs. Quando termina, você recebe um e-mail.
Record TypesAo adicionar valor novo, existe a opção de incluir em todos os Record Types que usam a lista. Se não marcar, é manual.

O ponto da associação é o que mais pega. Por isso, antes de criar o campo, pensa: essa lista pode um dia precisar de um valor que só faz sentido num objeto? Se a resposta for sim, talvez a global não seja a melhor escolha.

E lembra: qualquer mudança na Global Value Set afeta todos os campos que usam ela. Centralizar é ótimo, mas também significa que um replace descuidado muda dado em vários objetos de uma vez.

E se a picklist já foi criada na mão?

Nem sempre a gente sabe de cara que uma lista vai ser reaproveitada. Pra isso existe o Promote to Global Value Set, que transforma os valores de um campo existente numa Global Value Set.

  1. Vá em Fields & Relationships do objeto que tem a picklist.
  2. Clique no Field Label da picklist.
  3. Clique em Edit.
  4. Clique em Promote to Global Value Set.
  5. Informe um label pra Global Value Set e, se quiser, uma descrição.
  6. Clique em Promote to Global Value Set de novo.

A partir daí, o Trailhead orienta usar a lista promovida quando você criar um novo campo de picklist.

Pra quem trabalha com metadata: a Global Value Set é o tipo GlobalValueSet, com arquivos .globalValueSet dentro da pasta globalValueSets. E atenção: toda Global Value Set criada a partir da API 57.0 ganha automaticamente o sufixo __gvs no developer name, e você precisa usar esse sufixo no fullName em chamadas CRUD-based.

Resumindo

No caso de hoje, não tinha problema nenhum o campo ter sido criado na mão. Funciona. Mas é uma boa prática que evita retrabalho e divergência de dados lá na frente.

Pergunta simples pra decidir:

essa mesma lista de valores vai existir em mais de um objeto, ou os valores vão ser copiados de um objeto pro outro? Se sim, cria primeiro a Global Value Set e depois os campos. Se não, uma picklist comum resolve, com mais flexibilidade.

Fontes oficiais