Compartir a través de


Invalidar los mensajes de error predeterminados

Puede ocultar los mensajes de error predeterminados del análisis insertado de Power BI en los informes y, en su lugar, mostrar mensajes de error personalizados que se ajusten al diseño de la aplicación.

Por ejemplo, podría reemplazar este cuadro de diálogo de error predeterminado:

Captura de pantalla que muestra el cuadro de diálogo de error predeterminado del análisis insertado de Power BI.

Con este cuadro de diálogo de error personalizado:

Captura de pantalla que muestra un cuadro de diálogo de error personalizado.

Cómo invalidar errores

Para usar mensajes de error personalizados, en primer lugar oculte los mensajes de error predeterminados de análisis insertados de Power BI estableciendo la propiedad hideErrors en true en el objeto de configuración de análisis insertado de Power BI. Esta configuración para powerbi.embed(element, config) también incluye otras opciones y opciones. Para obtener más información, consulte Configuración de las opciones de informe.

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

Al ocultar los mensajes de error predeterminados, los diálogos de error y los mensajes ya no aparecen si se producen errores. Para que los usuarios de la aplicación obtengan respuestas coherentes y útiles cuando se produzcan errores, es responsable de controlar los eventos de error.

Para controlar los errores, primero obtenga los errores escuchando en el evento error:

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

La propiedad level de la interfaz IError le permite especificar qué tipos de errores se deben controlar:

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 errores son el tipo de error más grave, ya que hacen que el informe no responda. Asegúrese de controlar los errores de Fatal para evitar que los usuarios finales se enfrentan a informes no responde o rotos sin mensajería de errores.

Ejemplo

En el ejemplo de código siguiente se muestra cómo se pueden invalidar los errores escuchando y controlando eventos error. En el ejemplo no se muestran las funciones newAccessToken ni error.detailedMessage. Implemente sus propias funciones donde se indique.

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