"Renderização" de eventos em visuais do Power BI

Para obter uma certificação visual, ela deve incluir eventos de renderização. Esses eventos permitem que os ouvintes (principalmente, exportem para PDF e exportem para PowerPoint) saibam quando o visual está sendo renderizado e quando está pronto para exportação.

Importante

Qualquer visual que exporte dados (por exemplo, para um arquivo PowerPoint ou .pdf ) deve conter eventos de renderização para garantir que a exportação não comece antes que a renderização visual seja concluída.

A API de eventos de renderização consiste em três métodos que devem ser chamados durante a renderização:

  • renderingStarted: O código visual do Power BI chama o renderingStarted método para indicar que o processo de renderização foi iniciado. Esse método deve ser sempre a primeira linha do método de atualização, pois é aí que o processo de renderização começa.

  • renderingFinished: Quando a renderização é concluída com êxito, o código visual do Power BI chama o renderingFinished método para notificar os ouvintes de que a imagem do visual está pronta para exportação. Este método deve ser a última linha de código executada quando o visual é atualizado. Normalmente, mas nem sempre, é a última linha do método de atualização.

  • renderingFailed: Se ocorrer um problema durante o processo de renderização, o visual do Power BI não será renderizado com êxito. Para notificar os ouvintes de que o processo de renderização não foi concluído, o código visual do Power BI deve chamar o renderingFailed método. Esse método também fornece uma cadeia de caracteres opcional para fornecer um motivo para a falha.

Nota

Os eventos de renderização são um requisito para a certificação de elementos visuais. Sem eles, seu visual não será aprovado pelo Partner Center para publicação. Para obter mais informações, consulte Requisitos de certificação.

Como usar a API de eventos de renderização

Para chamar os métodos de renderização, você precisa primeiro importá-los do IVisualEventService.

  1. No seu visual.ts ficheiro, inclua a linha:

    import IVisualEventService = powerbi.extensibility.IVisualEventService;
    
  2. Na classe inclua a IVisual linha:

    private events: IVisualEventService;
    
  3. constructor No método da IVisual classe

    this.events = options.host.eventService;
    

Agora você pode chamar os métodos this.events.renderingStarted(options);, this.events.renderingFinished(options);e this.events.renderingFailed(options); , quando apropriado, em seu método de atualização .

Exemplo 1: Visual sem animações

Aqui está um exemplo de um visual simples que usa a API de eventos de renderização.

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

Exemplo 2: Visual com animações

Se o visual tiver animações ou funções assíncronas para renderização, o renderingFinished método deve ser chamado após a animação ou dentro da função assíncrona, mesmo que não seja a última linha do método de atualização .

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