Freigeben über


Außerkraftsetzen von Standardfehlermeldungen

Sie können die standardmäßigen Fehlermeldungen der eingebetteten Power BI-Analyse in Berichten ausblenden und stattdessen benutzerdefinierte Fehlermeldungen anzeigen, die ihrem App-Design entsprechen.

Beispielsweise könnten Sie dieses Standardfehlerdialogfeld ersetzen:

Screenshot mit dem Standardfehlerdialogfeld für eingebettete Power BI-Analysen.

Mit diesem benutzerdefinierten Fehlerdialogfeld:

Screenshot mit einem benutzerdefinierten Fehlerdialogfeld.

Außerkraftsetzen von Fehlern

Um benutzerdefinierte Fehlermeldungen zu verwenden, blenden Sie zuerst die standardmäßigen eingebetteten Power BI-Analysefehlermeldungen aus, indem Sie die hideErrors-eigenschaft auf true im Power BI Embedded Analytics-Konfigurationsobjekt festlegen. Diese Konfiguration für powerbi.embed(element, config) enthält auch andere Einstellungen und Optionen. Weitere Informationen finden Sie unter Konfigurieren von Berichtseinstellungen.

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

Wenn Sie die Standardfehlermeldungen ausblenden, werden Fehlerdialogdialoge und Meldungen nicht mehr angezeigt, wenn Fehler auftreten. Damit die Benutzer Ihrer App konsistente und hilfreiche Antworten erhalten, wenn Fehler auftreten, sind Sie für die Behandlung von Fehlerereignissen verantwortlich.

Um Fehler zu behandeln, rufen Sie zuerst die Fehler ab, indem Sie auf das error-Ereignis lauschen:

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

Mit der level-Eigenschaft auf der IError--Schnittstelle können Sie angeben, welche Fehlertypen behandelt werden sollen:

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 Fehler sind der schwerwiegendste Fehlertyp, da sie den Bericht nicht reagieren lassen. Achten Sie darauf, Fatal Fehler zu behandeln, um zu verhindern, dass Endbenutzer nicht reagierende oder fehlerhafte Berichte ohne Fehlermeldungen auftreten.

Beispiel

Im folgenden Codebeispiel wird veranschaulicht, wie Sie Fehler außer Kraft setzen können, indem Sie error Ereignisse überwachen und behandeln. Im Beispiel werden die funktionen newAccessToken oder error.detailedMessage nicht angezeigt. Implementieren Sie Ihre eigenen Funktionen, wo angegeben.

// 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);
    }
});