Power BI is turning 10! Tune in for a special live episode on July 24 with behind-the-scenes stories, product evolution highlights, and a sneak peek at what’s in store for the future.
Save the dateEnhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends August 31st. Request your voucher.
I've working on the sample "Push data into a dashboard" by Adam Saxton. In Step 2: Get an authentication access token code is provided to get authentication. The NuGet Package Microsoft.IdentityModel.Clients.ActiveDirectory is now updated to version 3.13.8 and I get an error on the codeline "string token = authContext.AcquireToken(resourceUri, clientID, new Uri(redirectUri)).AccessToken; : Severity Code Description Project File Line Suppression State
Error CS1061 'AuthenticationContext' does not contain a definition for 'AcquireToken' and no extension method 'AcquireToken' accepting a first argument of type 'AuthenticationContext' could be found (are you missing a using directive or an assembly reference?)
Can anyone provide me with the correct code-statement to be used here ? I"ve tried a few attempts myself, but couldn't figure it out...
Any help is much appriciated!
Ruud
Solved! Go to Solution.
In the sample, steps 2 is using
Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory -Version 2.21.301221612
In the newer ADAL v3, try a new sample
using Microsoft.IdentityModel.Clients.ActiveDirectory; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication32 { class Program { static void Main(string[] args) { string token = GetToken(); Console.WriteLine(token); Console.ReadLine(); } #region Get an authentication access token private static string GetToken() { // TODO: Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory -Version 2.21.301221612 // and add using Microsoft.IdentityModel.Clients.ActiveDirectory //The client id that Azure AD created when you registered your client app. string clientID = "3f756axxxxxxx3662e"; //RedirectUri you used when you register your app. //For a client app, a redirect uri gives Azure AD more details on the application that it will authenticate. // You can use this redirect uri for your client app string redirectUri = "https://login.live.com/oauth20_desktop.srf"; //Resource Uri for Power BI API string resourceUri = "https://analysis.windows.net/powerbi/api"; //OAuth2 authority Uri string authorityUri = "https://login.windows.net/common/oauth2/authorize"; //Get access token: // To call a Power BI REST operation, create an instance of AuthenticationContext and call AcquireToken // AuthenticationContext is part of the Active Directory Authentication Library NuGet package // To install the Active Directory Authentication Library NuGet package in Visual Studio, // run "Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory" from the nuget Package Manager Console. // AcquireToken will acquire an Azure access token // Call AcquireToken to get an Azure token from Azure Active Directory token issuance endpoint AuthenticationContext authContext = new AuthenticationContext(authorityUri); //string token = authContext.AcquireToken(resourceUri, clientID, new Uri(redirectUri)).AccessToken; return authContext.AcquireTokenAsync(resourceUri, clientID, new Uri(redirectUri), new PlatformParameters(0)).Result.AccessToken; } #endregion } }
Hi All,
I'm stuck in Step 2.
Here's what I did.
Using Visual Studio 2017
Console App > .NET Framework 4.5 > (.Net Framework) Visual C#
Iin Package Manager Console , entered this: Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory -Version 2.21.301221612
Entered this code in Program.cs
using Microsoft.IdentityModel.Clients.ActiveDirectory; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication32 { class Program { static void Main(string[] args) { string token = GetToken(); Console.WriteLine(token); Console.ReadLine(); } #region Get an authentication access token private static string GetToken() { // TODO: Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory -Version 2.21.301221612 // and add using Microsoft.IdentityModel.Clients.ActiveDirectory //The client id that Azure AD created when you registered your client app. string clientID = "f57471a3-066b-47a4-92b5-30177196d891"; //RedirectUri you used when you register your app. //For a client app, a redirect uri gives Azure AD more details on the application that it will authenticate. // You can use this redirect uri for your client app string redirectUri = "https://login.live.com/oauth20_desktop.srf"; //Resource Uri for Power BI API string resourceUri = "https://analysis.windows.net/powerbi/api"; //OAuth2 authority Uri string authorityUri = "https://login.windows.net/common/oauth2/authorize"; //Get access token: // To call a Power BI REST operation, create an instance of AuthenticationContext and call AcquireToken // AuthenticationContext is part of the Active Directory Authentication Library NuGet package // To install the Active Directory Authentication Library NuGet package in Visual Studio, // run "Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory" from the nuget Package Manager Console. // AcquireToken will acquire an Azure access token // Call AcquireToken to get an Azure token from Azure Active Directory token issuance endpoint AuthenticationContext authContext = new AuthenticationContext(authorityUri); //string token = authContext.AcquireToken(resourceUri, clientID, new Uri(redirectUri)).AccessToken; return authContext.AcquireTokenAsync(resourceUri, clientID, new Uri(redirectUri), new PlatformParameters(0)).Result.AccessToken; } #endregion } }
Got this when trying to debug: ConsoleApp1.exe is missing. Please build the probject and retry, or set the OutPath and AssemblyName properties appropriately to point at the correct location for target assembly.
And in error list:
Code - CS0246
Description - The type or namespace name 'PlatformParameters' could not be found ( are you missing a using directive or an assembly reference)?
By the way, I'm a complete noob to visual studio. I've just been trying to push data to Power BI with no success.
I'm using Excel 2013 Standard - which doesnt come with Power Pivot.
Have you figured this out? I'm getting the same error.
Hi,
Below the code of all the steps. This is slightly different from the example and was partly given by the moderator.
Hope this works for you: don't forget to enter your Azure AD in this code-lines.
Ruud.
using Microsoft.IdentityModel.Clients.ActiveDirectory; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net; using System.IO; using Newtonsoft.Json; namespace ConsoleApplication_PowerBI_02 { class Program { private static string token = string.Empty; static void Main(string[] args) { string token = GetToken(); Console.WriteLine(token); //Console.ReadLine(); //Create a dataset in a Power BI dashboard CreateDataset(); //Get a dataset to add rows into a Power BI table string datasetId = GetDataset(); //Add rows to a Power BI table AddRows(datasetId, "Product"); } #region Get an authentication access token private static string GetToken() { // TODO: Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory -Version 2.21.301221612 // and add using Microsoft.IdentityModel.Clients.ActiveDirectory //The client id that Azure AD created when you registered your client app. string clientID = "ENTER YOUR AZURE AD CODE HERE"; //RedirectUri you used when you register your app. //For a client app, a redirect uri gives Azure AD more details on the application that it will authenticate. // You can use this redirect uri for your client app string redirectUri = "https://login.live.com/oauth20_desktop.srf"; //Resource Uri for Power BI API string resourceUri = "https://analysis.windows.net/powerbi/api"; //OAuth2 authority Uri string authorityUri = "https://login.windows.net/common/oauth2/authorize"; //Get access token: // To call a Power BI REST operation, create an instance of AuthenticationContext and call AcquireToken // AuthenticationContext is part of the Active Directory Authentication Library NuGet package // To install the Active Directory Authentication Library NuGet package in Visual Studio, // run "Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory" from the nuget Package Manager Console. // AcquireToken will acquire an Azure access token // Call AcquireToken to get an Azure token from Azure Active Directory token issuance endpoint AuthenticationContext authContext = new AuthenticationContext(authorityUri); //string token = authContext.AcquireToken(resourceUri, clientID, new Uri(redirectUri)).AccessToken; return authContext.AcquireTokenAsync(resourceUri, clientID, new Uri(redirectUri), new PlatformParameters(0)).Result.AccessToken; } #endregion #region Create a dataset in a Power BI dashboard private static void CreateDataset() { //TODO: Add using System.Net and using System.IO //Push data into a Power BI dashboard string powerBIDatasetsApiUrl = "https://api.powerbi.com/v1.0/myorg/datasets"; //POST web request to create a dataset. //To create a Dataset in a group, use the Groups uri: https://api.PowerBI.com/v1.0/myorg/groups/{group_id}/datasets HttpWebRequest request = System.Net.WebRequest.Create(powerBIDatasetsApiUrl) as System.Net.HttpWebRequest; request.KeepAlive = true; request.Method = "POST"; request.ContentLength = 0; request.ContentType = "application/json"; //Add token to the request header request.Headers.Add("Authorization", String.Format("Bearer {0}", GetToken())); //Create dataset JSON for POST request string datasetJson = "{\"name\": \"SalesMarketing\", \"tables\": " + "[{\"name\": \"Product\", \"columns\": " + "[{ \"name\": \"ProductID\", \"dataType\": \"Int64\"}, " + "{ \"name\": \"Name\", \"dataType\": \"string\"}, " + "{ \"name\": \"Category\", \"dataType\": \"string\"}," + "{ \"name\": \"IsCompete\", \"dataType\": \"bool\"}," + "{ \"name\": \"ManufacturedOn\", \"dataType\": \"DateTime\"}" + "]}]}"; //POST web request byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(datasetJson); request.ContentLength = byteArray.Length; //Write JSON byte[] into a Stream using (Stream writer = request.GetRequestStream()) { writer.Write(byteArray, 0, byteArray.Length); var response = (HttpWebResponse)request.GetResponse(); Console.WriteLine(string.Format("Dataset {0}", response.StatusCode.ToString())); //Console.ReadLine(); } } #endregion #region Get a dataset to add rows into a Power BI table private static string GetDataset() { string powerBIDatasetsApiUrl = "https://api.powerbi.com/v1.0/myorg/datasets"; //POST web request to create a dataset. //To create a Dataset in a group, use the Groups uri: https://api.PowerBI.com/v1.0/myorg/groups/{group_id}/datasets HttpWebRequest request = System.Net.WebRequest.Create(powerBIDatasetsApiUrl) as System.Net.HttpWebRequest; request.KeepAlive = true; request.Method = "GET"; request.ContentLength = 0; request.ContentType = "application/json"; //Add token to the request header request.Headers.Add("Authorization", String.Format("Bearer {0}", GetToken())); string datasetId = string.Empty; //Get HttpWebResponse from GET request using (HttpWebResponse httpResponse = request.GetResponse() as System.Net.HttpWebResponse) { //Get StreamReader that holds the response stream using (StreamReader reader = new System.IO.StreamReader(httpResponse.GetResponseStream())) { string responseContent = reader.ReadToEnd(); //TODO: Install NuGet Newtonsoft.Json package: Install-Package Newtonsoft.Json //and add using Newtonsoft.Json var results = JsonConvert.DeserializeObject<dynamic>(responseContent); //Get the first id //datasetId = results["value"][0]["id"]; //Get the first id //datasetId = results["value"][0]["id"]; var datasets = results["value"]; foreach (var ds in datasets) { //return the id of the first salesmarketing dataset if (ds["name"] == "SalesMarketing") { datasetId = ds["id"]; break; } } Console.WriteLine(String.Format("Dataset ID: {0}", datasetId)); //Console.ReadLine(); return datasetId; } } } #endregion #region Add rows to a Power BI table private static void AddRows(string datasetId, string tableName) { string powerBIApiAddRowsUrl = String.Format("https://api.powerbi.com/v1.0/myorg/datasets/{0}/tables/{1}/rows", datasetId, tableName); //POST web request to add rows. //To add rows to a dataset in a group, use the Groups uri: https://api.powerbi.com/v1.0/myorg/groups/{group_id}/datasets/{dataset_id}/tables/{table_name}/rows //Change request method to "POST" HttpWebRequest request = System.Net.WebRequest.Create(powerBIApiAddRowsUrl) as System.Net.HttpWebRequest; request.KeepAlive = true; request.Method = "POST"; request.ContentLength = 0; request.ContentType = "application/json"; //Add token to the request header request.Headers.Add("Authorization", String.Format("Bearer {0}", GetToken())); //JSON content for product row string rowsJson = "{\"rows\":" + "[{\"ProductID\":1,\"Name\":\"Adjustable Race\",\"Category\":\"Components\",\"IsCompete\":true,\"ManufacturedOn\":\"07/30/2014\"}," + "{\"ProductID\":2,\"Name\":\"LL Crankarm\",\"Category\":\"Components\",\"IsCompete\":true,\"ManufacturedOn\":\"07/30/2014\"}," + "{\"ProductID\":3,\"Name\":\"HL Mountain Frame - Silver\",\"Category\":\"Bikes\",\"IsCompete\":true,\"ManufacturedOn\":\"07/30/2014\"}]}"; //POST web request byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(rowsJson); request.ContentLength = byteArray.Length; //Write JSON byte[] into a Stream using (Stream writer = request.GetRequestStream()) { writer.Write(byteArray, 0, byteArray.Length); var response = (HttpWebResponse)request.GetResponse(); Console.WriteLine("Rows Added"); //Console.ReadLine(); } } #endregion } }
In the sample, steps 2 is using
Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory -Version 2.21.301221612
In the newer ADAL v3, try a new sample
using Microsoft.IdentityModel.Clients.ActiveDirectory; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication32 { class Program { static void Main(string[] args) { string token = GetToken(); Console.WriteLine(token); Console.ReadLine(); } #region Get an authentication access token private static string GetToken() { // TODO: Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory -Version 2.21.301221612 // and add using Microsoft.IdentityModel.Clients.ActiveDirectory //The client id that Azure AD created when you registered your client app. string clientID = "3f756axxxxxxx3662e"; //RedirectUri you used when you register your app. //For a client app, a redirect uri gives Azure AD more details on the application that it will authenticate. // You can use this redirect uri for your client app string redirectUri = "https://login.live.com/oauth20_desktop.srf"; //Resource Uri for Power BI API string resourceUri = "https://analysis.windows.net/powerbi/api"; //OAuth2 authority Uri string authorityUri = "https://login.windows.net/common/oauth2/authorize"; //Get access token: // To call a Power BI REST operation, create an instance of AuthenticationContext and call AcquireToken // AuthenticationContext is part of the Active Directory Authentication Library NuGet package // To install the Active Directory Authentication Library NuGet package in Visual Studio, // run "Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory" from the nuget Package Manager Console. // AcquireToken will acquire an Azure access token // Call AcquireToken to get an Azure token from Azure Active Directory token issuance endpoint AuthenticationContext authContext = new AuthenticationContext(authorityUri); //string token = authContext.AcquireToken(resourceUri, clientID, new Uri(redirectUri)).AccessToken; return authContext.AcquireTokenAsync(resourceUri, clientID, new Uri(redirectUri), new PlatformParameters(0)).Result.AccessToken; } #endregion } }
Hi,
I got as far as the last step in this example: adding rows to the dataset.
Greated the token, created the dataset en got back the datasetID.
When adding the rows I got the error-message in Visual Studio on the code-line
var response = (HttpWebResponse)request.GetResponse();
:
"An unhandled exception of type 'System.Net.WebException' occurred in System.dll
Additional information: De externe server heeft een fout geretourneerd: (404) Niet gevonden."
Can someone help me out on this ?
Console-screenshot
Regards, Ruud
Try refreshing your pbix manually. If doing so returns an error which do not allow the Power Query data to be loaded into the model, you'll need to fix that. Mine was due to relationship error as one of the columns that was supposed to have unique values suddenly contained duplicates. Relationship requires one of the columns to have unique values.
Check the answer in your new post.
Thanks very much for your help! It worked !!
User | Count |
---|---|
5 | |
5 | |
3 | |
2 | |
2 |
User | Count |
---|---|
9 | |
7 | |
4 | |
4 | |
4 |