Loading
Configuración y mantenimiento de su organización de Salesforce
Sustituir el método window.location

Sustituir el método window.location

La variable window.location es un método JavaScript utilizado para redirigir el navegador a una nueva página. El código JavaScript en una página de Visualforce que establezca directamente window.location no es compatible con Lightning Experience. Estas son las malas noticias. Las buenas noticias son que los métodos de navegación sforce.one hacen lo mismo y son compatibles con Lightning Experience.

Ediciones necesarias

Disponible en: Group Edition, Professional Edition, Enterprise Edition, Performance Edition, Unlimited Edition y Developer Edition
Permisos de usuario necesarios
Para crear, modificar o eliminar páginas de Visualforce: Personalizar aplicación

Debido a que window.location puede utilizarse de muchas maneras, no es posible tratar todas las posibilidades. Estudiemos un caso donde window.location se utiliza como un vínculo a la página de modificación de una cuenta. Luego podrá utilizar este ejemplo, incluyendo el código de ejemplo, como guía para solucionar otras apariciones de window.location en sus páginas. Si puede determinar el método que window.location está intentando hacer, hay posibilidades de que haya una solución con sforce.one.

  1. Localice window.location en el código de Visualforce.
    1. En Configuración, ingrese Visualforce en el cuadro Búsqueda rápida y, a continuación, seleccione Páginas de Visualforce.
    2. Haga clic en Modificar junto a la página de Visualforce.
    3. Busque en la marca de Visualforce lo siguiente: window.location.
      <apex:page standardController="Account" lightningStylesheets="true">   
        <apex:form >      
          <apex:pageBlock >
            <apex:pageBlockSection title="Edit">
              <apex:commandButton value="Edit" 
               onclick="window.location='/{!Account.Id}/e'; return false;"/>
            </apex:pageBlockSection>
          </apex:pageBlock>
        </apex:form> 
        <apex:detail />
      </apex:page>
  2. Determine dónde está redirigiendo window.location. Podrá determinar esto probando la página de Visualforce en Salesforce Classic.
  3. Encuentre el método sforce.one apropiado para sustituir window.location.
  4. Sustituya todas las instancias de window.location por la navegación sforce.one.
    <apex:page standardController="Account" lightningStylesheets="true">   
      <apex:form >    
        <apex:pageBlock >
          <apex:pageBlockSection title="Edit">
            <apex:commandButton value="Edit" 
             onclick="sforce.one.editRecord('{!Account.Id}');"/>
          </apex:pageBlockSection>
        </apex:pageBlock>
      </apex:form>    
      <apex:detail />
    </apex:page>
  5. Guarde sus cambios.
  6. Si se va a acceder a su página de Visualforce tanto en Salesforce Classic como en Lightning Experience, haga que ambas opciones estén disponibles. Utilice una declaración if para bifurcar el código.
    <apex:page standardController="Account" lightningStylesheets="true">  
       <script>
         function isLightningExperience(){
            if (UITheme.getUITheme() === 'Theme4d' || UITheme.getUITheme() === 'Theme4u'){
                sforce.one.editRecord('{!Account.Id}');
            } else {
                window.location='/{!Account.Id}/e';
            }
        }
       </script>     
       <apex:form >    
         <apex:pageBlock >
           <apex:pageBlockSection title="Edit">
             <apex:commandButton value="Edit" 
              onclick="javascript:isLightningExperience();return false;"/>
           </apex:pageBlockSection>
         </apex:pageBlock>
       </apex:form>    
       <apex:detail />       
    </apex:page>
 
Cargando
Salesforce Help | Article