重写默认错误消息

可以隐藏报表上的 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
    }
};

隐藏默认错误消息时,如果发生错误,则不再显示错误对话框和消息。 为使应用的用户在发生错误时获得一致且有用的响应,你负责处理错误事件。

若要处理错误,请先通过侦听 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);
    }
});