共用方式為


覆寫預設錯誤訊息

您可以在報表上隱藏 Power BI 內嵌分析預設錯誤訊息,並改為顯示符合應用程式設計的自定義錯誤訊息。

例如,您可以取代這個預設錯誤對話框:

顯示Power BI內嵌分析預設錯誤對話框的螢幕快照。

使用此自訂錯誤對話框:

顯示自定義錯誤對話框的螢幕快照。

如何覆寫錯誤

若要使用自定義錯誤訊息,請先將 hideErrors 屬性設定為 Power BI 內嵌分析組態物件中的 true,以隱藏預設的 Power BI 內嵌分析錯誤訊息。 此 powerbi.embed(element, config) 組態也包含其他設定和選項。 如需詳細資訊,請參閱 設定報表設定

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

當您隱藏預設的錯誤訊息時,如果發生錯誤,錯誤對話框和訊息就不會再出現。 若要讓 app 的使用者在發生錯誤時取得一致且實用的回應,您必須負責處理錯誤事件。

若要處理錯誤,請先接聽 error 事件來取得錯誤:

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

IError 介面上的 level 屬性可讓您指定要處理的錯誤類型:

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 錯誤是最嚴重的錯誤類型,因為它們會使報告沒有回應。 請務必處理 Fatal 錯誤,以防止終端使用者面對沒有回應或中斷的報告,而沒有任何錯誤訊息。

下列程式代碼範例示範如何藉由接聽和處理 error 事件來覆寫錯誤。 此範例不會顯示 newAccessTokenerror.detailedMessage 函式。 實作指出的您自己的函式。

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