Compartilhar páginas do Visualforce entre os ambientes Classic e Lightning Experience
Objetivos de aprendizagem
- Citar dois benefícios do compartilhamento de páginas entre o Salesforce Classic e o Lightning Experience.
- Descrever a diferença entre o contexto de interface de usuário solicitado pelo usuário e o contexto de interface de usuário em que o usuário realmente está.
- Descrever três maneiras diferentes de testar e determinar o contexto de interface de usuário do usuário atual.
Como compartilhar páginas do Visualforce entre os ambientes Classic e Lightning Experience
No entanto, é perfeitamente razoável querer um comportamento ligeira ou significativamente diferente ou um estilo que seja baseado no contexto da experiência de usuário em que a página é executada. Nesta unidade, veremos diversas formas de criar páginas que funcionem corretamente em todas as experiências de usuário e como seu código pode detectar e fazer alterações para contextos específicos.
Detectar o contexto da experiência de usuário na marcação Visualforce e responder ao mesmo
- Theme1 – Tema obsoleto do Salesforce
- Theme2 – Tema da interface de usuário do Salesforce Classic 2005
- Theme3 – Tema da interface de usuário do Salesforce Classic 2010
- Theme4d – Tema do Salesforce “Lightning Experience” moderno
- Theme4t – Tema do aplicativo móvel Salesforce
- Theme4u – Tema de console do Lightning
- PortalDefault – Tema do Portal de clientes do Salesforce
- Webstore – Tema do Salesforce AppExchange
Ir além das noções básicas
Esta é uma maneira incomum de usar <apex:variable>, pois, na verdade, não estamos interessados no valor da variável criada. O que queremos é apenas um componente que não renderize nenhuma saída própria para encapsular o componente <apex:stylesheet>. Você pode pensar nisso como um “empréstimo” de <apex:variable>, de seu atributo rendered, ao componente <apex:stylesheet> encapsulado.
O fato de não estarmos interessados na própria variável é uma boa coisa, pois outro aspecto incomum de se usar o componente <apex:variable> para encapsular outra coisa é que a variável não é criada de fato! Recurso ou bug? Vamos chamá-lo apenas de... comportamento indefinido e evitar usar a variável uiTheme em outros lugares.
Detectando o contexto da experiência de usuário no JavaScript e respondendo ao mesmo
Para detectar o que o usuário vê no JavaScript, usamos um método similar para determinar o contexto da experiência do usuário atual no Visualforce. Chame a variável global UITheme.getUITheme() para retornar um valor que identifique o tema da interface do usuário atual.
Aqui o código verifica se o contexto da experiência do usuário atual é o tema do Lightning Experience.
Determinando o contexto da experiência de usuário no Apex
- Theme1 – Tema obsoleto do Salesforce
- Theme2 – Tema da interface de usuário do Salesforce Classic 2005
- Theme3 – Tema da interface de usuário do Salesforce Classic 2010
- Theme4d – Tema do Salesforce “Lightning Experience” moderno
- Theme4t – Tema do aplicativo móvel Salesforce
- Theme4u – Tema de console do Lightning
- PortalDefault – Tema do Portal de clientes do Salesforce
- Webstore – Tema do Salesforce AppExchange
Usar estes métodos no código do controlador do lado do servidor deve ser raro, pelo menos em comparação a fornecer uma marcação Visualforce ou código JavaScript diferente. Recomenda-se que o código do seu controlador e extensão do controlador seja neutro em termos de contexto UX. Deixe que seu código front-end, quer no Visualforce quer no JavaScript, lide com as diferenças de interface de usuário.
Consultando no Lightning Experience via SOQL e API Access
Não recomendamos consultar a preferência de Lightning Experience do usuário de forma direta. O resultado diz qual é a configuração preferida atual do usuário, e não qual experiência de usuário realmente está em sua tela. Há vários casos de uso em que o valor de preferência pode não refletir a experiência de usuário que realmente está sendo fornecida. Para determinar a experiência de usuário real que é fornecida na solicitação atual, utilize $User.UIThemeDisplayed ou UserInfo.getUiThemeDisplayed().