Introdução
Neste caso de estudo, vamos explorar como a nossa equipa de especialistas em Salesforce enfrentou o desafio de migrar desenvolvimentos, metadados e registos entre Orgs de instâncias diferentes, ou seja, onde não há qualquer ligação de uma Org com a outra. Apresentaremos de modo geral as ferramentas e os passos realizados para concluir esta tarefa.
Problema
Ao existir uma cisão na empresa do Cliente, foi necessário que a componente de negócio da nova empresa fosse migrada para uma nova Org. A Org “original” tinha registos e utilizadores de vários países, havendo a necessidade de criar uma a nova Org com todas as funcionalidades e registos de apenas um país, para ser utilizada isoladamente, ou seja, uma nova Org sem qualquer ligação com a Org de origem, e no momento não havia qualquer ferramenta standard do Salesforce que ajudasse a executar esta tarefa.
Este processo envolveu a migração de diversa informação:
- Desenvolvimentos customizados (flows, objetos, apex, ...)
- Metadados
- Registos
- Ficheiros
- Configurações diversas
Solução
Naturalmente, replicar manualmente todos os desenvolvimentos efetuados na Org “original” seria um trabalho moroso e propenso a erros. A alternativa, poderia ser a utilização de apps que permitissem efetuar esta migração, mas após análise às mesmas, foi decidido fazer a migração da Org sem recurso às mesmas.
Após efetuarmos uma análise na Org de origem, avaliámos com o cliente quais os metadados e dados que seriam migrados para nova Org e selecionámos as ferramentas necessárias para prosseguir com a migração para a nova Org.
Estratégia
Para garantir que tudo corresse da melhor forma adotámos um passo a passo bem definido:
- Obtenção de Credenciais:
Obtivemos, junto do cliente, as credenciais da Org de origem e da Org de destino.
- Seleção de ferramentas:
Identificámos as ferramentas que seriam utilizadas no processo de migração de cada artefacto: VSCode; DataLoader; Gestor de ficheiros.
- Metadados:
Identificação, extração e importação dos metadados: Utilizámos o VSCode para extrair e importar os metadados, seguindo uma lógica de dependência entre artefactos.
- Extração e Carregamento dos registos:
Usámos o DataLoader para extrair e carregar os dados, garantindo a ordem correta de importação.
- Exportação/Importação de Arquivos:
Exportámos e renomeámos arquivos, garantindo consistência na ContentVersion e ContentDocumentLink.
- Validação dos Dados Inseridos e metadados junto ao cliente:
Conferimos a quantidade de registos, comparando com a Org de origem.
Implementação
1 - Fazer Retrieve dos Metadados da Org de origem:
Utilizámos a ferramenta VSCode devidamente configurada. No primeiro momento realizámos o retrieve dos metadados da Org de Origem para em seguida importar para a Org destino.
2 – Importar os metadados na Org destino:
Com o VSCode importámos os metadados na Org de destino seguindo uma lógica de dependência entre os artefactos. Por exemplo: importámos primeiro todos os Objects e Fields, para depois importar as classes apex; envia-se primeiro os reports para em seguida poder importar os dashboards.
3 - Desativar Triggers:
Após todos os metadados importados e antes de começar a importar os dados é importante desativar triggers, flows, regras de validação ou quaisquer automações que possam ser disparadas na importação dos dados. Convém registar tudo o que está a ser desativado para ser reativado posteriormente.
4 - Fazer export dos registos na Org de origem:
Utilizámos o dataloader e fizemos a extração dos dados de cada Objeto para posteriormente ser carregado na Org de destino. O ideal é, se possível, para cada objeto na Org de destino criar um campo para guardar um campo que ajude a mapear os registos no futuro. Por exemplo; criar um campo ID_externo para guardar o ID antigo da Org de origem, ou como fizemos a pedido do cliente, criámos um campo OWNER_NAME para armazenar o nome do Owner do registo na Org de origem.
5 - Carregamento dos dados:
Para esta tarefa utilizámos o dataloader. Convém antes de tudo preparar os ficheiros para carga na Org destino. Nesse passo vamos ao ficheiro extraído da Org de origem para formatação de informações quando necessário. Por exemplo: campos de datas, campos de números, valores de picklists, substituir vírgulas e etc. Nesta etapa também se adota uma ordem de importação de registos conforme a lógica de dependência. Por exemplo, importamos primeiro as Contas para em seguida importar os contatos, assim já temos os IDs destes para utilizá-los na importação das oportunidades.
Observação: É importante assegurar que o user utilizado na carga dos dados tem acesso devidamente configurado aos objetos e campos customizados na Org de destino, ou algum campo pode não ser mapeado e passar despercebido.
6 - Exportação/Importação de Ficheiros:
- Exportar todos os ficheiros através do DataExport de Salesforce e agregar os ficheiros do contentVersion numa única pasta
- Fazer o rename aos ficheiros:
* Na listagem de documentos extraídos, encontrar o id, nome e a extensão e copiar para uma folha de cálculo.
* Criar uma fórmula e escrever a instrução para executar na linha de comandos, para todos os ficheiros (por ex: RENAME id nomefich.extensao).
* Copiar para um ficheiro de texto, renomear para .bat e executar. - Verificar, na origem, quais as entidades que se relacionam com a contentversion.
- Exportar todos os registos da entidade ContentDocumentlink da origem.
Ex: SELECT Id,ContentDocumentId, IsDeleted, LinkedEntityId, ShareType, Visibility FROM contentdocumentlink where LinkedEntityId in (Select Id from Asset). - Com base nos ids da entidade ContentDocumentlink, exportar todos os ContentVersion da origem.
Ex: SELECT Id, ContentLocation, FileExtension, FileType, IsAssetEnabled, IsMajorVersion, Origin, PathOnClient, SharingOption, SharingPrivacy, TextPreview, Title, VersionData FROM ContentVersion WHERE Id IN (Registos Retirados da Query Anterior). - No ficheiro ContentVersion, alterar as colunas:
* PathOnClient com o local para onde se exportaram os ficheiros
* Version Data com o local para onde se exportaram os ficheiros concatenado com o nome do ficheiro
* Criar no objeto ContentVersion o valor External Id para fazer load do Id "Original" - Importar, no destino o ficheiro na entidade ContentVersion.
- Exportar do destino, a tabela ContentVersion, para se fazer a atualização do ficheiro ContentDocumentLink.
- Mapear as Entidades para as que foram migradas
- Importar o ficheiro para a entidade ContentDocumentLink
7 - Validar dados inseridos:
Aqui podemos conferir a quantidade de registos e comparar com a Org de origem.
8 - Realizar ajustes finais nos metadados e interface:
- Path
- Page layout assignments
- Delete sample data
- Picklists (Ativar e desativar)
- Ativar: flows, validation rules, workflow rules, triggers, process builder
- Verificar sites remotos e endpoints caso exista alguma integração
- Layouts, tabs
- Pricebooks (gestão de pricebooks, apenas disponivel em classic)
- Tipos de Metadados customizados.
9 - Criação e configuração dos profiles:
Criação de configuração dos perfis conforme necessidade do cliente. No nosso caso, a maioria dos perfis foram criados espelhados com os da Org de origem.
Resultado
Após a conclusão bem-sucedida do projeto de migração de dados e metadados entre organizações Salesforce, os resultados foram satisfatórios. Ao adotar uma abordagem simples e cuidadosamente planeada minimizámos dificuldades técnicas e conseguimos atingir os nossos objetivos.
Conclusão
Em resumo, a migração de dados e metadados não apenas atingiu os objetivos técnicos, mas também contribuiu para uma transformação positiva na perceção do cliente sobre as nossas capacidades. Esses resultados positivos são um testemunho do compromisso, planeamento estratégico e execução eficiente da equipa envolvida no projeto.
#Saleforce # MigraçãoDeDados #Metadados #OrgsDiferentes