我正在尝试在HTML页面中嵌入Power BI报告,现在我知道如何创建基本代码以使用javascript将报表嵌入到iframe中,但问题是我无法自动生成流程以生成和刷新后端的访问令牌。我正在考虑使用ADAL JS进行身份验证过程。任何人都有这方面的经验吗?或者如果有人有任何其他解决方案是受欢迎的。请原谅我的小知识,但我不是开发人员 提前致谢
答案 0 :(得分:-2)
https://github.com/Microsoft/PowerBI-JavaScript/wiki/Refresh-token-using-JavaScript-SDK-example
您可以通过ADAL.js或任何其他AJAX \ HTTP库
创建令牌
function embedReportAndSetTokenListener(setAccessToken = false,
reportId,
groupId,
datasetId,
accessLevel,
baseUri,
embedUrl) {
// Generate embed token
generateEmbedToken(reportId, groupId)
.then(function( Token ) {
var embedToken = Token.token;
// set config for embedding report
var config = createConfig(embedToken,embedUrl,reportId);
// 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() {
// Set token expiration listener
setTokenExpirationListener(Token.expiration,
2 /*minutes before expiration*/,
reportId,
groupId);
});
});
}
function setTokenExpirationListener(tokenExpiration,
minutesToRefresh = 2,
reportId,
groupId){
// get current time
var currentTime = Date.now();
var expiration = Date.parse(tokenExpiration);
var safetyInterval = minutesToRefresh* 60 * 1000;
// time until token refresh in milliseconds
var timeout = expiration - currentTime - safetyInterval;
// if token already expired, generate new token and set the access token
if (timeout<=0)
{
console.log("Updating Report Embed Token");
updateToken(reportId, groupId);
}
// set timeout so minutesToRefresh minutes before token expires, token will be updated
else
{
console.log("Report Embed Token will be updated in " + timeout + " milliseconds.");
setTimeout(function() {
updateToken(reportId, groupId);
}, timeout);
}
}
function updateToken(reportId, groupId) {
// Generate new EmbedToken
generateEmbedToken(reportId, groupId)
.then(function( Token ) {
// Get a reference to the embedded report HTML element
var embedContainer = $('#embedContainer')[0];
// Get a reference to the embedded report.
var report = powerbi.get(embedContainer);
// Set AccessToken
report.setAccessToken(Token.token)
.then(function() {
// Set token expiration listener
// result.expiration is in ISO format
setTokenExpirationListener(Token.expiration,2 /*minutes before expiration*/);
});
});
}