Navigazione da lwc all'interno di una pagina di forza visiva

Aug 24 2020

Ho sovrascritto un pulsante Salesforce standard con la pagina Visualforce. Sto usando un componente lwc al suo interno usando ltng:out. Quindi dal componente fulmine voglio passare a un'altra pagina ma non sono in grado di farlo. Nell'aura che usavo sforce.one.navigatetourlper situazioni simili. Il pulsante Indietro del browser non funziona correttamente in Lightning per pagine Vf?

Se uso, window.locationottengo questa finestra all'interno dell'interfaccia utente della finestra.

Come tornare in sicurezza all'interfaccia utente di Salesforce Lightning da qui. Ho usato la navigazione lampo che non funziona all'interno di ltng: out.

Il codice è piuttosto semplice:

<aura:application extends="ltng:outApp" access="GLOBAL">
    <aura:dependency resource="c:accountDelete" />
</aura:application> 

cmp.html

<template>
    <lightning-button label="goThere" onclick={handleNavigation}></lightning-button>
</template>

cmp.js

import { LightningElement, api, wire  } from 'lwc';
    handleNavigation(){
        window.location = '/001';
    }

Pagina Visualforce:

<apex:page standardController="Account"  sidebar="false">
<apex:includeLightning />    
<div id="LightningComponentid" />    
    <script>
        $Lightning.use("c:AccountDeleteApp", function() { $Lightning.createComponent("c:accountDelete",
            { 
            "id" : "{!$CurrentPage.parameters.id}"
            },
            "LightningComponentid",
            function(cmp) {});
        });
    </script>
</apex:page>

Risposte

1 ManjotSingh Aug 25 2020 at 15:36

Ho trovato una soluzione passando la funzione come attributo in lwc.

<apex:page standardController="Account"  sidebar="false">
    <apex:includeLightning />    
    <div id="LightningComponentid" />    
    <script>
    $Lightning.use("c:AccountDeleteApp", function() { $Lightning.createComponent("c:accountDelete",
          { 
            "id" : "{!$CurrentPage.parameters.id}",
            "navigateToList" : navigateToList
          },
          "LightningComponentid",
          function(cmp) {});
    });
    function navigateToList(url) {
      if(typeof sforce != 'undefined' && sforce && sforce.one){
         sforce.one.navigateToURL(url);
      } else {
         window.location.href = url;
      }
    }
    </script>
</apex:page>

Quindi apportare modifiche in LWC

import { LightningElement, api  } from 'lwc';
export default class AccountSetDelete extends LightningElement {
    @api id;
    @api navigateToList;
    handleNavigation(){
       this.navigateToList('/001');
    }
}

Quindi la soluzione è passare un riferimento alla funzione dalla pagina vf a lwc e quindi chiamare quel metodo da lwc e usarlo

sforce.one.navigateToURL

nelle pagine vf.