establecer la página activa en el informe con la API de JavaScript.

Un usuario Pregunto ✅

skancharla

Hola,

Tengo dos páginas en mi informe. Quiero configurar la segunda página como página activa con api.

Intenté hacerlo en la configuración de incrustación y también por separado con el nombre de la página, pero la segunda página no está configurada como activa.

Algunas ideas.

var embedConfiguration = {
tipo: reportType,
id: reportId,
accessToken: accessToken,
embedUrl: embedUrl,
// pageName: pageName
};
var $ reportContainer = $ (‘# reportContainer’);
var report = powerbi.embed ($ reportContainer.get (0), embedConfiguration);

const page = report.page (pageName);
page.setActive ();

Gracias.

skancharla

En respuesta a Eric_Zhang

Gracias @Eric_Zhang.

Pude resolver esto y configurar la página dinámicamente.

En lugar de buscar la página usando el nombre de la página como se menciona en mi publicación inicial, obtuve una matriz de todas las páginas y luego configuré la página que necesita estar activa.

Mi código anterior:

const page = report.page (pageName);
page.setActive ();

Mi código actual:

var paginas = [];

report.getPages (). luego (función (reportPages) {
páginas = reportPages;
});

paginas[1].setActive ();

Espero que esto ayude a alguien que visite aquí por el mismo problema.

Estas llamando page.setActive () antes de que se cargue el informe. Debe esperar hasta que se active el evento de informe cargado. Además, debe utilizar la carga por fases para poder configurar la página activa en la página 2 antes de que el informe se muestre por primera vez al usuario. Intente algo como esto.

// preload preload pbie scripts on this page
var preloadConfig = {
  type: 'report',
  baseUrl: 'https://embedded.powerbi.com/reportEmbed',
};

var preloadElement = powerbi.preload(preloadConfig);

preloadElement.onload(function () {
  console.log("pbie scripts now preloaded into this page");
});


// data required for embedding Power BI report
var embedReportId = "2cf7c5c5-4e1a-4df7-a2a6-21...";
var embedUrl = "https://app.powerbi.com/reportEmbed?reportId=2cf7c5c5-...";
var accessToken = "H4sIAAAAAAAEAB1WtQ7sCBL8l5fOSmZaaQMzMzszM49xdf9-o8076K...";

// Get models object to access enums for embed configuration
var models = window['powerbi-client'].models;

var config = {
  type: 'report',
  id: embedReportId,
  embedUrl: embedUrl,
  accessToken: accessToken,
  tokenType: models.TokenType.Embed,
};

// Get a reference to the embedded report HTML element
var reportContainer = document.getElementById('embedContainer');

// call load() instead of embed() to load the report while delaying the rendering process
var report = powerbi.load(embedContainer, config);

// when loaded event occurs, set current page then call render()
report.on("loaded", function () {
  console.log("loaded event executing");
  // call to get Pages collection
  report.getPages().then(
    function (pages) {
      // inspect pages in browser console
      console.log(pages);
      // display specific page in report
      var startPage = pages[1]; // this selects the second page
      config.pageName = startPage.name;
      // Call report.render() to display report
      report.render(config);
    });
});

slawek1151

La solución más sencilla es:

    var report = powerbi.embed(reportContainer, config);

    report.on('loaded', function () {
        report.getPages().then(function (pages) {
            pages[1].setActive();
        });
    });

o incluso más simple en ES6

    const report = powerbi.embed(reportContainer, config);

    report.on('loaded', () => {
        report.getPages().then(pages => pages[1].setActive());
    });

report.getPages () al principio no funciona porque el informe en sí no está completamente cargado todavía. Solo para personas que desean establecer una página al principio.

skizofre3e

En respuesta a slawek1151

el problema es que esto no es fácil de usar, la primera página se carga … luego se cambia a la página x.

No entiendo por qué la documentación dice algo y cuando puede implementarlo, no funciona.

updateSettings para la configuración regional no funciona también … 😕

@skancharla

La documentación presenta la función como lo hizo en su código, sin embargo, tampoco puedo establecer una página predeterminada.
Según mi búsqueda, hay una demostración en línea, que muestra que esta función realmente funciona.
Puede verificar lo que hace la demostración en el archivo js
https://microsoft.github.io/PowerBI-JavaScript/demo/app/defaults.js

Estoy investigando sobre esto y compartiría cualquier actualización que reciba.

skancharla

En respuesta a Eric_Zhang

Gracias @Eric_Zhang.

Pude resolver esto y configurar la página dinámicamente.

En lugar de buscar la página usando el nombre de la página como se menciona en mi publicación inicial, obtuve una matriz de todas las páginas y luego configuré la página que necesita estar activa.

Mi código anterior:

const page = report.page (pageName);
page.setActive ();

Mi código actual:

var paginas = [];

report.getPages (). luego (función (reportPages) {
páginas = reportPages;
});

paginas[1].setActive ();

Espero que esto ayude a alguien que visite aquí por el mismo problema.

bensalemc

En respuesta a skancharla

Hola,

Estoy enfrentando el mismo problema y esto no me funciona.
Recibo un error que dice «La propiedad ‘getPages’ no existe en el tipo ‘Insertar'».

¿Tienes idea de cómo solucionar esto?

Gracias.
Cyrine.

Daweins

En respuesta a skancharla

Resucitando esta publicación anterior, pero yo mismo lo golpeé y encontré una solución razonable. La configuración de pageName funciona, pero el valor requerido no es el «nombre para mostrar» que ve en PowerBI, sino una ID de sección interna. Puede obtener este valor accediendo al informe en la versión web de PowerBI y examinando la URL.
Por ejemplo, para mi informe a continuación, mi ID de grupo es b5801 … a4f, mi ID de informe es 634f … 054b y mi nombre de página es ReportSection50033 … a22c

https: //dave.powerbi.com/groups/b5801af2-7111-4b4a-b3c2-603b49af7a4f/reports/634f02e3-0f39-4fcb-8936 …

Si bien es un poco feo, esto le permite omitir una carga de doble página. Estaba teniendo problemas con su solución anterior, ya que depende del momento en que se cargue el informe. Logré una solución viable colocando el establecedor de páginas en un evento cargado de informe, pero no me gustó la experiencia del usuario, ya que la página predeterminada (lo que sea que haya editado en último lugar) tendría que cargarse antes de que se cargue la página deseada. El uso del método directo con la sección de informes interna {ID} funcionó mucho más limpio.

DanT

En respuesta a Daweins

Gracias por compartir. Esto me funciona perfectamente.

Además, para alguien que tiene el mismo problema con el marcador, me gustaría agregar que la configuración del marcador funciona de la misma manera. La configuración del nombre del marcador simplemente no funciona durante la carga. He estado buscando las soluciones. Y finalmente funcionó cuando probé también con el GUID en la URL, en lugar del nombre del marcador. Como esto

embedConfig = {

‘marcador’:{
«nombre»: «Marcadorfdc07f ******* 120»
}

Puede obtener el GUID en la URL con su marcador de destino activado.

app.powerbi.com/groups/…/ReportSectiond…?bookmarkGuid=Marcador6 … 1

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *