Compartir a través de


Eventos de "representación" en objetos visuales de Power BI

Para certificar un objeto visual, debe incluir eventos de representación. Estos eventos permiten que los clientes de escucha (principalmente exportar a PDF y exportar a PowerPoint) sepan cuándo se representa el objeto visual y cuándo está listo para exportarse.

Importante

Cualquier objeto visual que exporte datos (por ejemplo, a un archivo de PowerPoint o .pdf) debe contener eventos de representación para asegurarse de que la exportación no comienza antes de que el objeto visual termine de representarse.

La API de eventos de representación consta de tres métodos para llamar durante la representación:

  • renderingStarted: llame a este método para indicar que se inició la representación. Llame siempre a este método como la primera línea del método de actualización, ya que es donde comienza el proceso de representación.

  • renderingFinished: llame a este método cuando la representación se complete correctamente para notificar a los agentes de escucha que la imagen del objeto visual está lista para su exportación. Esta llamada debe ser la última línea de código que se ejecuta cuando se actualiza el objeto visual. Suele ser la última línea del método de actualización, pero no siempre.

  • renderingFailed: llame a este método si se produce un problema durante la representación, para notificar a los agentes de escucha que la representación no se completó. Puede pasar una cadena opcional para proporcionar un motivo del error.

Nota

Los eventos de representación son un requisito para la certificación de objetos visuales. Sin ellos, el Centro de partners no aprobará el objeto visual para su publicación. Para obtener más información, consulte Requisitos de certificación.

Procedimiento para usar la API de eventos de representación

Para llamar a los métodos de representación, importe primero el IVisualEventService tipo.

  1. En el visual.ts archivo, agregue la siguiente importación:

    import IVisualEventService = powerbi.extensibility.IVisualEventService;
    
  2. En la IVisual clase , agregue un campo privado:

    private events: IVisualEventService;
    
  3. En el constructor método de la IVisual clase , inicialice el campo :

    this.events = options.host.eventService;
    

Ahora puede llamar a this.events.renderingStarted(options);, this.events.renderingFinished(options);y this.events.renderingFailed(options); cuando corresponda en el método de actualización .

Ciclo de vida de eventos de representación

Siga estas reglas en cada update() ciclo:

  1. Llame a renderingStarted cuando comience la representación.
  2. Llame exactamente a un método de finalización para ese ciclo:
    • renderingFinished cuando la representación se realiza correctamente o
    • renderingFailed cuando se produce un error en la representación.
  3. Para la representación asincrónica, llame renderingFinished solo después de completar la representación.

Importante

No deje que el update() método salga sin indicar la finalización. Después de llamar a renderingStarted, siempre debe llamar a renderingFinished o renderingFailed.

Patrones de implementación de código

Actualización sincrónica con control de errores

public update(options: VisualUpdateOptions): void {
  this.host.eventService.renderingStarted(options);

  try {
    this.renderView(options); // visual rendering logic
    this.host.eventService.renderingFinished(options);
  } catch (error) {
    this.host.eventService.renderingFailed(options, String(error));
    throw error;
  }
}

Actualización asincrónica con control de errores

public async update(options: VisualUpdateOptions): Promise<void> {
  this.host.eventService.renderingStarted(options);

  try {
    await this.renderAsync(options); // visual rendering logic
    this.host.eventService.renderingFinished(options);
  } catch (error) {
    this.host.eventService.renderingFailed(options, String(error));
    throw error;
  }
}

Cadena de promesas con .then().catch()

public update(options: VisualUpdateOptions): void {
  this.host.eventService.renderingStarted(options);

  this.renderAsync(options) // visual rendering logic
    .then(() => {
      this.host.eventService.renderingFinished(options);
    })
    .catch((error) => {
      this.host.eventService.renderingFailed(options, String(error));
      throw error;
    });
}