Criar seu primeiro pacote desbloqueado

Objetivos de aprendizagem

Após concluir esta unidade, você estará apto a:
  • Conhecer os comandos CLI para o empacotamento.
  • Descrever os casos de uso básicos do empacotamento.
  • Empacotar o exemplo de aplicativo DreamHouse LWC e instalá-lo em um Trailhead Playground.

Por que adoramos o desenvolvimento com pacotes

Para nós, o empacotamento é um dos recursos para desenvolvedores da Salesforce Platform mais empolgantes. Fica lado a lado com outras revoluções famosas, como o pão fatiado, o celular e os serviços de streaming de vídeo. No entanto, caso você ainda não esteja convencido, vamos resumir as principais vantagens que descobrimos até hoje. O desenvolvimento com pacotes:

  • Segue as melhores práticas referentes ao ciclo de vida do desenvolvimento de software. É compatível com os recursos do Salesforce DX: os projetos, os comandos CLI e as organizações temporárias foram criados pensando especificamente no empacotamento.
  • Encapsula todas as alterações controladas entre os estágios do ciclo de vida em um artefato com versões.
  • Torna mais fácil acomodar os futuros pedidos de novos recursos. Adiciona, atualiza e remove componentes de seu pacote de modo simples.
  • Proporciona um histórico de auditoria melhorado, facilitando o controle e a compreensão das alterações feitas em sua organização de produção.
  • Organiza a origem. Fica muito mais fácil saber qual componente pertence a cada aplicativo e recurso.
  • Promove o desenvolvimento iterativo e modular.
  • Aceita interdependências entre pacotes desbloqueados. Um único pacote desbloqueado pode depender de vários outros pacotes desbloqueados, e de pacotes gerenciados de primeira e segunda geração.
  • Aceita a integração contínua e o envio contínuo porque os comandos de CLI para empacotamento permitem automatizar totalmente cada etapa no pipeline de implantação.

Casos de uso simples do empacotamento

Os pacotes desbloqueados são perfeitos para aplicativos empresariais internos. Por exemplo:

  • O grupo de negócios financeiros quer que a equipe de TI crie um aplicativo para os funcionários enviarem suas despesas. Sua equipe decide desenvolver e enviar esse aplicativo usando os pacotes desbloqueados.
  • A equipe de RH quer que a equipe de TI crie um aplicativo para os funcionários indicarem possíveis candidatos. Os funcionários usarão o aplicativo Recomendação para publicar vagas de emprego, indicar colegas e receber bônus por indicação. Sua equipe decide desenvolver e enviar esse aplicativo usando os pacotes desbloqueados.

Em cada um desses casos, você começa um projeto completamente novo e toda a origem fica contida no formato de origem de projeto do Salesforce DX (e comprometida com seu sistema de controle de versão). Quando estiver pronto para enviar um desses aplicativos, você cria um pacote desbloqueado que pode ser testado em uma organização temporária ou um sandbox e, depois, instalado em sua organização de produção. E quando a equipe precisa de um recurso novo, é possível adicioná-lo e criar uma nova versão do pacote. Simples. Moleza!

Agora que você já está a par das vantagens do desenvolvimento com pacotes, vamos mostrar como criar um pacote desbloqueado.

Configure o ambiente

Antes de irmos ao que interessa, vamos configurar um novo Trailhead Playground e habilitar o Dev Hub e o empacotamento nele.

  1. Para criar um novo Trailhead Playground, encontre o desafio prático no final desta unidade. Clique nas informações do Playground à esquerda do botão Iniciar.
    Depois selecione Criar Playground.

    Nota: Mesmo que seja possível reutilizar um Trailhead Playground existente, começar com um playground novo é uma garantia de que você está trabalhando com um ambiente limpo.
  2. Depois de criar um novo Trailhead Playground, clique em Iniciar para abrir o playground. Em seguida, certifique-se de saber o nome de usuário e a senha do playground. Essas informações serão necessárias nas próximas etapas.
    Consulte Obter seu nome de usuário e redefinir sua senha.
  3. Em Configuração no Trailhead Playground, digite Dev Hub na caixa Busca rápida e selecione Dev Hub. Clique em Ativar Dev Hub e, em seguida, clique em Ativar pacotes desbloqueados e pacotes de segunda geração gerenciados.
  4. Crie uma conta GitHub, se ainda não tiver uma.
  5. Instale o Salesforce CLI no seu computador.

Copie o código fonte do DreamHouse

Para fins de demonstração, vamos fingir que você está criando e apresentando o aplicativo DreamHouse LWC para uma das equipes da sua empresa.

Se você usa atualmente os recursos e ferramentas do Salesforce DX, talvez já esteja à vontade com o exemplo de repositório DreamHouse LWC. O DreamHouse LWC é um aplicativo independente que incorpora muitos dos recursos disponíveis na Salesforce Platform. Ele usa componentes Web do Lightning, Apex, Process Builder e muito mais. Nele, os usuários podem procurar imóveis e falar com corretores on-line.

Para que você possa se concentrar no empacotamento, vamos extrair o código fonte do DreamHouse LWC e os respectivos arquivos de projeto do Salesforce DX, que já foram criados. Embora este exemplo use apenas um pacote, um projeto do Salesforce DX pode conter vários. Você pode isolar pacotes diferentes com base na estrutura de diretório e compartilhar componentes quando for o caso.

Criando um pacote para esse aplicativo, fica fácil instalá-lo em organizações temporárias, UAT, sandboxes e organizações de produção conforme você itera pelo ciclo de vida do desenvolvimento.

Vamos acompanhá-lo durante todo o processo usando as ferramentas especialmente criadas para o desenvolvimento com pacotes.

Vamos copiar o código fonte do aplicativo DreamHouse Lightning Web Components (LWC).

Em uma janela de comando, mude para o diretório onde você quer colocar o código-fonte. Depois, execute o comando.

git clone https://github.com/dreamhouseapp/dreamhouse-lwc.git

O comando git clone cria a pasta dreamhouse-lwc usando a estrutura do projeto do Salesforce DX, que contém um arquivo de projeto do DX e um arquivo de definição de organização temporária. Não se assuste se a sua versão do projeto for um pouco diferente, pois o repositório DreamHouse LWC é atualizado com frequência.

Mostra a estrutura completa do diretório dreamhouse-sfdx quando ele é aberto em um programa como o Finder ou o Windows Explorer.

Configurar seu pacote

  1. Seu Trailhead Playground também é sua organização Dev Hub. Para criar um pacote, precisamos primeiro autorizar a sua organização Dev Hub e fazer login nela.
    sfdx force:auth:web:login -d -a DevHub
  2. Na janela de comando, vamos verificar se a organização Dev Hub está conectada.
    sfdx force:org:list
    A saída desse comando apresenta todas as organizações às quais você está conectado, incluindo organizações Dev Hub, Trailhead Playground e temporárias. O (D) indica sua organização Dev Hub padrão. 
    === Orgs
         ALIAS       USERNAME                             ORG ID              CONNECTED STATUS
    ───  ──────────  ───────────────────────────────      ──────────────────  ────────────────
    (D)  DevHub      myDevHub@example.com                 00DB0000000Ige5MAC  Connected
         MyTP        myName@mindful-raccoon-8184t4.com    00D6A000000fH8CUAU  Connected
         TestingOrg  name@example.com                     00D4x000006sFonEAE  Connected
    ALIAS            USERNAME                             ORG ID              EXPIRATION  DATE
    ────────         ───────────────────                  ──────────────────  ────────────────
    Scratch1         test@example.com                     00DZ000000N8ItoMAF  2021-02-24
  3. Mude para o diretório dreamhouse-lwc em seu computador.
  4. Abra sfdx-project.json com o editor de texto que preferir. DreamHouse LWC é um projeto de código aberto com vários contribuidores. Para você poder completar o desafio com sucesso, substitua o conteúdo do seu arquivo de projeto pelo código a seguir.
    {
       "packageDirectories": [
          {
             "path": "force-app",
             "default": true
          }
       ],
       "namespace": "",
       "sfdcLoginUrl": "https://login.salesforce.com",
       "sourceApiVersion": "50.0"
    }
  5. Caso seja necessário, atualize sourceApiVersion para corresponder à versão da Salesforce CLI. Não esqueça de salvar!

Por que não usamos namespace neste exemplo?

Embora o namespace seja opcional nos pacotes desbloqueados, incluí-lo ajuda a manter os componentes do pacote organizados. No entanto, como os namespaces exigem mais configuração e antecipação, vamos deixá-los de lado nesta unidade.

Nota

Nota

Caso esteja migrando metadados da sua sopa da felicidade para o pacote desbloqueado, crie os pacotes desbloqueados sem namespace. Assim, quando os metadados saírem do estado sem pacote para entrar no pacote desbloqueado, o nome da API dos elementos de metadados permanecerá o mesmo.

Criar o pacote

Quando você clonou o aplicativo DreamHouse LWC do GitHub, colocou todos os arquivos de dados no diretório do seu projeto. Agora você pode criar o pacote de base sem mais delongas.

Esta seção apresenta o fluxo de trabalho para criar um pacote usando o exemplo de repositório DreamHouse LWC.

  1. Num terminal ou prompt de comando, mude para o diretório dreamhouse-lwc.
  2. Crie o pacote desbloqueado sem namespace e informe o alias ou nome de usuário de sua organização Dev Hub caso ele não esteja definido como o padrão:
    sfdx force:package:create --name dreamhouse --description "My Package" --packagetype Unlocked --path force-app --nonamespace --targetdevhubusername DevHub
    • --name é o nome do pacote. Esse nome é um alias que você pode usar ao executar comandos para empacotamento subsequentes.
    • --path é o diretório que apresenta o conteúdo do pacote.
    • --packagetype indica que tipo de pacote você está criando; neste caso, desbloqueado.
  3. Abra sfdx-project.json. Bingo! Em packageDirectories, você pode ver o nome do pacote que definiu, com espaços reservados para o nome e o número da versão. O comando também cria uma seção packageAliases, que mapeia o nome do pacote (alias) para seu ID de pacote (0Ho) correspondente.
    {
       "packageDirectories": [
          {
             "path": "force-app",
             "default": true,
             "package": "dreamhouse",
             "versionName": "ver 0.1",
             "versionNumber": "0.1.0.NEXT"
          }
       ],
       "namespace": "",
       "sfdcLoginUrl": "https://login.salesforce.com",
       "sourceApiVersion": "50.0",
       "packageAliases": {
          "dreamhouse": "0Hoxxx"
       }
    }
     
Nota

Nota


Se você não lembrar do alias do pacote ou do ID de pacote, pode listar todos os pacotes associados com seu Dev Hub executando sfdx force:package:list.

Criar uma organização temporária para testar sua versão do pacote

Vamos criar uma organização temporária na qual instalaremos o pacote desbloqueado com o alias MyScratchOrg. O teste em uma organização temporária é uma forma prática de realizar a fase de teste da unidade no ciclo de vida do desenvolvimento por empacotamento.

sfdx force:org:create --definitionfile config/project-scratch-def.json --durationdays 30 --setalias MyScratchOrg -v DevHub

Esse comando usa o arquivo de definição da organização temporária padrão e cria uma organização temporária da Developer Edition da mesma edição de seu Trailhead Playground. Repare que a duração é definida como 30 dias, dando muito tempo para que você termine o trabalho dentro de um sprint de desenvolvimento (ou conclua este módulo do Trailhead).

Criar a versão do pacote e instalá-la na organização temporária

Quando estiver pronto para liberar o pacote, crie um instantâneo dele, chamado de “versão do pacote”. A instalação da versão do pacote se assemelha à implantação de metadados. Lembre-se: depois de criada, a versão do pacote serve como artefato imutável que contém um conjunto específico de metadados.

  1. Abra sfdx-project.json com o editor de texto desejado para atualizar as opções da versão do pacote.
  2. Altere versionName para Versão 1.0 e versionNumber para 1.0.0.NEXT. O diretório force-app é o padrão (e o único) para os pacotes, então, qualquer origem nele contida se torna parte do pacote. Depois de atualizado, o arquivo sfdx-project.json fica assim:
    {
       "packageDirectories": [
          {
             "path": "force-app",
             "default": true,
             "package": "dreamhouse",
             "versionName": "Version 1.0",
             "versionNumber": "1.0.0.NEXT"
          }
       ],
       "namespace": "",
       "sfdcLoginUrl": "https://login.salesforce.com",
       "sourceApiVersion": "50.0",
       "packageAliases": {
          "dreamhouse": "0Hoxxx"
       }
    }
  3. Salve o arquivo sfdx-project.json.
  4. No diretório dreamhouse-lwc, crie a versão do pacote, que associa os metadados ao pacote.
    O código do Apex em pacotes desbloqueados deve atender a um requisito mínimo de 75% de cobertura do código, antes que o pacote possa ser instalado em uma organização de produção. Nós não calculamos a cobertura de código neste exemplo, porque sabemos que o repositório de exemplo Dreamhouse LWC não tem testes do Apex suficientes.
    sfdx force:package:version:create -p dreamhouse -d force-app -k test1234 --wait 10 -v DevHub
    • -p é o alias do pacote que mapeia para o ID de pacote.
    • -d é o diretório que apresenta o conteúdo do pacote.
    • -k é a chave de instalação que impede que seu pacote seja instalado por pessoas não autorizadas.
  5. É comum que o processo para criar a versão do pacote leve alguns minutos. As mensagens de status que você vê informam o que está acontecendo. Quando a criação da versão do pacote for concluída, você verá esta mensagem.
    Successfully created the package version [08cxxx]. Subscriber Package Version Id: 04txxx.
    Package Installation URL: https://login.salesforce.com/packaging/installPackage.apexp?p0=04txxx
    As an alternative, you can use the "sfdx force:package:install" command.
  6. Observe que a seção packageAliases em sfdx-project.json tem uma nova entrada.
    "packageAliases": {
       "dreamhouse": "0Hoxxx",
       "dreamhouse@1.0.0-1": "04txxx"
    }
  7. Use o alias da versão do pacote para instalar a versão do pacote na organização temporária que você criou.
    sfdx force:package:install --wait 10 --publishwait 10 --package dreamhouse@1.0.0-1 -k test1234 -r -u MyScratchOrg 
    Pode demorar vários minutos para que a versão do pacote recém-criada fique disponível na organização temporária. A instalação começará assim que a versão do pacote estiver disponível. Quando a instalação do pacote for concluída, você verá esta mensagem. Pacote instalado com sucesso [04t3XXX]
  8. Depois que o pacote estiver instalado, abra a organização temporária para visualizá-lo.
    sfdx force:org:open -u MyScratchOrg
  9. Em Configuração, digite Pacotes instalados na caixa Busca rápida e selecione Pacotes instaladosMostra o diálogo Pacotes instalados comComo se trata de um pacote desbloqueado, você pode fazer alterações diretamente na organização temporária, extrair os metadados atualizados e, depois, criar a nova versão do pacote. Por enquanto, o aplicativo DreamHouse LWC já tem tudo o que é necessário, ou seja, podemos prosseguir e liberar o pacote.

Liberar a versão do pacote

Ainda não discutimos um recurso, o status do pacote. Quando os pacotes são criados, eles têm o status beta. Não é possível instalar pacotes beta em uma organização de produção. Trata-se de uma proteção para garantir que a versão do pacote lançada esteja pronta para a produção. Quando você souber que a versão está pronta para ganhar o mundo, basta promover o lançamento.

O exemplo de repositório Dreamhouse LWC que estamos usando nesta unidade não tem testes do Apex suficientes para atender ao requisito de 75% de  cobertura de código. Portanto, vamos pular a promoção e continuar usando a versão beta do pacote que você criou.

É assim que fica o comando de promoção de versão do pacote, mas se você tentar esse comando agora, receberá uma mensagem de erro.

sfdx force:package:version:promote -p dreamhouse@1.0.0-1 -v DevHub

Instalar a versão do pacote na organização

Por último, mas não menos importante, instale a versão do pacote na organização. Lembre-se: é possível instalar versões do pacote em organizações temporárias, sandboxes e Trailhead Playgrounds (organizações DE). Você pode instalar uma versão do pacote liberada em qualquer organização. Normalmente, neste estágio, você instalará a versão do pacote em uma sandbox, mas, para este exercício, iremos instalar o pacote no seu Trailhead Playground.

  1. Para instalar a versão do pacote em seu Trailhead Playground, você deve primeiro adicioná-lo à sua lista de organizações autorizadas.
    primeiro, você deve adicioná-lo à sua lista de organizações autorizadas.
    sfdx auth:web:login -a MyTP
    Sugerimos criar um alias para o Trailhead Playground, MyTP neste exemplo. Depois que você faz login na organização, o CLI se lembra das suas credenciais. Você só precisa se lembrar do alias da organização ao enviar os comandos seguintes. Caso não saiba o nome de usuário e a senha do Trailhead Playground, consulte Obter seu nome de usuário e redefinir sua senha.
  2. Instale a versão do pacote no Trailhead Playground.
    sfdx force:package:install --wait 10 --publishwait 10 --package dreamhouse@1.0.0-1 -k test1234 -r -u MyTP
  3. Abra o Trailhead Playground.
    sfdx force:org:open -u MyTP
  4. No Trailhead Playground, em Configuração, digite Pacotes instalados na caixa Busca rápida e selecione Pacotes instalados. Você também receberá um email que confirma a instalação bem-sucedida do pacote desbloqueado.
  5. Clique em dreamhouse e em Exibir componentesClicando em Exibir componentes de dreamhouse, você vê uma lista com todos os componentes do pacote.
  6. No Iniciador de aplicativos, encontre e selecione o aplicativo DreamHouse e confira alguns de seus recursos.
Continue a aprender de graça!
Inscreva-se em uma conta para continuar.
O que você ganha com isso?
  • Receba recomendações personalizadas para suas metas de carreira
  • Pratique suas habilidades com desafios práticos e testes
  • Monitore e compartilhe seu progresso com os empregadores
  • Conecte-se a orientação e oportunidades de carreira