다음을 통해 공유


기본 오류 메시지 재정의

보고서에서 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 이벤트를 수신 대기하고 처리하여 오류를 재정의하는 방법을 보여 줍니다. 이 예제에서는 newAccessToken 또는 error.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);
    }
});