Definir objetos grandes personalizados

Objetivos de aprendizagem

Após concluir esta unidade, você estará apto a:
  • Criar um objeto grande personalizado.
  • Criar um índice personalizado.
  • Implantar um objeto grande personalizado.
  • Preencher um objeto grande.

Como definir objetos grandes personalizados

Você procurou objetos grandes personalizados nos casos de uso ou inventou um. Agora é hora de criar um objeto grande personalizado.

Você pode definir um objeto grande personalizado em Configuração. Também é possível definir um objeto grande personalizado com a API de metadados, mas é mais simples em Configuração. Para começar, faça login em seu Trailhead Playground e acesse Configuração. De forma geral, é como você define um objeto grande.

  1. Clique em Engrenagem de configuração e selecione Configuração.
  2. Insira Big Objects na caixa Busca rápida e selecione Big Objects.
  3. Crie um objeto grande e adicione alguns detalhes básicos.
  4. Adicione campos personalizados. Eles armazenam os dados em seu objeto grande.
  5. Adicione um índice. O índice define a chave primária composta de um objeto grande e é usado para consultar e filtrar os dados do objeto grande.
  6. Salve o objeto grande e altere o status para Implantado.

Agora vamos ver essas etapas com maior detalhe.

Embora os objetos grandes sejam semelhantes a objetos personalizados e padrão, alguns parâmetros são exclusivos de objetos grandes e outros não se aplicam. Os nomes de objetos precisam ser exclusivos entre todos os objetos padrão, personalizados, externos e objetos grandes na sua organização.

Detalhes de definição do objeto grande

Ao definir um objeto grande, primeiro preencha alguns detalhes básicos sobre ele.

Nome do campo Descrição
Label (Rótulo) É usado para fazer referência ao objeto na interface de usuário.
Rótulo plural O nome do objeto no plural.
Começa com som de vogal Se for adequado para o idioma padrão de sua organização, indique se há um artigo definido ou indefinido antes do rótulo.
Nome do objeto Nome da API exclusivo do objeto grande. Em pacotes gerenciados, esse nome evita conflitos com instalações de pacote. Use apenas caracteres alfanuméricos e sublinhados. O nome precisa começar com uma letra e não ter espaços. Ele não pode terminar com um sublinhado ou ter dois sublinhados consecutivos.

Depois de salvo, o nome da API de um objeto grande é identificado pelo sufixo “__b”, diferentemente do sufixo “__c” do objeto personalizado.

Descrição Uma descrição relevante ajuda a lembrar as diferenças entre os objetos ao vê-los em uma lista.
Configuração da Ajuda sensível ao contexto Define a URL exibida quando um usuário clica em Ajuda para esta página na página inicial do registro de objeto (visão geral), nas páginas de edição e de detalhes, nos modos de exibição de lista e nas listas relacionadas. Essa configuração não afeta o link de ajuda no início da página. O link de ajuda sempre abre a janela Ajuda.
Status da implantação Quando um objeto grande é criado, o status é definido como Em desenvolvimento. Não será possível implantar um objeto grande enquanto ele não incluir um índice que contenha pelo menos um campo personalizado. Somente campos personalizados obrigatórios são permitidos em um índice. Depois de criar um índice, você verá um segundo status de Implantado. Quando estiver pronto para conceder acesso aos usuários, altere o status para Implantado.

Campos personalizados de objeto grande

Depois de definir seu objeto grande, adicione campos personalizados. Os campos personalizados armazenam os dados exclusivos de seu objeto grande. Você também pode criar campos de relacionamentos personalizados para associar seu objeto grande a outro objeto no Salesforce. Adicione campos personalizados a um objeto grande da mesma forma que você adicionaria campos personalizados a um objeto no Salesforce. Os objetos grandes aceitam estes tipos de campo:

  • Relacionamento de pesquisa
  • Data/hora
  • E-mail
  • Número
  • Telefone
  • Texto
  • Área de texto (longo)
  • URL

Para criar um índice para seu objeto grande, pelo menos um campo personalizado precisa estar marcado como obrigatório.

Como definir o índice de um objeto grande personalizado

Isso é importante! Lembre-se: os campos definidos no índice de um objeto grande determinam a identidade do objeto grande e a possibilidade de consulta. Os campos definidos no índice precisam ser os mais relevantes para suas consultas e, portanto, você precisa se antecipar e ter algum planejamento. A ordem de definição dos campos também é um ponto importante. Se você está usando SOQL para consultar seu objeto grande, pode apenas consultar os campos que fazem parte do índice, na ordem em que foram definidos. Atribua o campo que você usará mais frequentemente em um filtro de consulta à primeira posição do índice. Também é possível usar apenas operadores de comparação específicos, dependendo da posição do campo em sua consulta. Veremos mais detalhes sobre consultas na próxima unidade.

Lembre-se dessas questões quando for definir o índice.

  • Um índice deve incluir pelo menos um campo personalizado e pode ter até cinco campos personalizados no total.
  • Os campos personalizados incluídos no índice precisam estar marcados como obrigatórios.
  • Os campos de área de texto longo não podem ser incluídos no índice.
  • O número total de caracteres em todos os campos de texto em um índice não pode ultrapassar 100.
  • Depois que o índice é criado, não será possível editá-lo ou excluí-lo. Para alterar o índice, crie outro objeto grande com um novo índice.

Detalhes de índice do objeto grande

Define os campos que compõem o índice de seu objeto grande personalizado e determina os campos e a ordem de classificação.

Nome do campo Descrição
Label (Rótulo) O rótulo é usado para fazer referência ao índice na interface de usuário.
Nome O nome da API do índice.
Campos de índice Define a posição no índice e o sentido do índice para cada campo personalizado incluído no índice. A ordem dos campos colocada aqui determinará a ordem deles no índice. Defina a posição no índice como 1 no parâmetro de filtro usado com maior frequência. Os valores válidos como sentido do índice são crescente e decrescente.

Exemplo de objeto grande personalizado

Agora que você sabe o que é necessário para se criar um objeto grande personalizado, experimente criar um. Vamos fazer de conta que você desenvolveu um novo e incrível jogo chamado SFORCE-COM: U.F.B.O. Defense, em que os jogadores defendem a Terra contra uma ameaça de Objeto grande voador não identificado. O ideal é poder armazenar todas as interações de seus jogadores em uma mesma sessão de jogo. Em cada sessão de jogo, você captura essas informações em seu objeto grande personalizado, Customer_Interaction__b:

  • A quantidade de itens comprados pelo jogador em In_Game_Purchase__c
  • O nível mais alto a que ele chegou em Level_Achieved__c
  • Quantas vidas ele teve em Lives_This_Game__c
  • Sua plataforma em Game_Platform__c
  • Sua pontuação em Score_This_Game__c
  • O nome de sua conta em Account__c
  • A data da sessão de jogo em Play_Date__c
  • A duração do jogo em Play_Duration__c

Seu jogo é muito popular e você tem várias interações com cada usuário todos os dias, o que, multiplicado pelo número enorme de usuários em nosso banco, é um número gigantesco de registros. Oh, o preço do sucesso!

Defina todos esses campos no objeto grande personalizado. Depois de definir os campos, defina também os campos que compõem o índice. O nome da conta de cada jogador é exclusivo e, portanto, escolha Account__c como o primeiro campo do nosso índice. Os próximos campos do nosso índice são a plataforma de jogo do jogador em Game_Platform__c e a data da sessão de jogo, Play_Date__c. Essa ordem específica permite criar uma consulta baseada somente em contas, em contas e plataformas de jogo ou em contas, plataformas de jogo e datas de jogo.

Use os valores exatos desses exemplos para criar um objeto grande personalizado com oito campos personalizados e um índice. Se um campo e um valor não estiverem listados na tabela, ignore-os ou deixe como padrão.

Detalhes de definição do objeto grande

Nome do campo Valor
Label (Rótulo) Interação com o cliente
Rótulo plural Interações com o cliente
Nome do objeto Customer_Interaction
Descrição Deixe em branco
Status da implantação Em desenvolvimento

Campos personalizados de objeto grande

  • Compra no jogo
    • Tipo de dados: Texto
    • Rótulo do campo: Compra no jogo
    • Tamanho: 16
    • Nome do campo: In_Game_Purchase
    • Obrigatório: Não
  • Nível alcançado
    • Tipo de dados: Texto
    • Rótulo do campo: Nível alcançado
    • Tamanho: 16
    • Nome do campo: Level_Achieved
    • Obrigatório: Não
  • Vidas usadas neste jogo
    • Tipo de dados: Número
    • Rótulo do campo: Vidas usadas neste jogo
    • Tamanho: 18
    • Casas decimais: 0
    • Nome do campo: Lives_This_Game
    • Obrigatório: Não
  • Plataforma
    • Tipo de dados: Texto
    • Rótulo do campo: Plataforma
    • Tamanho: 16
    • Nome do campo: Game_Platform
    • Obrigatório: Sim
  • Pontuação do jogo
    • Tipo de dados: Texto
    • Rótulo do campo: Pontuação do jogo
    • Tamanho: 16
    • Nome do campo: Score_This_Game
    • Obrigatório: Não
  • Conta
    • Tipo de dados: Pesquisa
    • Relacionado a: Conta
    • Rótulo do campo: Conta
    • Nome do campo: Conta
    • Obrigatório: Sim
  • Data do jogo
    • Tipo de dados: Data/hora
    • Rótulo do campo: Data do jogo
    • Nome do campo: Play_Date
    • Obrigatório: Sim
  • Duração do jogo
    • Tipo de dados: Número
    • Rótulo do campo: Duração do jogo
    • Tamanho: 18
    • Casas decimais: 2
    • Nome do campo: Play_Duration
    • Obrigatório: Não

Agora você tem oito campos para rastrear todas as interações de seus jogadores. Muito bem!

Campos personalizados de objeto grande

Detalhes de índice do objeto grande

Nome do campo Valores
Label (Rótulo) Índice de interações com o cliente
Nome CustomerInteractionsIndex
Campos de índice

Posição no índice 1: Account__c, decrescente

Posição no índice 2: Game_Platform__c, crescente

Posição no índice 3: Play_Date__c, decrescente

Como implantar objetos grandes

Agora que você definiu seu objeto grande personalizado, está pronto para implantá-lo. Clique em Editar no objeto grande e altere o status de implantação para Implantado.

Objetos grandes, tal como aparecem na configuração.

Agora, você está pronto para começar a usar seu novo objeto grande personalizado.

Um objeto grande personalizado na configuração.

Daqui você pode editar rótulos e nomes para seu objeto grande personalizado e respectivos campos, mas não pode editar ou excluir o índice. Para alterar o índice, recomece com um novo objeto grande. Você também pode excluir um objeto grande personalizado em Configuração. Os objetos grandes excluídos ficam armazenados por 15 dias. Durante esse tempo, você pode restaurar ou excluir o objeto grande permanentemente, mas, findo esse prazo, ele será excluído permanentemente.

Como preencher objetos grandes

Existem duas maneiras principais de preencher um objeto grande. Você pode usar um arquivo .csv com o Data Loader ou com a API, ou fazê-lo totalmente pelo Apex.

Ao usar um arquivo .csv, a primeira linha no seu arquivo precisa conter os rótulos de campo usados para mapear os dados .csv em seu objeto grande personalizado. Carregue os dados no objeto grande no Data Loader ou carregue-os usando a API em massa ou a API SOAP. Veja o arquivo CSV que usamos para carregar em nosso objeto grande Customer_Interaction__b. Um objeto grande aceita muito mais dados do que o que fornecemos aqui como exemplo.
Play Start,In-Game Purchase,Level Achieved,Lives Used,Platform,Play Stop,Score,Account
2015-01-01T23:01:01Z,A12569,57,7,PC,2015-01-02T02:27:01Z,55736,001R000000302D3
2015-01-03T13:22:01Z,B78945,58,7,PC,2015-01-03T15:47:01Z,61209,001R000000302D3
2015-01-04T15:16:01Z,D12156,43,5,iOS,2015-01-04T16:55:01Z,36148,001R000000302D3
Se você quiser usar o Apex para preencher Customer_Interaction__b, use o método insertImmediate.
// Define the record
Customer_Interaction__b bo = new Customer_Interaction__b();
bo.Account__c = '001R000000302D3';
bo.Game_Platform__c = 'PC';
bo.Play_Date__c = DateTime.newInstance(2018, 2, 5);
bo.In_Game_Purchase__c = 'A12569';
bo.Level_Achieved__c = '45';
bo.Lives_This_Game__c = 3;
bo.Score_This_Game__c = '5500';
bo.Play_Duration__c = 25;
 
// Insert the record, which creates a new record
database.insertImmediate(bo);
// Define the record
Customer_Interaction__b bo = new Customer_Interaction__b();
bo.Account__c = '001R000000302D3';
bo.Game_Platform__c = 'PC';
bo.Play_Date__c = DateTime.newInstance(2018, 2, 5);
bo.In_Game_Purchase__c = 'A12569';
bo.Level_Achieved__c = '45';
bo.Lives_This_Game__c = '3';
bo.Score_This_Game__c = '5500';
bo.Play_Duration__c = 25;
 
// Modify a field in the index
bo.Game_Platform__c = 'Mac';
 
// Insert the record, creating a new record because the primary key has changed 
database.insertImmediate(bo);
// Define the record
Customer_Interaction__b bo = new Customer_Interaction__b();
bo.Account__c = '001R000000302D3';
bo.Game_Platform__c = 'PC';
bo.Play_Date__c = DateTime.newInstance(2018, 2, 5);
bo.In_Game_Purchase__c = 'A12569';
bo.Level_Achieved__c = '45';
bo.Lives_This_Game__c = '3';
bo.Score_This_Game__c = '5500';
bo.Play_Duration__c = 25;
 
// Modify a field not included in the index
bo.Level_Achieved__c = '1';
 
// Insert the record, which updates the second record because the index is the same 
database.insertImmediate(bo);
Atenção

Atenção

Os testes do Apex que usam chamadas DML mistas não são permitidos e falharão. Se você grava apenas no objeto grande, o teste insere dados inválidos no objeto grande de destino que precisarão ser excluídos manualmente. Para restringir as chamadas DML de teste ao objeto grande de destino, use uma estrutura simulada com a API de stub Apex.

A reinserção de um registro com o mesmo índice, mas com dados diferentes, resulta em comportamentos semelhantes a uma operação de inserir e atualizar (upsert). Se um registro com o índice existir, a inserção substitui os valores de índice por novos dados. A inserção é idempotente e, portanto, a inserção de dados que já existem não resulta em duplicados. A reinserção é útil na hora de carregar milhões de registros. Em caso de erro, a reinserção recarrega os carregamentos com falha sem duplicar os dados. Durante a reinserção, se não existir registro para o índice fornecido, um novo registro será inserido.