web-dev-qa-db-fra.com

Visualforce Page incorporée dans une page de détail devant être redirigée vers une autre page

J'ai une page Visualforce intégrée à la page de détail des opportunités.

La page contient un bouton de commande qui appelle une méthode dans l’extension du contrôleur de support.

Une fois la méthode de sauvegarde terminée, comment puis-je rediriger l'utilisateur vers une autre page?  

Je peux renvoyer une référence de page à partir de la méthode, mais elle ne fera que rediriger l'iframe dans lequel la page Visualforce incorporée est affichée.

Dans l'idéal, j'aimerais actualiser la fenêtre de niveau supérieur, mais je crains que des problèmes inter-domaines ne se produisent si la page Visualforce incorporée ne se trouve pas dans le même domaine que la fenêtre parent.


En guise de test de base, j'ai essayé d'ajouter les éléments suivants à la page Visualforce intégrée:

<script>
    window.setTimeout(testRedirect,2000);
    function testRedirect() {
        top.location.reload();
    }
</script>

Cela a abouti à ce que Chrome enregistre l'erreur:

Tentative JavaScript non sécurisée pour accéder au cadre avec l'URL https://na2.salesforce.com/006400000000000 depuis le cadre avec l'URL https: //ab2.na2.visual.force .com/servlet/servlet.Integration? lid = 066400000000000 & ic = 1 . Les domaines, les protocoles et les ports doivent être identiques.

Les domaines diffèrent donc pour la page Visualforce.

13
Daniel Ballinger

C'est un peu plus de code, mais cela fonctionne pour moi dans tous les navigateurs, et je ne reçois aucune sorte d'erreur entre domaines.

Extension du contrôleur:

public class Opp_Ext {
    private ApexPages.StandardController stdController;
    public String redirectUrl {public get; private set;}
    public Boolean shouldRedirect {public get; private set;}

    public Opp_Ext(ApexPages.StandardController stdController) {
        this.stdController = stdController;
        shouldRedirect = false;
    }

    public PageReference doStuffAndRedirect() {
        shouldRedirect = true;
        redirectUrl = stdController.view().getUrl();
        return null;
    }
}

VF Page:

<apex:page standardController="Opportunity" extensions="Opp_Ext" >
    <apex:form >
        <apex:commandButton value="Do Stuff" action="{!doStuffAndRedirect}" rerender="redirectPanel" />
        <apex:outputPanel id="redirectPanel" >
            <apex:outputText rendered="{!shouldRedirect}">
                <script type="text/javascript">
                    window.top.location.href = '{!redirectUrl}';
                </script>
            </apex:outputText>
        </apex:outputPanel>
    </apex:form>
</apex:page>
14
JCD

Essayez en utilisant PageReference Class

En outre, setRedirect sera utile

Échantillon: 

public class mySecondController {
Account account;

public Account getAccount() {
    if(account == null) account = new Account();
    return account;
}

public PageReference save() {
    // Add the account to the database.  

    insert account;
    // Send the user to the detail page for the new account. 

    PageReference acctPage = new ApexPages.StandardController(account).view();
    acctPage.setRedirect(true);
    return acctPage;
}

}

0
Martin Borthiry