Поделиться через


Переопределение сообщений об ошибках по умолчанию

Вы можете скрыть сообщения об ошибках встроенной аналитики Power BI по умолчанию в отчетах и вместо этого отображать пользовательские сообщения об ошибках, которые соответствуют дизайну приложения.

Например, можно заменить это диалоговое окно ошибки по умолчанию:

снимок экрана: диалоговое окно ошибки встроенной аналитики Power BI по умолчанию.

С помощью этого настраиваемого диалогового окна ошибки:

снимок экрана: диалоговое окно пользовательской ошибки.

Переопределение ошибок

Чтобы использовать пользовательские сообщения об ошибках, сначала скрыть сообщения об ошибках встроенной аналитики Power BI по умолчанию, задав свойство hideErrors для 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
});

Свойство level в интерфейсе IError позволяет указать, какие типы ошибок следует обрабатывать:

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