Já imaginou poder utilizar informações específicas ou parâmetros fixos em sua organização sem precisar de hardcode ou consultas em banco? Saiba que o Salesforce tem isso nativo à sua disposição, então vamos conhecer sobre as Configurações Personalizadas!

As configurações personalizadas são similares a um objeto Salesforce, porém ela permite que você utilize um conjunto de dados personalizados em toda sua organização, e que você diferencie entre usuário e perfis de acordo com os critérios estabelecidos se necessário.

Esses dados ficam disponíveis pra você em toda organização, sendo possível acessá-los de campos fórmulas, workflows, regras de validação, classes e etc.

Existem dois tipos de configurações personalizadas: Lista e Hierarquia.

Vamos conhecer um pouco mais sobre cada uma delas:

Configurações de Listas

Imagine que você precisa parametrizar alguma informação dentro de sua organização, qualquer informação, pode ser ela texto, booleano, números, ou até mesmo uma URL, você pode armazená-la em uma configuração personalizada de lista e acessar quando precisar, e também alterá-la a qualquer momento para atender sua necessidade e da sua organização.
A configuração de lista é a forma mais eficiente de se evitar o hardcode em classes e triggers pois é fácil acessá-la e mais fácil ainda alterar a informação armazenada de acordo com a sua necessidade!

Esse tipo de configuração só está disponível com acesso via Apex ou VisualForce, iremos aprender a como utilizá-las mais a frente.

Configurações de Hierarquia

Imagine agora que você precisa parametrizar algumas informações, mas essas informações variam de acordo com perfis ou usuários, a configuração de hierarquia é a solução dos seus problemas.

Ela parte dos mesmos princípios da hierarquia de lista, mas suas informações variam de acordo com os critérios definidos, pois ela consulta as configurações da organização referente ao perfil e usuário do usuário atual, ou seja, do usuário que está realizando as operações, e exibe apenas as informações que foram definidas para ele.

Esse tipo de configuração segue a regra citada anteriormente, sendo possível acessá-las através de campos fórmulas, workflows, regras de validação, classes e etc.

As configurações personalizadas também possuem “configurações” de visibilidade, são elas Pública e Privada, vamos entender melhor como funcionam:

Visibilidade Privada

Essa visibilidade não permite que a configuração personalizada esteja “visível” em pacotes gerenciados (aplicativos da AppExchange), ela sequer é apresentada como parte do pacote, ou seja, a organização onde o pacote for aplicado não terá acesso algum à configuração seja ele por API ou Apex. Caso a configuração esteja em pacote não gerenciado, a configuração estará disponível normalmente como qualquer objeto personalizado como se fosse pública.

Visibilidade Pública

Já essa visibilidade está disponível assim como qualquer objeto personalizado, você poderá colocá-la em pacotes normalmente. Também é possível editar e acessar seus valores por meio de Apex ou API, independente do tipo de pacote (gerenciado ou não).

Alguns exemplos em que podemos utilizar configurações personalizadas:

  • Você precisa acessar o Trailhead de um membro da sua equipe, porém no cadastro da sua organização o campo criado só contempla o Nick. Podemos criar uma configuração personalizada para armazenar a URL “https://trailhead.salesforce.com/” e usa-lo para concatenar com o Nick informado evitando colocar a URL fixa no código ou campo fórmula, e alterando facilmente caso necessário.
  • Sua organização implementou um novo fluxo no processo de vendas, porém esse fluxo só será usado em datas especiais e não informadas previamente, como podemos deixar esse fluxo ativado/desativado sem ficar alterando código? Podemos criar uma configuração personalizada com um campo Booleano para que possamos ativar e desativar quando precisarmos.

Nesse post iremos falar sobre as configurações personalizadas de lista, mas fique calmo não pense que vamos ignorar as de hierarquia, teremos um post só sobre elas também :)

Criando uma Configuração Personalizada de Lista

Em nossa demonstração iremos utilizar a interface Lightning, porém o procedimento para o Classic é o mesmo.

Antes de começarmos, vamos verificar se a configuração personalizada de lista está ativa em nossa organização, basta seguir o caminho:

Configuração -> Busca Rápida -> Configurações de esquema

A seguinte tela será apresentada, e caso a configuração personalizada de lista não esteja ativa, basta ativá-la como na imagem a seguinte:

Agora vamos ao que interessa!

Para acessar as configurações personalizadas basta seguir as instruções:

Configuração -> Busca Rápida -> Configurações Personalizadas

Ao clicar em configurações personalizadas, a seguinte tela será apresentada, essa tela contém todas as configurações personalizadas existentes, no nosso caso nenhuma:

Vamos botar a mão na massa e criar nossa configuração personalizada, basta clicar no botão “Novo” e teremos a seguinte tela:

Nessa tela podemos ver que a ideia por trás de uma configuração personalizada segue os princípios de um objeto personalizado Salesforce, temos Rótulo, Nome do Objeto, Tipo de configuração (que no nosso caso será Lista), visibilidade da configuração e a Descrição.

Importante: Depois que você salvar uma configuração personalizada, não será mais possível alterar o tipo de configuração nem a visibilidade, então tenha cuidado ao definir os critérios.

Rótulo – Nome que será apresentado na interface de configurações.

Nome do Objeto – Nome que será referenciado dentro da Classe, Campo Fórmula, Regra de Validação e etc.

Tipo de Configuração – Tipo de configuração personalizada que será utilizada, sendo elas configuração de fila ou de hierarquia.

Visibilidade – Definição da visibilidade da configuração personalizada, conforme regras citadas logo acima.

Descrição – Aqui vamos descrever para que serve a configuração personalizada, isso pode nos ajudar em uma futura manutenção ações similares.

Agora que já identificamos tudo que precisamos, vamos criar nossa configuração, basta preencher os campos conforme a imagem anterior e clicar em “Salvar“, a seguinte tela será apresentada:

Como podemos ver, todos os campos que preenchemos anteriormente são apresentados nos detalhes da configuração, mas também temos um campo novo com o rótulo “Nome da API” que é o nome do nosso objeto seguindo o padrão de objetos customizados do Salesforce. O valor apresentado no campo Nome da API será nossa porta de entrada para que possamos acessar nossa configuração personalizada, falaremos sobre isso mais adiante.

Criando um Campo em nossa Configuração Personalizada

Agora que já temos nossa configuração personalizada, chegou a hora de criarmos nossos campos para que possamos trabalhar com as informações. Na sessão “Campos Personalizados” é onde podemos visualizar todos os campos criados em nossa configuração e criar novos campos, para criar um novo campo basta clicar no botão “Novo(a)” e a tela a seguir será apresentada:

Se repararmos bem, a tela apresentada não possui nada de novo, segue o mesmo padrão para criação de novos campos em um objeto mas com uma gama de opções um pouco menor, até por que uma configuração personalizada não é propriamente um objeto. A criação de campo segue a mesma regra para um objeto, exceto pelo fato de não podermos escolher permissões e adicioná-lo em um layout de página padrão.

Após selecionarmos o tipo de campo (nesse caso eu escolhi do tipo texto), vamos para a tela a seguir:

Podemos visualizar novamente que a tela segue o mesmo padrão adotado na criação de um campo personalizado para um objeto contendo rótulo, comprimento, nome do campo (Nome API) e etc.

Após preencher as informações necessárias basta clicar em “Avançar” e a tela de confirmação será apresentada com tudo que definimos em nossa criação:

Caso esteja tudo de acordo com o que você definiu basta clicar em “Salvar” e retornar para tela de detalhes da configuração personalizada ou clicar em “Salvar e Novo” para criar um novo campo.

Como pode ser notado, a criação de campos em uma configuração personalizada não é nenhum bicho de sete cabeças e segue os mesmos padrões adotados na criação de um campo personalizado do Salesforce, exceto por algumas diferenças que são elas, tipos de campos disponíveis, permissões de campo e configuração de layout conforme citado.

Adicionando informações em nossa configuração personalizada

Agora que já temos nossa configuração personalizada e nossos campos criados, chegou a hora de popular nossa configuração personalizada com as informações que vamos precisar para trabalharmos, basta clicar no botão “Manage” ou “Gerenciar” na tela de detalhes da configuração, e seremos redirecionados para seguinte tela:

Na tela apresentada podemos visualizar nossos registros já criados e popular nossa configuração personalizada, mas alguém pode estar se perguntando como assim popular? É bem simples, como dito anteriormente a configuração personalizada segue os mesmos princípios de um objeto, e para que possamos trabalhar com nossos objetos temos que criar registros e o mesmo se aplica para a configuração personalizada.

Para adicionar um novo registro, basta clicar no botão “Novo(a)“, e seremos direcionados para a tela de edição do nosso “registro“:

Como podemos ver todos os campos que criamos são apresentados na tela de edição para que possamos preenchê-los com informações que nos serão úteis, porém, temos mais um campo com o rótulo “Name” que não fomos nós quem criamos. Pois bem, o campo “Name” será o nome do nosso conjunto de dados, assim como eu disse que o nome API da nossa configuração personalizada seria a porta de entrada, o “Name” será o nosso guia para que possamos chegar em nossas informações.

Importante: Aconselho o uso de nomes fáceis no campo Name, sem acentos, caracteres especiais e afins. Tentem seguir o padrão de nomenclatura de API do Salesforce para que seja mais fácil.

Após salvar o conjunto de dados, será apresentado a tela de detalhes:

E voltando para nossa lista de registros podemos ver nosso conjunto de dados:

Agora que já finalizamos nossa configuração personalizada, criamos nossos campos e criamos nosso registro chegou a hora de aprender a trabalhar com as configurações personalizadas.

Como utilizamos nossa Configuração Personalizada?

Chegamos à um dos pontos mais importantes do nosso post, que é entender como podemos utilizar nossas configurações personalizadas e acessar as informações contidas nela para que possamos no beneficiar desse recurso.

Temos duas formas de retornar as informações necessárias, uma delas é trazer todas a informações contidas no registro e a outra apenas retornar apenas um campo específico do nosso registro.

Vamos começar com uma demonstração de código para retornar o registro por completo, a sintaxe padrão de utilização é a seguinte:

ConfiguracaoPesonalizada__c cp = ConfiguracaoPesonalizada__c.getValues(‘Registro’);

Agora vamos entender detalhadamente o código apresentado:

ConfiguracaoPesonalizada__c – Nossa configuração Personalizada criada.

Registro – O registro que queremos acessar para utilizar suas informações.

Seguindo a configuração personalizada que criamos anteriormente ficaria dessa forma:

SouCloud__c sc = SouCloud__c.getValues(‘SouForce‘);

Com isso retornaremos todas as informações que incluímos em nossa configuração e mais algumas informações padrões como CreatedDate, LastModifiedDate e etc. Para conseguir acessar cada informação individualmente basta seguir o mesmo padrão de um objeto com a sintaxe “Objeto__c.Campo__c“.

A seguir segue uma demonstração do System.Debug() da nossa configuração personalizada:

20:16:55:014 USER_DEBUG [2]|DEBUG|SouCloud__c:{LastModifiedDate=2018-03-27 02:07:05, IsDeleted=false, CreatedById=0051I000001ipAZQAY, CreatedDate=2018-03-27 02:07:05, Nome_Blog__c=SouForce.Cloud, Id=a021I000003wYKRQA2, LastModifiedById=0051I000001ipAZQAY, SetupOwnerId=00D1I000003pVNhUAM, Recomendacao__c=true, Name=SouForce, SystemModstamp=2018-03-28 10:42:57}

Já que entendemos como trabalhar com a configuração personalizada completa, vamos agora aprender como utilizar apenas um determinado campo do nosso registro, a nossa sintaxe padrão nesse caso é:

ConfiguracaoPesonalizada__c.getInstance(‘Registro‘).Campo__c;

Agora vamos entender detalhadamente o código apresentado:

ConfiguracaoPesonalizada__c – Nossa configuração Personalizada criada.

Registro – O registro que queremos acessar para utilizar suas informações.

Campo__c – De qual campo queremos pegar a informação.

Seguindo a mesma configuração personalizada utilizada acima, ficaria da seguinte forma:

String sf = SouCloud__c.getInstance(‘SouForce‘).Nome_Blog__c;

ou então

Boolean rc = SouCloud__c.getInstance(‘SouForce‘).Recomendacao__c;

Dessa forma como foi apresentado, nós podemos utilizar um ou mais campos específicos da nossa configuração.Quando utilizamos os valores recuperados no código no System.Debug() podemos ver que nos é retornado apenas o valores que especificamos:

Garantindo cobertura de teste das Configurações Personalizadas

Um assunto que não é menos importante que os demais, é como garantir nossa cobertura de código quando utilizamos configurações personalizadas.

Caso sua classe de teste use a notação “SeeAllData=True” você não terá problemas, pois o código irá acessar as configurações personalizadas que já existem na sua organização de acordo com o que foi especificado, mas se a mesma não utilize a notação citada a solução dos seus problemas é bem simples, basta popular a configuração igual um objeto padrão Salesforce, vamos ver um exemplo:

SouCloud__c sc = new SouCloud__c();
sc.Name = 'Teste';
sc.Nome_Blog__c = 'abc';
sc.Recomendacao__c = false;
insert sc;

A única diferença que podemos ver aqui é o campo Name, esse campo nada mais é que o nome do nosso registro da configuração personalizada e deve ser sempre incluído para que a mesma seja criada com sucesso.

Com esse procedimento podemos garantir que nossa classe de teste seja executada sem o SeeAllData com sucesso caso tenhamos uma configuração personalizada em uso no nosso código.

E por aqui terminamos nossa postagem sobre configurações personalizadas, mais especificamente as de lista, mas não ache que paramos por aqui, pois irei retornar com uma postagem sobre as configurações personalizadas de Hierarquia!

Caso queira ver com mais detalhes o conteúdo, recomendo que acessem a documentação da própria Salesforce :D

Até a próxima!

Igor Bressan

Salesforce Developer at Connekt

Bacharel em Ciência da Computação pela Universidade São Judas Tadeu.

Atuando a 4 anos com sustentação e pequenos projetos, em 2014 iniciei minha experiência com sustentação desenvolvendo em Informix 4GL.
Em 2016 iniciei com Salesforce atuando em sustentação novamente, onde tive a oportunidade de aprender sobre Desenvolvimento e Administração da plataforma, e desde então mergulhei de vez nesse mundo o que me ajudou a conquistar minha certificação Platform Developer I.

Acompanhe meu Trailhead aqui.