Как использовать Puppeteer, чтобы подключить событие Powerbi к отчету - PullRequest
0 голосов
/ 06 марта 2019

Я встраиваю отчет power bi, используя pupeteer / chromium, и сохраняю его как скриншот / pdf.Однако требование позднего прерывания требует, чтобы я был в состоянии перехватить загруженное событие отчета.

У меня есть следующий фрагмент кода, который является шаблоном, который я использую для подключения события;отчет встраивается, но событие report.on не запускается (на самом деле я пытаюсь установить некоторые визуальные элементы и другие элементы, а не только текст журнала).

       await page.evaluate((configdata) => {
             const models = window['powerbi-client'].models;
             const config = {
                         ...
             };

             const report = powerbi.embed(reportContainer, config)

             report.on('loaded', function () {
                 console.log('loaded report')
             });

       },
       configdata);

У меня естьпосмотрел на «exposeFunction ()», но не смог подключить его к этому событию (или другим).

Не могли бы некоторые сказать мне, что я пропускаю;Должен быть способ сделать это, но я упускаю, как связать объект отчета (созданный изнутри IFrame, с его событием из-за функции кукловода. Однако JS / Node не является моей основной дисциплиной, черт возьми, это даже немой второй!

PS: Я знаю (и уже начал работать), передавая фильтры в конфигурацию, но это не достаточно хорошо с точки зрения эстетики (на экране не отображаются визуальные эффекты!)

Любая помощь / указатели - очень ценится

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Чтобы ответить на вопрос, вы можете использовать page.evaluate и создать Обещание, которое будет разрешено, когда будет запущено событие загрузки. Затем вы можете дождаться выполнения функции loadEmbed:

async function loadEmbed(page, config) {
return page.evaluate(async (config) => {
    await new Promise((resolve, reject) => {
        try {
            var embedContainer = $('#embedContainer')[0];

            var embed = powerbi.embed(embedContainer, config);

            embed.off("loaded");
            embed.on("loaded", function () {
                resolve(true);
            });
        } catch (err) {
            resolve(false);
        }
    });
}, config);

}

0 голосов
/ 01 апреля 2019

Мы продолжили передачу фильтров в конфигурацию при внедрении отчета.коротко и просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...