嵌入式仪表板实例上的setAccessToken最初不起作用

时间:2018-04-04 10:36:06

标签: powerbi-embedded

我使用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)并单击"刷新仪表板磁贴"。

1 个答案:

答案 0 :(得分:0)

对/ powerbi / metadata / dashboards / [my-id]的调用仅在仪表板加载时发生,以获取仪表板元数据。 嵌入具有接近到期令牌的仪表板不是最佳做法。 为了嵌入仪表板,请确保您拥有的AAD令牌在到期前有几分钟。

调用同步服务,更新磁贴大小和位置以及磁贴数据正常工作。

此外,在您的应用程序中,设置一个计时器,在到期前几分钟更新令牌,这将使您的仪表板更“实时”,因为如果同步服务失败并且未经授权的例外几次,它会进入睡了将近30秒。

如果有帮助,请告诉我。