Power BI Premium - 使用 Power BI API 和 javascript 嵌入,不像以前那样工作
Power BI Premium - embed using Power BI API and javascript not working like previous way
之前我曾经使用 javascript 中的 'loadReport',它不适用于新的 PBI Premium,例如下面的不再工作了,它总是说 "This content isn't available"。顺便说一句,这仍然适用于 PBI 嵌入式报告。
<html>
<body>
<iframe id="iFrameEmbedReport"></iframe>
</body>
<script type="text/javascript">
window.onload = function () {
var iframe = document.getElementById('iFrameEmbedReport');
iframe.src = 'https://app.powerbi.com/reportEmbed?reportId=******-088f-4967-***-279bd5a**df&groupId=*****-****-4033-862d-1cd4f4fa72c1';
iframe.onload = function()
{
var m = {
action: 'loadReport',
accessToken: 'H4s*****'
};
message = JSON.stringify(m);
iframe = document.getElementById('iFrameEmbedReport');
iframe.contentWindow.postMessage(message, "*");
};
};
</script>
</html>
但是如果我们使用具有相同配置的 powerbi.js 它工作正常(下图)
<html>
<body>
<div id="reportContainer"></div>
</body>
<script src="https://microsoft.github.io/PowerBI-JavaScript/demo/node_modules/jquery/dist/jquery.js"></script>
<script src="https://microsoft.github.io/PowerBI-JavaScript/demo/node_modules/powerbi-client/dist/powerbi.js"></script>
<script type="text/javascript">
window.onload = function () {
var accessToken = '******************';
var embedUrl = 'https://app.powerbi.com/reportEmbed?reportId=**********&groupId=**********';
var embedReportId = '*****-088f-****-aa2d-279bd5a662df';
var models = window['powerbi-client'].models;
var config = {
type: 'report',
tokenType: models.TokenType.Embed,
accessToken: accessToken,
embedUrl: embedUrl,
id: embedReportId,
permissions: models.Permissions.All,
settings: {
filterPaneEnabled: true,
navContentPaneEnabled: true
}
};
var reportContainer = $('#reportContainer')[0];
var report = powerbi.embed(reportContainer, config);
}
</script>
</html>
无法弄清楚发生了什么变化。如果不需要,我真的不想在我的应用程序中包含 powerbi.js。我知道我有一份工作副本,但我真的需要了解发生了什么变化以及是否有任何方法可以避免 powerbi.js。最终目标是在 UWP App 中使用第一种方法。
谢谢
这两种方法中的主要变化是 属性 TokenType.Embed
,它在 'old way' 中不可用,即 'loadReport' 消息格式。
这是一种与 Power BI 中的嵌入式实体通信的弃用方式,鼓励所有用户针对新的和维护的 Javascript SDK 编写代码:https://microsoft.github.io/PowerBI-JavaScript/
'loadReport' 方式适用于向后兼容问题,但您将无法使用这种方式在新方法中编写新代码。
之前我曾经使用 javascript 中的 'loadReport',它不适用于新的 PBI Premium,例如下面的不再工作了,它总是说 "This content isn't available"。顺便说一句,这仍然适用于 PBI 嵌入式报告。
<html>
<body>
<iframe id="iFrameEmbedReport"></iframe>
</body>
<script type="text/javascript">
window.onload = function () {
var iframe = document.getElementById('iFrameEmbedReport');
iframe.src = 'https://app.powerbi.com/reportEmbed?reportId=******-088f-4967-***-279bd5a**df&groupId=*****-****-4033-862d-1cd4f4fa72c1';
iframe.onload = function()
{
var m = {
action: 'loadReport',
accessToken: 'H4s*****'
};
message = JSON.stringify(m);
iframe = document.getElementById('iFrameEmbedReport');
iframe.contentWindow.postMessage(message, "*");
};
};
</script>
</html>
但是如果我们使用具有相同配置的 powerbi.js 它工作正常(下图)
<html>
<body>
<div id="reportContainer"></div>
</body>
<script src="https://microsoft.github.io/PowerBI-JavaScript/demo/node_modules/jquery/dist/jquery.js"></script>
<script src="https://microsoft.github.io/PowerBI-JavaScript/demo/node_modules/powerbi-client/dist/powerbi.js"></script>
<script type="text/javascript">
window.onload = function () {
var accessToken = '******************';
var embedUrl = 'https://app.powerbi.com/reportEmbed?reportId=**********&groupId=**********';
var embedReportId = '*****-088f-****-aa2d-279bd5a662df';
var models = window['powerbi-client'].models;
var config = {
type: 'report',
tokenType: models.TokenType.Embed,
accessToken: accessToken,
embedUrl: embedUrl,
id: embedReportId,
permissions: models.Permissions.All,
settings: {
filterPaneEnabled: true,
navContentPaneEnabled: true
}
};
var reportContainer = $('#reportContainer')[0];
var report = powerbi.embed(reportContainer, config);
}
</script>
</html>
无法弄清楚发生了什么变化。如果不需要,我真的不想在我的应用程序中包含 powerbi.js。我知道我有一份工作副本,但我真的需要了解发生了什么变化以及是否有任何方法可以避免 powerbi.js。最终目标是在 UWP App 中使用第一种方法。
谢谢
这两种方法中的主要变化是 属性 TokenType.Embed
,它在 'old way' 中不可用,即 'loadReport' 消息格式。
这是一种与 Power BI 中的嵌入式实体通信的弃用方式,鼓励所有用户针对新的和维护的 Javascript SDK 编写代码:https://microsoft.github.io/PowerBI-JavaScript/
'loadReport' 方式适用于向后兼容问题,但您将无法使用这种方式在新方法中编写新代码。