Peristiwa "Me-render" dalam visual Power BI

Untuk mendapatkan sertifikasi visual, peristiwa render harus tercakup. Peristiwa ini memungkinkan pendengar (terutama, mengekspor ke PDF dan mengekspor ke PowerPoint) tahu kapan visual sedang dirender dan kapan siap untuk diekspor.

Penting

Setiap visual yang mengekspor data (misalnya, ke file PowerPoint atau .pdf ) harus berisi peristiwa penyajian untuk memastikan bahwa ekspor tidak dimulai sebelum penyajian visual selesai.

API peristiwa penyajian terdiri dari tiga metode untuk dipanggil selama penyajian:

  • renderingStarted: Panggil metode ini untuk menunjukkan bahwa penyajian dimulai. Selalu sebut metode ini sebagai baris pertama metode pembaruan Anda, karena di situlah proses penyajian dimulai.

  • renderingFinished: Panggil metode ini saat penyajian berhasil diselesaikan, untuk memberi tahu pendengar bahwa gambar visual siap untuk diekspor. Panggilan ini harus menjadi baris kode terakhir yang berjalan saat visual diperbarui. Biasanya, tetapi tidak selalu, baris terakhir dari metode pembaruan.

  • renderingFailed: Panggil metode ini jika terjadi masalah selama penyajian, untuk memberi tahu pendengar bahwa penyajian tidak selesai. Anda dapat meneruskan string opsional untuk memberikan alasan kegagalan.

Catatan

Me-render Peristiwa adalah persyaratan untuk sertifikasi visual. Tanpa me-render peristiwa, visual Anda tidak akan disetujui oleh Pusat Mitra untuk publikasi. Untuk informasi lebih lanjut, lihat Persyaratan sertifikasi.

Cara menggunakan API peristiwa render

Untuk memanggil metode penyajian, pertama-tama impor jenisnya IVisualEventService .

  1. Di file Anda visual.ts , tambahkan impor berikut:

    import IVisualEventService = powerbi.extensibility.IVisualEventService;
    
  2. IVisual Di kelas , tambahkan bidang privat:

    private events: IVisualEventService;
    
  3. constructor Dalam metode IVisual kelas , inisialisasi bidang :

    this.events = options.host.eventService;
    

Anda sekarang dapat memanggil this.events.renderingStarted(options);, this.events.renderingFinished(options);, dan this.events.renderingFailed(options); jika sesuai dalam metode pembaruan Anda.

Merender siklus hidup peristiwa

Ikuti aturan ini di setiap update() siklus:

  1. Panggilan renderingStarted saat penyajian dimulai.
  2. Panggil tepat satu metode penyelesaian untuk siklus tersebut:
    • renderingFinished saat penyajian berhasil, atau
    • renderingFailed saat penyajian gagal.
  3. Untuk penyajian asinkron, panggil renderingFinished hanya setelah penyajian benar-benar selesai.

Penting

Jangan biarkan update() metode keluar tanpa memberi sinyal penyelesaian. Setelah Anda memanggil renderingStarted, Anda harus selalu memanggil atau renderingFinishedrenderingFailed.

Pola implementasi kode

Pembaruan sinkron dengan penanganan kegagalan

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

Pembaruan asinkron dengan penanganan kegagalan

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

Rantai janji dengan .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;
    });
}