Eventi di "rendering" negli oggetti visivi di Power BI
Per ottenere un oggetto visivo certificato, questo deve includere eventi di rendering. Questi eventi consentono ai listener (principalmente: esportare in PDF ed esportare in PowerPoint) di sapere quando viene eseguito il rendering dell'oggetto visivo e quando è pronto per l'esportazione.
Importante
Qualsiasi oggetto visivo che esporta dati (ad esempio in un file di PowerPoint o .pdf), deve contenere eventi di rendering per assicurare che l'esportazione non abbia inizio prima del completamento del rendering dell'oggetto visivo.
L'API eventi di rendering è costituita da tre metodi che devono essere chiamati durante il rendering:
renderingStarted
: il codice visivo di Power BI chiama il metodorenderingStarted
per indicare che il processo di rendering è stato avviato. Questo metodo deve essere sempre la prima riga del metodo di aggiornamento , perché questa è la posizione in cui inizia il processo di rendering.renderingFinished
: quando il rendering viene completato correttamente, il codice dell’oggetto visivo di Power BI chiama il metodorenderingFinished
per notificare ai listener che l'immagine dell'oggetto visivo è pronta per l'esportazione. Questo metodo deve essere l'ultima riga di codice eseguita quando l'oggetto visivo viene aggiornato. In genere, ma non sempre, è l'ultima riga del metodo di aggiornamento.renderingFailed
: se si verifica un problema durante il processo di rendering, il rendering dell'oggetto visivo di Power BI non viene eseguito correttamente. Per segnalare ai listener il mancato completamento del processo di rendering, il codice dell'oggetto visivo di Power BI deve chiamare il metodorenderingFailed
. Questo metodo include anche una stringa facoltativa per indicare la causa dell'errore.
Nota
Gli eventi di rendering sono un requisito per la certificazione degli oggetti visivi. Senza di essi l'oggetto visivo non verrà approvato dal Centro per i partner per la pubblicazione. Per altre informazioni, vedere Requisiti di certificazione.
Come usare l'API degli eventi di rendering
Per chiamare i metodi di rendering, è necessario prima importarli da IVisualEventService.
Nel file
visual.ts
includere la riga:import IVisualEventService = powerbi.extensibility.IVisualEventService;
Nella classe
IVisual
includere la riga:private events: IVisualEventService;
Nel metodo
constructor
della classeIVisual
this.events = options.host.eventService;
È ora possibile chiamare i metodi this.events.renderingStarted(options);
, this.events.renderingFinished(options);
e this.events.renderingFailed(options);
, dove appropriato nel metodo di aggiornamento.
Esempio 1: oggetto visivo senza animazioni
Ecco un esempio di oggetto visivo semplice che usa l'API eventi di rendering.
export class Visual implements IVisual {
...
private events: IVisualEventService;
...
constructor(options: VisualConstructorOptions) {
...
this.events = options.host.eventService;
...
}
public update(options: VisualUpdateOptions) {
this.events.renderingStarted(options);
...
this.events.renderingFinished(options);
}
Esempio 2: oggetto visivo con animazioni
Se l'oggetto visivo ha animazioni o funzioni asincrone per il rendering, il metodo renderingFinished
deve essere chiamato dopo l'animazione o all'interno della funzione asincrona, anche se non è l'ultima riga del metodo di aggiornamento.
export class Visual implements IVisual {
...
private events: IVisualEventService;
private element: HTMLElement;
...
constructor(options: VisualConstructorOptions) {
...
this.events = options.host.eventService;
this.element = options.element;
...
}
public update(options: VisualUpdateOptions) {
this.events.renderingStarted(options);
...
// Learn more at https://github.com/d3/d3-transition/blob/master/README.md#transition_end
d3.select(this.element).transition().duration(100).style("opacity","0").end().then(() => {
// renderingFinished called after transition end
this.events.renderingFinished(options);
});
}