Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 degli eventi di rendering è costituita da tre metodi da chiamare durante il rendering:
renderingStarted: Chiamare questo metodo per indicare che il rendering è stato avviato. Chiamare sempre questo metodo come prima riga del metodo update, dal momento che inizia il processo di rendering.renderingFinished: Chiamare questo metodo al termine del rendering per notificare ai listener che l'immagine dell'oggetto visivo è pronta per l'esportazione. Questa chiamata 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: chiamare questo metodo se si verifica un problema durante il rendering, per notificare ai listener che il rendering non è stato completato. È possibile passare una stringa facoltativa per fornire un motivo per l'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, importare prima di tutto il IVisualEventService tipo.
visual.tsNel file aggiungere l'importazione seguente:import IVisualEventService = powerbi.extensibility.IVisualEventService;IVisualNella classe aggiungere un campo privato:private events: IVisualEventService;constructorNel metodo dellaIVisualclasse inizializzare il campo:this.events = options.host.eventService;
È ora possibile chiamare this.events.renderingStarted(options);, this.events.renderingFinished(options);e this.events.renderingFailed(options); dove appropriato nel metodo update .
Ciclo di vita degli eventi di rendering
Seguire queste regole in ogni update() ciclo:
- Chiamare
renderingStartedall'avvio del rendering. - Chiamare esattamente un metodo di completamento per il ciclo:
-
renderingFinishedquando il rendering ha esito positivo o -
renderingFailedquando il rendering ha esito negativo.
-
- Per il rendering asincrono, chiamare
renderingFinishedsolo dopo il completamento del rendering.
Importante
Non lasciare che il metodo venga chiuso senza segnalare il update() completamento. Dopo aver chiamato renderingStarted, è necessario chiamare renderingFinished sempre o renderingFailed.
Modelli di implementazione del codice
Aggiornamento sincrono con gestione degli errori
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;
}
}
Aggiornamento asincrono con gestione degli errori
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;
}
}
Catena di promesse 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;
});
}