問題描述
我創建了一個 power bi 報告.我想將此報告嵌入到我的 MVC 站點.這是我的代碼:-
私有靜態只讀字符串 ClientID = ConfigurationManager.AppSettings["ClientID"];私有靜態只讀字符串 ClientSecret = ConfigurationManager.AppSettings["ClientSecret"];私有靜態只讀字符串 RedirectUrl = ConfigurationManager.AppSettings["RedirectUrl"];私有靜態只讀字符串 AADAuthorityUri = ConfigurationManager.AppSettings["AADAuthorityUri"];私有靜態只讀字符串 PowerBiAPI = ConfigurationManager.AppSettings["PowerBiAPI"];私有靜態只讀字符串 PowerBiDataset = ConfigurationManager.AppSettings["PowerBiDataset"];私有靜態只讀字符串 baseUri = PowerBiDataset;私有靜態字符串 accessToken = string.Empty;公共字符串GetAccessToken(字符串authorizationCode,字符串clientID,字符串clientSecret,字符串redirectUri){令牌緩存 TC = 新令牌緩存();字符串權限 = AADAuthorityUri;AuthenticationContext AC = new AuthenticationContext(authority, TC);ClientCredential cc = new ClientCredential(clientID, clientSecret);返回 AC.AcquireTokenByAuthorizationCodeAsync(授權碼,新的 Uri(redirectUri), cc).Result.AccessToken;}公共無效GetAuthorizationCode(){var @params = 新的 NameValueCollection{{"response_type", "code"},{"client_id", ClientID},{"資源", PowerBiAPI},{ "redirect_uri", RedirectUrl}};var queryString = HttpUtility.ParseQueryString(string.Empty);queryString.Add(@params);Response.Redirect(String.Format(AADAuthorityUri + "?{0}", queryString));}公共行動結果索引(){if (Request.QueryString["code"] != null){會話["AccessToken"] = GetAccessToken(HttpContext.Request["code"],客戶 ID,客戶秘密,重定向網址);}if (Session["AccessToken"] != null){accessToken = Session["AccessToken"].ToString();System.Net.WebRequest 請求 = System.Net.WebRequest.Create(String.Format("{0}/Reports",baseUri)) 作為 System.Net.HttpWebRequest;request.Method = "GET";request.ContentLength = 0;request.Headers.Add("授權", String.Format("Bearer {0}", accessToken));使用 (var response = request.GetResponse() as System.Net.HttpWebResponse){使用 (var reader = new System.IO.StreamReader(response.GetResponseStream())){PBIReports 報告 = JsonConvert.DeserializeObject(reader.ReadToEnd());if (Reports.value.Length > 0){PBIReport 報告 = Reports.value[13];返回視圖(報告);}}}}獲取授權碼();返回視圖();}
在重定向到this"時,它適用于 power bi 登錄頁面,在我登錄后它會重定向回此頁面(因為主頁和重定向 url 相同).獲取所有報告數據后,一段時間后出現錯誤消息,指出 http://localhost:34244/Scripts/powerbi.js 中第 5153 行第 11 列的 Unhandled exception0x800a1391 - JavaScript 運行時錯誤:'Promise' 未定義
然后它說
在 https://app.powerbi.com/13.0.1781.272/scripts/powerbiportal.dependencies.externals.bundle.min.js 的第 1236 行第 335 列引發異常0x80070005 - JavaScript 運行時錯誤:訪問被拒絕.如果有這個異常的處理程序,程序可以安全地繼續.在 https://app.powerbi.com/13.0.1781.272/scripts/powerbiportal.common.bundle.min.js 的第 42 行第 17057 列引發異常0x80070005 - JavaScript 運行時錯誤:訪問被拒絕.如果有這個異常的處理程序,程序可以安全地繼續.
然后它又開始再次顯示第一條錯誤消息.
這是我的 index.cshtml
<代碼>@{ViewBag.Title = "索引";布局 = "~/Views/Shared/_ColumnsOne.cshtml";}<script src="~/Scripts/powerbi.js"></script><腳本類型="文本/javascript">window.onload = 函數(){var accessToken = "@Session["AccessToken"].ToString()";if (!accessToken || accessToken == ""){返回;}var embedUrl = "@Model.embedUrl";var reportId = "@Model.id";變量配置 = {類型:'報告',訪問令牌:訪問令牌,嵌入網址:嵌入網址,id:reportId,設置:{filterPaneEnabled:假,導航內容窗格啟用:假}};常量過濾器 = {$schema: "http://powerbi.com/product/schema#basic",目標: {表:查詢1",欄目:學號"},運算符:在",值:[10"]};var reportContainer = document.getElementById('reportContainer');var report = powerbi.embed(reportContainer, config);report.on("加載", function () {var logView = document.getElementById('logView');logView.innerHTML = logView.innerHTML + "已加載<br/>";report.off("加載");});report.on("渲染", function () {var logView = document.getElementById('logView');logView.innerHTML = logView.innerHTML + "渲染<br/>";report.off("渲染");});report.setFilters([過濾器]).then(函數(結果){日志.log(結果);}).catch(函數(錯誤){日志.log(錯誤);});};</腳本><div ID="reportContainer" style="width: 900px; height: 550px"></div></div>解決方案IE 還不支持 Promise.您可以通過包含外部庫來啟用支持.請在此處查看 Microsoft 關于 Power BI 的評論 - 支持 IE8 和 Promises?
我在 IE11 上遇到了同樣的問題,這個建議奏效了!希望對你也有幫助.
I have created a power bi report. I want to embed this report to my MVC site. Here is my code:-
private static readonly string ClientID = ConfigurationManager.AppSettings["ClientID"]; private static readonly string ClientSecret = ConfigurationManager.AppSettings["ClientSecret"]; private static readonly string RedirectUrl = ConfigurationManager.AppSettings["RedirectUrl"]; private static readonly string AADAuthorityUri = ConfigurationManager.AppSettings["AADAuthorityUri"]; private static readonly string PowerBiAPI = ConfigurationManager.AppSettings["PowerBiAPI"]; private static readonly string PowerBiDataset = ConfigurationManager.AppSettings["PowerBiDataset"]; private static readonly string baseUri = PowerBiDataset; private static string accessToken = string.Empty; public string GetAccessToken(string authorizationCode, string clientID, string clientSecret, string redirectUri) { TokenCache TC = new TokenCache(); string authority = AADAuthorityUri; AuthenticationContext AC = new AuthenticationContext(authority, TC); ClientCredential cc = new ClientCredential(clientID, clientSecret); return AC.AcquireTokenByAuthorizationCodeAsync( authorizationCode, new Uri(redirectUri), cc).Result.AccessToken; } public void GetAuthorizationCode() { var @params = new NameValueCollection { {"response_type", "code"}, {"client_id", ClientID}, {"resource", PowerBiAPI}, { "redirect_uri", RedirectUrl} }; var queryString = HttpUtility.ParseQueryString(string.Empty); queryString.Add(@params); Response.Redirect(String.Format(AADAuthorityUri + "?{0}", queryString)); } public ActionResult Index() { if (Request.QueryString["code"] != null) { Session["AccessToken"] = GetAccessToken( HttpContext.Request["code"], ClientID, ClientSecret, RedirectUrl); } if (Session["AccessToken"] != null) { accessToken = Session["AccessToken"].ToString(); System.Net.WebRequest request = System.Net.WebRequest.Create( String.Format("{0}/Reports", baseUri)) as System.Net.HttpWebRequest; request.Method = "GET"; request.ContentLength = 0; request.Headers.Add("Authorization", String.Format("Bearer {0}", accessToken)); using (var response = request.GetResponse() as System.Net.HttpWebResponse) { using (var reader = new System.IO.StreamReader(response.GetResponseStream())) { PBIReports Reports = JsonConvert.DeserializeObject<PBIReports>(reader.ReadToEnd()); if (Reports.value.Length > 0) { PBIReport report = Reports.value[13]; return View(report); } } } } GetAuthorizationCode(); return View(); }
On Redirecting to "this", it goes for power bi login page and after I sign in it redirects back to this page (as homepage and redirect url are same). After getting all the report data, after some time a error message comes up saying
Unhandled exception at line 5153, column 11 in http://localhost:34244/Scripts/powerbi.js 0x800a1391 - JavaScript runtime error: 'Promise' is undefined
After that it says
Exception was thrown at line 1236, column 335 in https://app.powerbi.com/13.0.1781.272/scripts/powerbiportal.dependencies.externals.bundle.min.js 0x80070005 - JavaScript runtime error: Access is denied. If there is a handler for this exception, the program may be safely continued. Exception was thrown at line 42, column 17057 in https://app.powerbi.com/13.0.1781.272/scripts/powerbiportal.common.bundle.min.js 0x80070005 - JavaScript runtime error: Access is denied. If there is a handler for this exception, the program may be safely continued.
And then again it starts Showing the first error message again.
Here is my index.cshtml
@{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_ColumnsOne.cshtml"; } <script src="~/Scripts/powerbi.js"></script> <script type="text/javascript"> window.onload = function () { var accessToken = "@Session["AccessToken"].ToString()"; if (!accessToken || accessToken == "") { return; } var embedUrl = "@Model.embedUrl"; var reportId = "@Model.id"; var config = { type: 'report', accessToken: accessToken, embedUrl: embedUrl, id: reportId, settings: { filterPaneEnabled: false, navContentPaneEnabled: false } }; const filter = { $schema: "http://powerbi.com/product/schema#basic", target: { table: "Query1", column: "SchoolID" }, operator: "In", values: ["10"] }; var reportContainer = document.getElementById('reportContainer'); var report = powerbi.embed(reportContainer, config); report.on("loaded", function () { var logView = document.getElementById('logView'); logView.innerHTML = logView.innerHTML + "Loaded<br/>"; report.off("loaded"); }); report.on("rendered", function () { var logView = document.getElementById('logView'); logView.innerHTML = logView.innerHTML + "Rendered<br/>"; report.off("rendered"); }); report.setFilters([filter]) .then(function (result) { Log.log(result); }) .catch(function (errors) { Log.log(errors); }); }; </script> <div> <div ID="reportContainer" style="width: 900px; height: 550px"></div> </div>
解決方案IE does not yet support Promise. You can enable support by including an external library. Please see Microsoft's comments on this in relation to Power BI here - Support for IE8 and Promises?
I had the same issue with IE11 and the suggestion worked! Hope it helps you too.
這篇關于嵌入 Power Bi Report Promise 未定義 powerbi.js的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!
【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!