【问题标题】:Embed Power BI Report in HTML Page在 HTML 页面中嵌入 Power BI 报表
【发布时间】:2019-06-22 07:52:48
【问题描述】:

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

【问题讨论】:

    标签: javascript html powerbi adal


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2017-10-02
      • 1970-01-01
      • 2020-11-26
      • 2022-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多