#javascript #c# #powerbi #powerbi-embedded
#javascript #c# #пауэрби #powerbi-встроенный
Вопрос:
Я пытаюсь встроить простой отчет Power BI в ASP web (.NET Core) с помощью контроллеров. Я уже правильно получил embedToken, embedURL и ReportId, но когда я пытаюсь вызвать powerbi.embed() для инициализации отчета, я получаю следующую ошибку:
"ncaught TypeError: this.element.getAttribute is not a function
at e.t.getUniqueId (powerbi.min.js:2)
at e.t.populateConfig (powerbi.min.js:2)
at e.t (powerbi.min.js:2)
at new e (powerbi.min.js:5)
at t.embedNew (powerbi.min.js:2)
at t.embedInternal (powerbi.min.js:2)
at t.embed (powerbi.min.js:2)
at Object.<anonymous> (my-extension.js:125)
at u (jquery.min.js:2)
at Object.fireWith [as resolveWith] (jquery.min.js:2)"
Я пробовал embeddtoken, embedUrls и ReportId в Power BI embed Playground, и они работают нормально, но я получаю эту проблему в коде. Я считаю, что проблема может заключаться в powerbi.js файл, но я также пробовал использовать разные файлы, из пакета nugget и GitHub, и у меня все еще та же проблема.
Я оставил код для получения токенов и инициализации отчета Power BI ниже:
JS-файл для инициализации отчета и вызова API для получения токенов: рассматривайте MyPanel как простую всплывающую панель свойств:
this._button.onClick = (ev) => {
this._enabled = !this._enabled;
this._button.setState(this._enabled ? 0 : 1);
//Execute an action here
//if null, create docking panel
if (this.panel == null) {
this.panel = new MyPanel(this.viewer, this.viewer.container, 'myPanel', 'My Panel');
this.panel.addVisibilityListener((show) => {
this._button.setState(show ? 0 : 1);
});
}
var request = jQuery.ajax({
url: '/api/forge/PBI/url'
});
request.done(function (data) {
console.log(data);
// Read embed application token from textbox
var txtAccessToken = data.accessToken;
// Read embed URL from textbox
var txtEmbedUrl = data.embedUrl;
// Read report Id from textbox
var txtEmbedReportId = data.reportId;
var models = window['powerbi-client'].models;
var permissions = models.Permissions.All;
var config = {
type: 'report',
tokenType: models.TokenType.Embed,
accessToken: txtAccessToken,
embedUrl: txtEmbedUrl,
id: txtEmbedReportId,
permissions: permissions,
settings: {
panes: {
filters: {
visible: true
},
pageNavigation: {
visible: true
}
}
}
};
var div = $('#PowerBIEmbed');
var report = powerbi.embed(div, config);
});
Файлы C # для получения токенов в ответ на запрос API:
[ApiController]
public class PowerBi : ControllerBase
{
[HttpGet]
[Route("/api/forge/PBI/url")]
public EmbedConfig GetPBIToken()
{
EmbedConfig pBIData = PBICredentials.GetEmbedToken();
return pBIData;
}
}
public class PBICredentials
{
public static EmbedConfig GetEmbedToken()
{
var a = new Configurations();
using (var client = new PowerBIClient(new Uri(Configurations.ApiUrl),
Authentication.GetTokenCredentials()))
{
// Retrieve the selected Report
var Reports = client.Reports.GetReportsInGroup(Configurations.WorkspaceId);
var Report = Reports.Value.FirstOrDefault();
// Generate an embed token to view
var generateTokenRequestParameters = new GenerateTokenRequest(TokenAccessLevel.View);
var tokenResponse = client.Reports.GenerateTokenInGroup(Configurations.WorkspaceId,
Report.Id, generateTokenRequestParameters);
// Populate embed variables (to be passed client-side)
EmbedConfig embed = new EmbedConfig()
{
AccessToken = tokenResponse.Token,
EmbedUrl = Report.EmbedUrl,
ReportId = Report.Id
};
return embed;
}
}
}
public class EmbedConfig
{
[JsonPropertyName("accessToken")]
public string AccessToken { get; set; }
[JsonPropertyName("embedUrl")]
public string EmbedUrl { get; set; }
[JsonPropertyName("reportId")]
public Guid ReportId { get; set; }
}
Рассмотрим файл аутентификации и конфигурацию, как в курсе «Разработчики за один день» от Microsoft Power BI: https://www.youtube.com/playlist?list=PL1N57mwBHtN1AGWHnJMhtvJCIG_IlC07D
Любая помощь будет отблагодарена!
С наилучшими пожеланиями,
Карлос
Ответ №1:
Вы получаете сообщение об ошибке в строке ниже:
var div = $('#PowerBIEmbed');
Вам нужно получить ссылку на первый элемент внутри div
массива.
Измените приведенную выше строку на:
var div = $('#PowerBIEmbed')[0];
// or
var div = $('#PowerBIEmbed').get(0);
Пожалуйста, найдите ссылку здесь: https://docs.microsoft.com/javascript/api/overview/powerbi/embed-report#example