我使用PowerBi-Javascript library嵌入了powerBI信息中心:
let embedConfig = {
type: 'dashboard',
tokenType: window.powerbi-client.models.TokenType.Aad,
id: '...',
embedUrl: '...',
accessToken: '...'
};
let embedInstance = powerbi.embed(elem, embedConfig);
稍后我想更新访问令牌以确保仪表板可以不断更新其数据。我们使用以下方法:
embedInstance.setAccessToken('...')
.then(function (r) {
console.log('New access token set succesfully');
})
.catch(function (e) {
console.error('Error setting access token', e);
});
setAccessToken
承诺解析(我看到成功日志),但是,我不确定访问令牌是否正确传播到PowerBI实例。
我发现,下次嵌入式仪表板上的数据更新时,我会在控制台中记录401响应,以便向https://wabi-uk-south-redirect.analysis.windows.net/powerbi/metadata/dashboards/[my-id]
发送请求。
如果我随后刷新数据(在访问令牌再次到期之前),一切似乎都正常。
似乎在过期的上设置新访问令牌后的第一次数据刷新失败。
这对我来说是一个大问题,因为我们刷新(自动)的数据比访问令牌过期的频率低,所以在第一个访问令牌到期后,数据永远不会在我的嵌入式实例中刷新。
有没有其他人遇到过这个问题,或者有人知道解决这个问题的方法吗?
更新
失败的请求始终为/powerbi/metadata/dashboards/[my-id]
,而有效且导致数据刷新的请求为/powerbi/metadata/dashboards/[my-id]/tiles
。请注意,我没有以编程方式触发这些刷新,只需访问powerbi web应用程序(app.powerbi.com)并单击"刷新仪表板磁贴"。
答案 0 :(得分:0)
对/ powerbi / metadata / dashboards / [my-id]的调用仅在仪表板加载时发生,以获取仪表板元数据。 嵌入具有接近到期令牌的仪表板不是最佳做法。 为了嵌入仪表板,请确保您拥有的AAD令牌在到期前有几分钟。
调用同步服务,更新磁贴大小和位置以及磁贴数据正常工作。
此外,在您的应用程序中,设置一个计时器,在到期前几分钟更新令牌,这将使您的仪表板更“实时”,因为如果同步服务失败并且未经授权的例外几次,它会进入睡了将近30秒。
如果有帮助,请告诉我。