在打字稿中找不到powerbi全局对象

时间:2018-11-30 12:57:40

标签: powerbi powerbi-embedded

我正在尝试在下面的代码中使用此power bi,其中我的打字稿代码中出现未找到powerbi对象错误:

 // Read embed application token from textbox
var txtAccessToken = $('#txtAccessToken').val();

// Read embed URL from textbox
var txtEmbedUrl = $('#txtReportEmbed').val();

// Read report Id from textbox
var txtEmbedReportId = $('#txtEmbedReportId').val();

// Read embed type from radio
var tokenType = $('input:radio[name=tokenType]:checked').val();

// Get models. models contains enums that can be used.
var models = window['powerbi-client'].models;

// We give All permissions to demonstrate switching between View and Edit mode and saving report.
var permissions = models.Permissions.All;

// Embed configuration used to describe the what and how to embed.
// This object is used when calling powerbi.embed.
// This also includes settings and options such as filters.
// You can find more information at https://github.com/Microsoft/PowerBI-JavaScript/wiki/Embed-Configuration-Details.
var config= {
    type: 'report',
    tokenType: tokenType == '0' ? models.TokenType.Aad : models.TokenType.Embed,
    accessToken: txtAccessToken,
    embedUrl: txtEmbedUrl,
    id: txtEmbedReportId,
    permissions: permissions,
    settings: {
        filterPaneEnabled: true,
        navContentPaneEnabled: true
    }
};

// Get a reference to the embedded report HTML element
var embedContainer = $('#embedContainer')[0];

// Embed the report and display it within the div container.
var report = powerbi.embed(embedContainer, config);

// Report.off removes a given event handler if it exists.
report.off("loaded");

// Report.on will add an event handler which prints to Log window.
report.on("loaded", function() {
    Log.logText("Loaded");
});

report.on("error", function(event) {
    Log.log(event.detail);

    report.off("error");
});

report.off("saved");
report.on("saved", function(event) {
    Log.log(event.detail);
    if(event.detail.saveAs) {
        Log.logText('In order to interact with the new report, create a new token and load the new report');
     }
 });

在上面的代码中,在我的打字稿代码中找不到 powerbi 对象:powerbi.embed(embedContainer,config);

我尝试使用window ['powerbi']或window.powerbi,但不起作用。那么应该怎么解决?

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,通过谷歌搜索发现了这个问题。我无法弄清楚为什么它不在窗口中,但是作为一种变通方法,您可以这样初始化自己:

import * as pbi from "powerbi-client";

const powerbi = new pbi.service.Service(
            pbi.factories.hpmFactory,
            pbi.factories.wpmpFactory,
            pbi.factories.routerFactory
          );
const container = document.getElementById("report-container");
powerbi.embed(container, embedConfiguration);

答案 1 :(得分:0)

几周前,我也遇到了类似的问题(可能完全一样)。对我来说,似乎有效的方法是将window.powerbi.embed()用于嵌入动作,而导入import * as powerbi from "powerbi-client";用于所有其他Power BI对象。