Udostępnij za pośrednictwem


Zastępowanie domyślnych komunikatów o błędach

Możesz ukryć domyślne komunikaty o błędach osadzonej analizy usługi Power BI w raportach, a zamiast tego wyświetlać niestandardowe komunikaty o błędach pasujące do projektu aplikacji.

Możesz na przykład zastąpić to domyślne okno dialogowe błędu:

Zrzut ekranu przedstawiający domyślne okno dialogowe błędu osadzonej analizy usługi Power BI.

W tym niestandardowym oknie dialogowym błędu:

Zrzut ekranu przedstawiający okno dialogowe błędu niestandardowego.

Jak zastąpić błędy

Aby użyć niestandardowych komunikatów o błędach, najpierw ukryj domyślne komunikaty o błędach osadzonej analizy usługi Power BI, ustawiając właściwość hideErrors na true w obiekcie konfiguracji osadzonej analizy usługi Power BI. Ta konfiguracja powerbi.embed(element, config) zawiera również inne ustawienia i opcje. Aby uzyskać więcej informacji, zobacz Konfigurowanie ustawień raportu.

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

Po ukryciu domyślnych komunikatów o błędach okna dialogowe błędów i komunikaty nie będą już wyświetlane w przypadku wystąpienia błędów. Aby użytkownicy aplikacji otrzymywali spójne i przydatne odpowiedzi w przypadku wystąpienia błędów, odpowiadasz za obsługę zdarzeń błędów.

Aby obsłużyć błędy, najpierw uzyskaj błędy, słuchając zdarzenia error:

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

Właściwość level w interfejsie IError umożliwia określenie typów błędów do obsługi:

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 błędy są najpoważniejszym typem błędu, ponieważ sprawiają, że raport nie odpowiada. Pamiętaj, aby obsługiwać błędy Fatal, aby uniemożliwić użytkownikom końcowym wyświetlanie nieodpowiadających lub uszkodzonych raportów bez komunikatów o błędach.

Przykład

Poniższy przykład kodu pokazuje, jak można zastąpić błędy przez nasłuchiwanie i obsługę zdarzeń error. W przykładzie nie są wyświetlane funkcje newAccessToken ani error.detailedMessage. Zaimplementuj własne funkcje tam, gdzie wskazano.

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