Delen via


Gebeurtenissen weergeven in Power BI-visuals

Als u een visual wilt laten certificeren, moet dit renderinggebeurtenissen bevatten. Met deze gebeurtenissen kunnen listeners (voornamelijk exporteren naar PDF en exporteren naar PowerPoint) weten wanneer de visual wordt weergegeven en wanneer deze gereed is voor export.

Belangrijk

Elke visual die gegevens exporteert (bijvoorbeeld naar een PowerPoint- of .pdf-bestand ) moet rendering-gebeurtenissen bevatten om ervoor te zorgen dat de export niet begint voordat de visual klaar is met renderen.

De API voor renderingsevenementen bestaat uit drie methoden om aan te roepen tijdens rendering:

  • renderingStarted: Roep deze methode aan om aan te geven dat de rendering is gestart. Roep deze methode altijd aan als de eerste regel van uw updatemethode, omdat daar het renderingproces begint.

  • renderingFinished: Roep deze methode aan wanneer het weergeven is voltooid, om listeners te informeren dat de afbeelding van de visual gereed is voor export. Deze aanroep moet de laatste coderegel zijn die wordt uitgevoerd wanneer de visual wordt bijgewerkt. Dit is meestal, maar niet altijd, de laatste regel van de updatemethode.

  • renderingFailed: Roep deze methode aan als er een probleem optreedt tijdens het weergeven, om listeners op de hoogte te stellen dat de rendering niet is voltooid. U kunt een optionele tekenreeks doorgeven om een reden voor de fout op te geven.

Notitie

Rendering-gebeurtenissen zijn een vereiste voor certificering van visuals. Zonder deze wordt uw visual niet goedgekeurd door het Partnercentrum voor publicatie. Zie certificeringsvereisten voor meer informatie.

De API voor rendering-gebeurtenissen gebruiken

Als u de renderingmethoden wilt aanroepen, importeert u eerst het IVisualEventService type.

  1. Voeg in het visual.ts bestand de volgende import toe:

    import IVisualEventService = powerbi.extensibility.IVisualEventService;
    
  2. Voeg in de IVisual klasse een privéveld toe:

    private events: IVisualEventService;
    
  3. Initialiseer het veld in de constructor methode van de IVisual klasse:

    this.events = options.host.eventService;
    

U kunt nu aanroepen this.events.renderingStarted(options);en this.events.renderingFinished(options);this.events.renderingFailed(options); waar nodig in uw updatemethode.

Levenscyclus van rendering-gebeurtenissen

Volg deze regels in elke update() cyclus:

  1. Aanroepen renderingStarted wanneer de rendering begint.
  2. Roep precies één voltooiingsmethode aan voor die cyclus:
    • renderingFinished wanneer het weergeven slaagt, of
    • renderingFailed wanneer het weergeven mislukt.
  3. Voor asynchrone rendering roept u renderingFinished alleen aan nadat de rendering is voltooid.

Belangrijk

Laat de update() methode niet afsluiten zonder signaleringsvoltooiing. Nadat u hebt gebeld renderingStarted, moet u altijd bellen renderingFinished of renderingFailed.

Code-implementatiepatronen

Synchrone update met foutafhandeling

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

Asynchrone update met foutafhandeling

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

Promise-keten met .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;
    });
}