Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Чтобы получить визуальную сертификацию, она должна включать события отрисовки. Эти события позволяют прослушивателям (в первую очередь экспортировать в PDF-файлы и экспортировать в PowerPoint) знать, когда визуальный элемент отрисовывается и когда он готов к экспорту.
Внимание
Любой визуальный элемент, экспортируемый (например, в Файл PowerPoint или .pdf ), должен содержать события отрисовки, чтобы экспорт не начинался до завершения визуализации.
API событий отрисовки состоит из трех методов вызова во время отрисовки:
renderingStarted: вызовите этот метод, чтобы указать, что запущена отрисовка. Всегда вызывайте этот метод в качестве первой строки метода обновления, так как начинается процесс отрисовки.renderingFinished: вызовите этот метод при успешном выполнении отрисовки, чтобы уведомить прослушивателей о готовности изображения визуального элемента к экспорту. Этот вызов должен быть последней строкой кода, которая выполняется при обновлении визуального элемента. Обычно это, но не всегда, последняя строка метода обновления.renderingFailed: вызовите этот метод, если проблема возникает во время отрисовки, чтобы уведомить прослушивателей о том, что отрисовка не завершена. Можно передать необязательную строку, чтобы указать причину сбоя.
Примечание.
События отрисовки являются обязательными для сертификации визуальных элементов. Без них визуальный элемент не будет утвержден Центром партнеров для публикации. Дополнительные сведения см. в разделе "Требования к сертификации".
Использование API событий отрисовки
Чтобы вызвать методы отрисовки IVisualEventService , сначала импортируйте тип.
visual.tsВ файле добавьте следующий импорт:import IVisualEventService = powerbi.extensibility.IVisualEventService;В классе добавьте частное
IVisualполе:private events: IVisualEventService;В методе
constructorIVisualкласса инициализируйте поле:this.events = options.host.eventService;
Теперь вы можете вызвать this.events.renderingStarted(options);и this.events.renderingFinished(options);this.events.renderingFailed(options); в случае необходимости в методе обновления.
Жизненный цикл событий отрисовки
Следуйте этим правилам в каждом update() цикле:
- Вызов
renderingStartedпри запуске отрисовки. - Вызовите ровно один метод завершения для этого цикла:
-
renderingFinishedПри успешной отрисовке или -
renderingFailedПри сбое отрисовки.
-
- Для асинхронной отрисовки вызов выполняется
renderingFinishedтолько после завершения отрисовки.
Внимание
Не позволяйте методу update() выйти без сигнала завершения. После вызова renderingStartedнеобходимо всегда вызывать или renderingFinishedrenderingFailed.
Шаблоны реализации кода
Синхронное обновление с обработкой сбоев
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;
}
}
Асинхронное обновление с обработкой сбоев
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;
}
}
Цепочка обещаний с .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;
});
}