首页 文章

在HTML页面中嵌入Power BI报告

提问于
浏览
0

我正在尝试在HTML页面中嵌入Power BI报告,现在我知道如何创建基本代码以使用javascript将报表嵌入到iframe中,但问题是我无法自动化流程以生成和刷新访问权限后端的令牌 . 我正在考虑使用ADAL JS进行身份验证过程 . 任何人都有这方面的经验吗?或者如果有人有任何其他解决方案是受欢迎的 . 请原谅我的小知识,但我不是开发人员,提前谢谢

1 回答

  • -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*/);
            });
        });
    }
    

相关问题