需要JavaScripts 的jquery.js powerbi.js
我假设你已经构建了Native应用程序并且已经给出了所有必需的Power BI Access。如果没有,那么请参考下面的步骤A到C.
我使用了此链接中提到的步骤。我对它进行了一些修改以重用令牌直到它过期。只有在到期后,我们才会生成新的令牌 http://community.powerbi.com/t5/Developer/Rest-api-usage-with-Java/m-p/58514#M1841 此应用程序将为收到的REST调用提供AAD令牌
为需要报告嵌入的应用程序的JSP页面创建报告DIV
div id =“reportContainer”class =“reportContainer”
获取AAD令牌
对步骤1中开发的应用程序进行REST调用,获取AAD令牌
我的aadToken对象有2个参数accessToken和expiresAtStr
var aadToken={accessToken:' ',expiresAtStr: ''};
function getAadAccessToken() {
var deferred = $q.defer();
$http.get('/MyPowerBIApp/REST/getAadToken/')
.then(
function (response) {
deferred.resolve(response.data);
},
function(errResponse){
console.error('Error while getting Aad Access Token');
deferred.reject(errResponse);
}
);
return deferred.promise;
}
从REST调用接收到aadToken后,创建嵌入配置
txtAccessToken是上面的aad标记。(aadToken.accessToken) txtEmbedUrl是需要嵌入的报告。 这就像https://app.powerbi.com/reportEmbed?reportId .......
var config= {
type: 'report',
tokenType: 0,//1:Embed,0:Aad
accessToken: txtAccessToken,
embedUrl: txtEmbedUrl,
permissions: 7,
viewMode: 0,
settings: {
filterPaneEnabled: false,
navContentPaneEnabled: false,
useCustomSaveAsDialog: false
}
};
var $reportContainer = $('#reportContainer');
var report = powerbi.embed($reportContainer.get(0), config);
这会将报告嵌入DIV
尝试嵌入时发生的重大错误是生成AAD令牌。 确保您已创建Azure应用程序并已授予使用Power BI API所需的所有权限
一个。如下所述创建本机应用程序: https://docs.microsoft.com/en-us/power-bi/developer/walkthrough-push-data-register-app-with-azure-ad
B中。转到Azure Active Directory->应用注册 点击你的申请: 您在此处看到的应用程序ID值是您将用于步骤1中提到的AAD令牌生成的clientId值
请参考以下代码:
AuthenticationResult authResult = authenticationContext.acquireToken(
resourceId,
clientId,
username,
password,
null
).get();
℃。转到Azure Active Directory - >应用注册 - >设置 - >所需权限
确保Power BI服务(Power BI)位于API下并且给出了所有必需的权限。下面是很少的权限 查看用户组 查看所有报告 查看所有仪表板(预览)
如果完成了所有这些步骤,您应该能够使用收到的令牌嵌入报告。 如果我错过了任何步骤,请检查并告诉我,否则这种方法会有任何问题。
另外,请确保用于生成AAD令牌的用户名具有访问权限(MemberOf)报告所在的PowerBI工作区