Skip to main content

Gerenciar a navegação

Objetivos de aprendizagem

Após concluir esta unidade, você estará apto a:
  • Descrever os três mecanismos “clássicos” do Visualforce para controle de navegação de uma página para outra.
  • Descrever quais dessas técnicas não funcionam no Lightning Experience.
  • Listar pelo menos três eventos de navegação do Lightning Experience e saber como enviá-los.

Gerenciando a navegação

O fluxo do aplicativo e a navegação, em muitos aspectos, constituem o ponto central do design do aplicativo. O Visualforce oferece uma série de maneiras de adicionar elementos de navegação e direcionar o fluxo do aplicativo. O Lightning Experience adiciona seu próprio fluxo do aplicativo, elementos de navegação e mecanismos para afetar o destino dos usuários quando eles estiverem usando o Salesforce.

A boa notícia é que a navegação “clássica” do Visualforce continua funcionando. A melhor notícia é que as páginas do seu Visualforce também podem se beneficiar dos novos mecanismos do Lightning Experience.

Antes de falarmos sobre detalhes da navegação no Visualforce e como você pode criá-la para funcionar no Salesforce Classic e no Lightning Experience, vamos falar um pouco sobre navegação em geral. O que queremos dizer exatamente com “navegação”?

O primeiro significado de navegação pode ser elemento da interface de usuário na tela. Você clica em algo e algo acontece. Por exemplo, você clica no item Contas no menu de navegação e vai para a página inicial do objeto Contas. Você clica no botão Novo e uma entrada de registro é exibida. Você escolhe uma ação personalizada de um menu de ações rápidas e inicia um processo personalizado. E assim por diante. Esses botões e itens de menu são elementos de navegação.

O design do sistema de navegação, a interface de usuário no Lightning, é bem diferente do Salesforce Classic. Não vamos falar aqui sobre essas diferenças, mas é bom se familiarizar com as mudanças de posicionamento das coisas ao alternar as duas experiências de usuário. Você pode saber mais sobre isso aqui no Trailhead, na unidade Navegando pelo Lightning Experience e pelas configurações.

Outro tipo de navegação menos visível é a parte do “algo acontece”. Nos bastidores, o Salesforce decide o que vai acontecer quando você seleciona um item em um menu ou clica em um link ou botão. Grande parte dessa navegação já está incorporada ao Salesforce, enquanto outros aspectos são personalizáveis, por exemplo, substituir ações com páginas do Visualforce. Mas toda essa navegação é gerenciada por código escrito pelo Salesforce.

E existe a navegação em seus próprios aplicativos, que usam seu código para controlar o fluxo de aplicativo. Quando a sua ação personalizada abre um formulário e o usuário clica em salvar, para onde você vai? Quando seu código em execução toma uma decisão sobre onde o usuário deve ir e o envia para lá. É sobre isso que vamos falar nesta unidade.

Navegação clássica do Visualforce

A navegação “clássica” do Visualforce pode ser resumida a “aquilo que acontece no final de um método de ação”. Os métodos de ação retornam um objeto PageReference com os detalhes que indicam para onde o usuário deve navegar. A estrutura do Visualforce, então, lida com os detalhes de envio da resposta certa de volta ao navegador do usuário. E temos boas notícias: tudo isso ainda funciona.

Lembre-se também de que o Controlador padrão retorna um PageReference de seus métodos de ação. Por isso, sua navegação atual, não importa se você está usando o Controlador padrão ou seu próprio código controlador personalizado, continua funcionando como previsto.

Navegação do Visualforce moderno

Mas a navegação do Visualforce clássico funciona! Por que ainda estamos falando desse assunto? Aliás, do que estamos falando? Só queremos dizer uma palavra. Uma palavrinha. Você está ouvindo? “JavaScript”.

O JavaScript é o futuro, e o futuro começa agora. Vários desenvolvedores do Visualforce usam muito o JavaScript em seus aplicativos, e esse uso só aumenta. O Visualforce clássico funciona, e continuará a funcionar por muito tempo. Porém, conforme os desenvolvedores adotam recursos do Visualforce como Objetos remotos e JavaScript Remoting, uma parte maior do comportamento dos aplicativos migra do servidor, em que PageReference é a regra, para o navegador e JavaScript, onde PageReference não existe.

No mundo do Lightning Experience (e do aplicativo Salesforce), há regras e ferramentas para criar a navegação em JavaScript. Daqui a pouco falaremos das regras, que abordam principalmente o que não fazer. Antes de tudo, vamos falar sobre como fazer as coisas do jeito certo.

O Lightning Experience gerencia a navegação usando eventos. A estrutura de evento de navegação é disponibilizada como um objeto de utilidade do JavaScript que oferece diversas funções para simplificar a criação da navegação programática. O objeto sforce.one é automaticamente adicionado às páginas do Visualforce quando elas são executadas no Lightning Experience. Esse objeto oferece diversas funções que acionam eventos de navegação em que as funções são chamadas. Para usar essas funções, você pode chamá-las diretamente do código JavaScript da sua página ou anexar as chamadas como manipuladores de clique (ou de outros itens) nos elementos da página.

Importante

Importante

O objeto sforce.one não está disponível no Salesforce Classic. Qualquer código que o use deve ser testado para verificar a existência de sforce.one primeiro.

O objeto sforce.one proporciona as funções abaixo. Faça referência à função usando a notação com pontos do objeto sforce.one. Por exemplo: sforce.one.navigateToSObject(...).
Função Descrição
back([refresh ]) Navega até o estado anterior salvo no histórico do sforce.one. É equivalente a clicar no botão Voltar do navegador.
navigateToSObject(recordId [, view ]) Navega para um registro sObject especificado por recordId.
navigateToURL(url [, isredirect ]) Navega até o URL especificado.
navigateToFeed(subjectId, type ) Navega para o feed de type especificado, no escopo de subjectId.
navigateToFeedItemDetail(feedItemId ) Navega até o item do feed específico, feedItemId, e a qualquer comentário associado.
navigateToRelatedList(relatedListId, parentRecordId ) Navega até a lista relacionada de parentRecordId.
navigateToList(listViewId, listViewName, scope ) Navega para o modo de exibição de lista especificado por listViewId, que é a ID do modo de exibição de lista a ser mostrada.
createRecord(entityName [, recordTypeId ]) Abre a página para criar um novo registro para o entityName especificado, por exemplo, “Account” ou “MyObject__c”.
editRecord(recordId ) Abre a página para editar o registro especificado por recordId.

Para saber mais sobre o uso dessas funções e os parâmetros aceitos por elas, consulte Navegação e mensagens com o objeto sforce.one nos Recursos desta unidade.

A primeira regra para criar uma navegação do Visualforce em JavaScript é: não configurar window.location diretamente. A segunda regra para criar uma navegação do Visualforce em JavaScript é: não configurar window.location diretamente.

Não configurar window.location diretamente

OK, entendido, mas qual é a grande questão aqui? É muito simples. Uma vez no Lightning Experience, sua página não tem um window.location para configurar! Lembra daquela discussão anterior sobre o “contêiner” do Visualforce estando dentro de um iframe, e o Lightning Experience sendo um tipo de health club? (SPA—aplicativo de página única.) Esta é uma das coisas que resultam disso. O iframe do Visualforce não tem acesso direto ao valor window.location, portanto você não pode configurá-lo. Se seu código depende da configuração dele, irá quebrar. Ou seja, ações que desencadeiam a navegação configurando window.location irão simplesmente parar de navegar para o seu destino pretendido.

Há realmente uma maneira de contornar essa restrição, mas você não deve usá-la. O motivo é que se você contornar as funções de navegação em sforce.one, seus eventos de navegação não serão rastreados na pilha de navegação do Lightning Experience. Essa pilha fornece recursos úteis, como botões Voltar, que diz respeito a redirecionamentos, e similares. Uma série de recursos no Lightning Experience (e especialmente no aplicativo Salesforce) precisa que essa pilha contenha todos os eventos de navegação. Vale a pena assegurar o uso correto da pilha.

A questão do Salesforce Classic

Sim, ainda tem essa...coisa. Infelizmente, o objeto do utilitário sforce.one não está disponível quando sua página é executada no Salesforce Classic. Neste contexto, você deve usar o window.location. A boa notícia é que, no Salesforce Classic, o window.location está disponível. A má notícia é que essa limitação significa que você terá que adicionar um bloco if feioso no seu código. Considere envolver suas funções de navegação em métodos de utilitário que lidem com essa complexidade, de modo que sua lógica de navegação principal possa ser clara.

URLs estáticos

Não use URLs estáticos para os recursos do Salesforce. Isto é, se você estiver adicionando um link para editar um registro de contato, não crie o link compilando uma string com um padrão estático como link = '/' + accountId + '/e'. Em alguns contextos isso funciona, mas em outros não. Em vez disso, tente uma das seguintes abordagens:
  • Na marcação Visualforce, use {!URLFOR($Action.Contact.Edit, recordId)}
  • No JavaScript, use navigateToSObject(recordId)
Existem ações e funções para visualizar, criar, editar e etc. Use-as em vez de string de URL.

Recursos

Compartilhe seu feedback do Trailhead usando a Ajuda do Salesforce.

Queremos saber sobre sua experiência com o Trailhead. Agora você pode acessar o novo formulário de feedback, a qualquer momento, no site Ajuda do Salesforce.

Saiba mais Continue compartilhando feedback