Partager via


Remplacer les messages d’erreur par défaut

Vous pouvez masquer les messages d’erreur d’analytique incorporée Power BI par défaut sur les rapports, et afficher plutôt des messages d’erreur personnalisés qui correspondent à la conception de votre application.

Par exemple, vous pouvez remplacer cette boîte de dialogue d’erreur par défaut :

Capture d’écran montrant la boîte de dialogue d’erreur d’analytique incorporée Power BI par défaut.

Avec cette boîte de dialogue d’erreur personnalisée :

Capture d’écran montrant une boîte de dialogue d’erreur personnalisée.

Comment remplacer les erreurs

Pour utiliser des messages d’erreur personnalisés, masquez d’abord les messages d’erreur d’analytique incorporée Power BI par défaut en définissant la propriété hideErrors sur true dans l’objet de configuration d’analytique incorporée Power BI. Cette configuration pour powerbi.embed(element, config) inclut également d’autres paramètres et options. Pour plus d’informations, consultez Configurer les paramètres de rapport.

let config = {
    type: 'report',
    tokenType: models.TokenType.Embed,
    accessToken: accessToken,
    embedUrl: embedUrl,
    id: embedReportId,
    permissions: permissions,
    settings: {
        hideErrors: true
    }
};

Lorsque vous masquez les messages d’erreur par défaut, les boîtes de dialogue d’erreur et les messages ne s’affichent plus si des erreurs se produisent. Pour que les utilisateurs de votre application obtiennent des réponses cohérentes et utiles lorsque des erreurs se produisent, vous êtes responsable de la gestion des événements d’erreur.

Pour gérer les erreurs, commencez par obtenir les erreurs en écoutant l’événement error :

report.off("error");
report.on("error", function(event) {
    // Handle errors
});

La propriété sur l’interface IError vous permet de spécifier les types d’erreurs à gérer :

interface IError {
    message: string;
    detailedMessage?: string;
    errorCode?: string;
    level?: TraceType;
    technicalDetails?: ITechnicalDetails;
}

enum TraceType {
    Information = 0,
    Verbose = 1,
    Warning = 2,
    Error = 3,
    ExpectedError = 4,
    UnexpectedError = 5,
    Fatal = 6,
}

Fatal erreurs sont le type d’erreur le plus grave, car ils ne répondent pas au rapport. Veillez à gérer Fatal erreurs pour empêcher les utilisateurs finaux d’être confrontés à des rapports non satisfaits ou rompus sans message d’erreur.

Exemple

L’exemple de code suivant montre comment remplacer les erreurs en écoutant et en gérant les événements error. L’exemple ne montre pas les fonctions newAccessToken ou error.detailedMessage. Implémentez vos propres fonctions lorsqu’elle est indiquée.

// Embed the loadConfiguration that hides the default errors.
let config = {
    type: 'report',
    tokenType: models.TokenType.Embed,
    accessToken: accessToken,
    embedUrl: embedUrl,
    id: embedReportId,
    permissions: permissions,
    settings: {
        hideErrors: true
    }
};

// Get a reference to the embedded report HTML element.
let embedContainer = $('#embedContainer')[0];

// Embed the report and display it within the div container.
let report = powerbi.embed(embedContainer, config);

// Set report.off to remove any pre-existing error event handler.
report.off("error");

// Set report.on to add the new error event handler.
report.on("error", function(event) {
    const error = event.detail;

    // If the error level isn't Fatal, log the error and continue.
    if (error.level !== models.TraceType.Fatal) {
        console.error(error);
        return;
    }

    // If the Fatal error is TokenExpired, refresh the token.
    if (error.message === models.CommonErrorCode.TokenExpired) {
        // Implement your own function here.
        let newAccessToken = refreshToken();
        
        // Set the new access token.
        report.setAccessToken(newAccessToken);
    } else {
        // If the error isn't TokenExpired, show the custom
        // dialog with detailed error message in the iframe.
        // Implement your own function here.
        showError(error.detailedMessage);
    }
});