Sdílet prostřednictvím


Vykreslování událostí ve vizuálech Power BI

Aby bylo možné vizuál certifikovat, musí obsahovat události vykreslování. Tyto události umožňují naslouchacím procesům (především export do PDF a exportu do PowerPointu) zjistit, kdy se vizuál vykresluje a kdy je připravený k exportu.

Důležité

Každý vizuál, který exportuje data (například do powerpointového nebo .pdf souboru), musí obsahovat události vykreslování, aby se zajistilo, že export nezačne před dokončením vykreslování vizuálu.

Rozhraní API událostí vykreslování se skládá ze tří metod volání během vykreslování:

  • renderingStarted: Voláním této metody označte, že vykreslování začalo. Vždy volejte tuto metodu jako první řádek vaší metody aktualizace, protože to je místo, kde proces vykreslování začíná.

  • renderingFinished: Voláním této metody při úspěšném vykreslení upozorněte naslouchací procesy, že je obrázek vizuálu připravený k exportu. Toto volání by mělo být posledním řádkem kódu, který se spustí při aktualizaci vizuálu. Obvykle je to ale ne vždy poslední řádek metody aktualizace.

  • renderingFailed: Volání této metody, pokud dojde k problému během vykreslování, chcete-li upozornit naslouchací procesy, že vykreslování se nedokončilo. Můžete předat volitelný řetězec, který poskytne důvod selhání.

Poznámka:

Vykreslování událostí je požadavkem na certifikaci vizuálů. Bez nich nebude váš vizuál schválen Partnerským centrem pro publikování. Další informace najdete v požadavcích na certifikaci.

Jak používat rozhraní API pro vykreslování událostí

Chcete-li volat metody vykreslování, nejprve importujte IVisualEventService typ.

  1. visual.ts Do souboru přidejte následující import:

    import IVisualEventService = powerbi.extensibility.IVisualEventService;
    
  2. IVisual Do třídy přidejte soukromé pole:

    private events: IVisualEventService;
    
  3. constructor V metodě IVisual třídy inicializuje pole:

    this.events = options.host.eventService;
    

Nyní můžete volat this.events.renderingStarted(options);, this.events.renderingFinished(options);a this.events.renderingFailed(options); tam, kde je to vhodné v metodě aktualizace .

Vykreslování životního cyklu událostí

V každém update() cyklu postupujte podle těchto pravidel:

  1. Volání renderingStarted při zahájení vykreslování
  2. Volání přesně jedné metody dokončení pro daný cyklus:
    • renderingFinished při úspěšném vykreslování nebo
    • renderingFailed při selhání vykreslování.
  3. V případě asynchronního vykreslování je volání renderingFinished dokončeno až po dokončení vykreslování.

Důležité

Nenechte metodu update() ukončit bez signalizace dokončení. Po volání renderingStartedmusíte vždy volat buď renderingFinished nebo renderingFailed.

Vzory implementace kódu

Synchronní aktualizace se zpracováním chyb

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

Asynchronní aktualizace se zpracováním chyb

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

Řetězec příslibů s využitím .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;
    });
}