#javascript #powerbi-embedded
#javascript #powerbi-embedded
Вопрос:
Игровая площадка MS:https://microsoft.github.io/PowerBI-JavaScript/demo/v2-demo/index.html #
Контекст
- Отчет загружен правильно
- «Загруженные» и «Визуализированные» события запускаются правильно
- «powerbi-client»: «^2.7.0»,
Пример MS для прослушивания «Выбранных данных»
// Get a reference to the embedded report HTML element
var embedContainer = $('#embedContainer')[0];
// Get a reference to the embedded report.
report = powerbi.get(embedContainer);
// Report.off removes a given event listener if it exists.
report.off("dataSelected");
// Report.on will add an event listener.
report.on("dataSelected", function(event) {
Log.logText("Event - dataSelected:");
var data = event.detail;
Log.log(data);
});
// Select Run and select an element of a visualization.
// For example, a bar in a bar chart. You should see an entry in the Log window.
Log.logText("Select data to see events in Log window.");
Моя реализация на TypeScript
const report: Embed = pbiService.embed(container, reportConfig);
report.on("dataSelected", event => {
console.log("dataSelected", event);
});
report.on("buttonClicked", event => {
console.log("buttonClicked", event);
});
Выводит правильное количество и названные обработчики событий:
console.log(report.eventHandlers);
Проблема
«Выбранные данные» и «buttonClicked» никогда не запускаются.
Ответ №1:
В отчете pbix в настройке кнопки включите переключатель действий — это добавит действие к кнопке.
Я добавляю действие открыть закладку без ссылки на какую-либо закладку.
И теперь нажатие на эту кнопку по-прежнему ничего не делает в отчете, но вызывает событие нажатия кнопки, которое вы можете обнаружить в своем приложении.
Ответ №2:
Вы создаете report
объект типа Embed
. Вы можете попробовать сделать это с Report
типом, вот так:
import { Report } from 'report'; // This is part of powerbi-client library
const report: Report = <Report> pbiService.embed(container, reportConfig));
report.on("dataSelected", event => {
console.log("dataSelected", event);
});
report.on("buttonClicked", event => {
console.log("buttonClicked", event);
});