/* * public static async Task<EmbedConfig> GetEmbedConfig() * { * EmbedToken embedToken = await Client.Reports.GenerateTokenInGroupAsync(SampleGroupId, SampleReportId, new GenerateTokenRequest(accessLevel: "view", datasetId: "[DATASET ID]")); * Report report = await Client.Reports.GetReportAsync(SampleGroupId, SampleReportId); * * var result = new EmbedConfig() * { * Id = report.Id, * EmbedToken = embedToken, * EmbedUrl = report.EmbedUrl * }; * * return result; * } */ public void NETGetEmbedTokenExample() { EmbedToken embedToken = ClientService.Client.Reports.GenerateTokenInGroup(PBIConfig.SampleGroupId, PBIConfig.SampleReportId, new GenerateTokenRequest(accessLevel: "view", datasetId: "[DATASET ID]")); Report report = ClientService.Client.Reports.GetReport(PBIConfig.SampleGroupId, PBIConfig.SampleReportId); Console.BackgroundColor = ConsoleColor.White; Console.ForegroundColor = ConsoleColor.Black; Console.WriteLine("*** EMBETD TOKEN ***"); Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Token: " + embedToken.Token); Console.WriteLine("Expiration: " + embedToken.Expiration.Value.ToString()); Console.WriteLine(""); Console.BackgroundColor = ConsoleColor.White; Console.ForegroundColor = ConsoleColor.Black; Console.WriteLine("*** REPORT ID ***"); Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(PBIConfig.SampleReportId); Console.WriteLine(""); Console.BackgroundColor = ConsoleColor.White; Console.ForegroundColor = ConsoleColor.Black; Console.WriteLine("*** REPORT EMBED URL ***"); Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(report.EmbedUrl); }
public static EmbeddedReportConfig GenerateReport(string token, Guid groupId, Guid reportId, string reportPageNameForMobile) { EmbeddedReportConfig config = null; var tokenCredentials = new TokenCredentials(token, "Bearer"); // Create a Power BI Client object. It will be used to call Power BI APIs. using (var client = new PowerBIClient(new Uri("https://api.powerbi.com"), tokenCredentials)) { Microsoft.PowerBI.Api.V2.Models.Report report = client.Reports.GetReportInGroup(groupId, reportId); if (report != null) { var requestParameters = new GenerateTokenRequest(); requestParameters.AccessLevel = "View"; // Generate EmbedToken This function sends the POST message //with all parameters and returns the token EmbedToken embedtoken = client.Reports.GenerateTokenInGroupAsync( groupId, reportId, requestParameters).GetAwaiter().GetResult(); config = new EmbeddedReportConfig(); config.EmbedURL = report.EmbedUrl; config.GroupID = groupId.ToString(); config.ReportID = reportId.ToString(); config.Token = embedtoken?.Token; config.TokenID = embedtoken?.TokenId.ToString(); config.Expiration = embedtoken?.Expiration; config.PageName = reportPageNameForMobile; } } return(config); }
//public IActionResult TimeConsuming() //{ // var uniqueName = HttpContext.User.Claims.First(claim => claim.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name").Value; // UsageTelemetry.Track(uniqueName, ArdaUsage.Report_Show); // return View(); //} public async Task <IActionResult> TimeConsuming() { string userObjectID = HttpContext.User.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value; var tokenCache = new NaiveSessionCache(userObjectID, NaiveSessionCacheResource.PowerBi, _cache); //ClientCredential credential = new ClientCredential(Startup.ClientId, Startup.ClientSecret); AuthenticationContext authContext = new AuthenticationContext(Startup.Authority, tokenCache); var authenticationResult = await authContext.AcquireTokenSilentAsync(Startup.PowerBIResourceId, Startup.ClientId); var tokenCredentials = new TokenCredentials(authenticationResult.AccessToken, "Bearer"); using (var client = new PowerBIClient(new Uri(Startup.PowerBIApiUrl), tokenCredentials)) { // You will need to provide the GroupID where the dashboard resides. ODataResponseListReport reports = await client.Reports.GetReportsInGroupAsync(Startup.PowerBIGroupId); // Get the first report in the group. Report report = reports.Value.FirstOrDefault(); // Generate Embed Token. var generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: "view"); EmbedToken tokenResponse = client.Reports.GenerateTokenInGroup(Startup.PowerBIGroupId, report.Id, generateTokenRequestParameters); // Generate Embed Configuration. var embedConfig = new EmbedConfig() { EmbedToken = tokenResponse, EmbedUrl = report.EmbedUrl, Id = report.Id }; return(View("PowerBI", embedConfig)); } }
private async Task <EmbedToken> GetEmbedTokenForReportsAsync(IEnumerable <PBIReport> pbiReports) { var tokenForMultipleReports = this.powerBIOptions.TokenForMultipleReports; var embedToken = this.groupEmbedToken; if (!tokenForMultipleReports) { var pbiReport = pbiReports.FirstOrDefault(); var reportId = pbiReport.Report.Id.ToString(); embedToken = this.embedTokentDict.ContainsKey(reportId) ? this.embedTokentDict[reportId] : null; } if (this.EmbedTokenHasExpired(embedToken)) { var request = this.CreateTokenRequestForReports(pbiReports); var forceUpdate = embedToken != null; var accessToken = await this.azureADService.GetAccessTokenAsync(forceUpdate); var client = this.CreatePowerBIClient(accessToken); embedToken = await client.EmbedToken.GenerateTokenAsync(request); if (tokenForMultipleReports) { this.groupEmbedToken = embedToken; } } return(embedToken); }
public Token GetTokenAccess() { try { AuthorityUrl = ConfigurationManager.AppSettings["authorityUrl"]; ResourceUrl = ConfigurationManager.AppSettings["resourceUrl"]; ApiUrl = ConfigurationManager.AppSettings["apiUrl"]; Username = ConfigurationManager.AppSettings["username"]; Credential = new UserPasswordCredential(Username, Secrets.Password); Authorize().Wait(); using (var client = new PowerBIClient(new Uri(ApiUrl), TokenCredentials)) { EmbedToken embedToken = client.Reports.GenerateTokenInGroup(groupId: GroupId, reportKey: ReportId, requestParameters: new GenerateTokenRequest(accessLevel: AccessLevel, datasetId: DatasetId)); Report report = client.Reports.GetReportInGroup(groupId: GroupId, reportKey: ReportId); return(new Token { EmbedUrl = report.EmbedUrl, EmbedToken = embedToken, Id = embedToken.TokenId }); } } catch (Exception ex) { return(new Token { ErrorMessage = ex.InnerException.ToString() }); } }
private bool EmbedTokenHasExpired(EmbedToken token) { var safetyInterval = this.powerBIOptions.SafetyIntervalInMinutes; var tokenExpiration = token?.Expiration.AddMinutes(-safetyInterval); var now = DateTime.UtcNow; return(token == null || tokenExpiration <= now); }
private EmbedReport ConvertEmbedReport(Report report, EmbedToken embedToken) { return(new EmbedReport() { Id = new ReportId(report.Id), EmbedToken = embedToken, EmbedUrl = report.EmbedUrl }); }
/// <summary> /// Gets the hash code /// </summary> /// <returns>Hash code</returns> public override int GetHashCode() { unchecked // Overflow is fine, just wrap { var hashCode = 41; // Suitable nullity checks etc, of course :) if (Description != null) { hashCode = hashCode * 59 + Description.GetHashCode(); } if (Photos != null) { hashCode = hashCode * 59 + Photos.GetHashCode(); } if (Gear != null) { hashCode = hashCode * 59 + Gear.GetHashCode(); } if (Calories != null) { hashCode = hashCode * 59 + Calories.GetHashCode(); } if (SegmentEfforts != null) { hashCode = hashCode * 59 + SegmentEfforts.GetHashCode(); } if (DeviceName != null) { hashCode = hashCode * 59 + DeviceName.GetHashCode(); } if (EmbedToken != null) { hashCode = hashCode * 59 + EmbedToken.GetHashCode(); } if (SplitsMetric != null) { hashCode = hashCode * 59 + SplitsMetric.GetHashCode(); } if (SplitsStandard != null) { hashCode = hashCode * 59 + SplitsStandard.GetHashCode(); } if (Laps != null) { hashCode = hashCode * 59 + Laps.GetHashCode(); } if (BestEfforts != null) { hashCode = hashCode * 59 + BestEfforts.GetHashCode(); } return(hashCode); } }
public HttpResponseMessage GetAccessTokenForCreate(string workspaceId, string datasetId) { try { HttpResponseMessage response; var accessToken = ((string[])Request.Headers.GetValues("Authorization"))[0];//Request.Headers.GetValues("Authorization").ToString(); using (var client = new PowerBIClient(new Uri("https://api.powerbi.com"), new TokenCredentials(accessToken, "Bearer"))) { GenerateTokenRequest generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: TokenAccessLevel.Create, datasetId: datasetId, allowSaveAs: true); EmbedToken tokenResponse = client.Reports.GenerateTokenForCreateInGroup(workspaceId, generateTokenRequestParameters); //return tokenResponse; var jsonResult = JsonConvert.SerializeObject(tokenResponse, Formatting.Indented); response = Request.CreateResponse(HttpStatusCode.OK, jsonResult); return(response); } } catch (Exception ex) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex.Message)); } }
private async void GenerateEmbedToken() { try { tokenCredentials = await PowerBIService.GetAccessTokenSecretAsync(); using (var client = new PowerBIClient(new Uri(Constants.ApiUrl), tokenCredentials)) { var TokenCached = App.EmbedTokenB.GetByGroupIDAndReportID(EmbedConfig.GroupID, EmbedConfig.Id); if (TokenCached == null) { //IList<Guid> ds = new List<Guid>(); //ds.Add(Guid.Parse(EmbedConfig.GroupID)); EmbedToken tokenResponse = client.Reports.GenerateToken(Guid.Parse(EmbedConfig.GroupID), Guid.Parse(EmbedConfig.Id), new GenerateTokenRequest(accessLevel: "view")); EmbedConfig.EmbedToken = tokenResponse; App.EmbedTokenB.Create(new Data.Models.EmbedTokenDTO() { Expiration = tokenResponse.Expiration, Token = tokenResponse.Token, GroupID = EmbedConfig.GroupID, Id = EmbedConfig.Id, TokenId = tokenResponse.TokenId.ToString() }); ConfigureReportViewer(); } else { EmbedConfig.EmbedToken = new EmbedToken(TokenCached.Token, Guid.Parse(TokenCached.TokenId), TokenCached.Expiration.Value); ConfigureReportViewer(); } } } catch (HttpOperationException ex) { var content = ex.Response.Content; Alerts.ShowAlert(string.Empty, "Error al mostrar el reporte."); } }
public async Task <EmbedToken> GetToken(string groupId, string type, string id) { try { string secretValue = KeyValutHelper.GetSecret(CommonConfig.PbiSecretUri); string[] splitValue = secretValue.Split(new String[] { Constants.PbiSecretSplit }, StringSplitOptions.None); string userName = splitValue[0]; string password = splitValue[1]; string token = await GetTokenAsync(userName, password); var tokenCredentials = new TokenCredentials(token, Constants.PbiTokenType); // Create a Power BI Client object. It will be used to call Power BI APIs. using (var client = new PowerBIClient(new Uri(CommonConfig.PbiApiUrl), tokenCredentials)) { // Generate Embed Token. var generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: Constants.PbiDefaultAccessLevel); EmbedToken tokenResponse = null; if (Constants.PbiTypeReport.Equals(type, StringComparison.OrdinalIgnoreCase)) { tokenResponse = await client.Reports.GenerateTokenInGroupAsync(groupId, id, generateTokenRequestParameters); } else if (Constants.PbiTypeDashboard.Equals(type, StringComparison.OrdinalIgnoreCase)) { tokenResponse = await client.Dashboards.GenerateTokenInGroupAsync(groupId, id, generateTokenRequestParameters); } return(tokenResponse); } } catch (Exception ex) { ExceptionManager.HandleServiceException(ex); return(null); } }
public static async Task <EmbeddedReportSettings> GetEmbeddedReportSettings(string workspaceId, string reportId) { using (PowerBIClient client = await CreateClient()) { // get report details Report report = await client.Reports.GetReportInGroupAsync(workspaceId, reportId); // Generate Embed Token. var generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: "view"); EmbedToken tokenResponse = await client.Reports.GenerateTokenInGroupAsync(workspaceId, reportId, generateTokenRequestParameters); // Generate Embed Configuration. var embedConfig = new EmbeddedReportSettings() { Token = tokenResponse, URL = report.EmbedUrl, ReportId = report.Id }; return(embedConfig); } }
static void Main(string[] args) { try { // Create a user password cradentials. credential = new UserPasswordCredential(username, Secrets.Password); // Authenticate using created credentials Authorize().Wait(); using (var client = new PowerBIClient(new Uri(apiUrl), tokenCredentials)) { EmbedToken embedToken = client.Reports.GenerateTokenInGroup(groupId, "<REPORT ID>", new GenerateTokenRequest(accessLevel: "View", datasetId: "<DATASET ID>")); Report report = client.Reports.GetReportInGroup(groupId, "<REPORT ID>"); #region Output Embed Token Console.WriteLine("\r*** EMBED TOKEN ***\r"); Console.Write("Report Id: "); Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine("<REPORT ID>"); Console.ResetColor(); Console.Write("Report Embed Url: "); Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine(report.EmbedUrl); Console.ResetColor(); Console.WriteLine("Embed Token Expiration: "); Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine(embedToken.Expiration.Value.ToString()); Console.ResetColor(); Console.WriteLine("Report Embed Token: "); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine(embedToken.Token); Console.ResetColor(); #endregion #region Output Datasets Console.WriteLine("\r*** DATASETS ***\r"); // List of Datasets // This method calls for items in a Group/App Workspace. To get a list of items within your "My Workspace" // call GetDatasets() ODataResponseListDataset datasetList = client.Datasets.GetDatasetsInGroup(groupId); foreach (Dataset ds in datasetList.Value) { Console.WriteLine(ds.Id + " | " + ds.Name); } #endregion #region Output Reports Console.WriteLine("\r*** REPORTS ***\r"); // List of reports // This method calls for items in a Group/App Workspace. To get a list of items within your "My Workspace" // call GetReports() ODataResponseListReport reportList = client.Reports.GetReportsInGroup(groupId); foreach (Report rpt in reportList.Value) { Console.WriteLine(rpt.Id + " | " + rpt.Name + " | DatasetID = " + rpt.DatasetId); } #endregion #region Output Dashboards Console.WriteLine("\r*** DASHBOARDS ***\r"); // List of reports // This method calls for items in a Group/App Workspace. To get a list of items within your "My Workspace" // call GetReports() ODataResponseListDashboard dashboards = client.Dashboards.GetDashboardsInGroup(groupId); foreach (Dashboard db in dashboards.Value) { Console.WriteLine(db.Id + " | " + db.DisplayName); } #endregion #region Output Gateways Console.WriteLine("\r*** Gateways ***\r"); ODataResponseListGateway gateways = client.Gateways.GetGateways(); Console.WriteLine(gateways.Value[0].Name); //foreach (Gateway g in gateways) //{ // Console.WriteLine(g.Name + " | " + g.GatewayStatus); //} #endregion } } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(ex.ToString()); Console.ResetColor(); } }
public async Task <ActionResult> Index() { Singleton PatronSingleton = Singleton.Instance; string MensajeError = String.Empty; var cacheKey = "TokenCredencials"; var cacheReportKey = "ReportName"; var cTime = DateTime.Now.AddMinutes(Convert.ToInt32(TokenTimeExpiration)); var cExp = System.Web.Caching.Cache.NoSlidingExpiration; var cPri = System.Web.Caching.CacheItemPriority.NotRemovable; var foo = System.Web.HttpContext.Current.Cache[cacheKey]; string key = ConfigurationManager.AppSettings["key"]; string Username = ConfigurationManager.AppSettings["pbiUsername"]; string Password = ConfigurationManager.AppSettings["pbiPassword"]; //Desencriptar los valores Username = encriptar.Rijndael.Decrypt(Username, key); Username = Username + "@corpmaresa.com.ec"; Password = encriptar.Rijndael.Decrypt(Password, key); //Username = "******"; List <string> ListLogs = new List <string>(); string FiltroTabla = String.Empty; string FiltroColumna = String.Empty; string TipoDato = String.Empty; List <string> ValueFilter = new List <string>(); List <string> FiltrosTabla = new List <string>(); List <string> FiltrosColumna = new List <string>(); List <string> ValuesFilter = new List <string>(); List <string> TiposDato = new List <string>(); var resultReport = (EmbedConfig)System.Web.HttpContext.Current.Cache[cacheReportKey]; if (resultReport == null) { //Buscar WorkSpaceId and ReportId string NameReport = String.Empty; //Valida que este presente el Nombre del reporte y los Filtros int respuestaError = ValidarValoresInicio(); if (respuestaError == 1) { return(View("~/Views/Home/Error.cshtml")); } NameReport = TempData["NameReport"].ToString(); TempData.Keep("NameReport"); List <Models.Filter> DataValueFilter = (List <Models.Filter>)TempData["ValuesFilter"]; TempData.Keep("ValuesFilter"); foreach (var item in DataValueFilter) { FiltroTabla = item.FiltroTabla; FiltroColumna = item.FiltroColumna; string ValueFilterItem = item.ValueFilter[0].ToString(); TipoDato = item.TipoDato; WorkspaceId = item.WorkSpaceId; ReportId = item.ReportId; FiltrosTabla.Add(FiltroTabla); FiltrosColumna.Add(FiltroColumna); ValuesFilter.Add(ValueFilterItem); TiposDato.Add(TipoDato); } //FiltroTabla = "MSI_WCD_POL"; //FiltroColumna = "Concesionario"; //string ValueFilterItem = "IMPARTES S.A.-LANZOTY C.A.-MAREAUTO S.A.-AUTOFENIX S. A.-ECUAMOTORS S.A.-AUTOMOTORES ANDINA-MANUFACTURAS ARMADURIAS Y REPUESTOS ECUATORIANOS S.A. MARESA-IOMOTORS S. A.-OROAUTO S.A.-COMERCIAL HIDROBO S.A.-AMBANDINE S.A.-AMBAMAZDA S.A.-MARESA CENTER-MARESA CENTER DIST.-AUTOSHARECORP S.A.-AUTOSDELSUR S.A-MARESA CENTER GBM-AUTOMAXFIVE-GALARMOBIL-MORACOSTA-SUPERDEALER-CUENCAUTO-MEGAUTOLOJA-IMPORTADORA GUZMAN-ITALCAUCHOS CIA. LTDA.-EQUINORTE S.A.-EQUINORTE S.A.-AUTO DELTA CIA.LTDA-SERVICIOS AUTOMOTRICES SERAUTOTALS.A.-S.A. IMPORTADORA ANDINA S.A.I.A.-INDUAUTO"; //TipoDato = "S"; //WorkspaceId = "e467de32-64dc-4d5d-933c-915a65547a3b"; //ReportId = "14adbe76-e266-4e15-8391-dab89ed5abb8"; //FiltrosTabla.Add(FiltroTabla); //FiltrosColumna.Add(FiltroColumna); //ValuesFilter.Add(ValueFilterItem); //TiposDato.Add(TipoDato); } else { WorkspaceId = resultReport.WorkspaceId; ReportId = resultReport.ReportId; } tokenCredentials = null; var reportName = "report_" + ReportId; try { var tokenCredentialsAAD = System.Web.HttpContext.Current.Session["tokenCredentialsAAD"]; var tokenResponse = System.Web.HttpContext.Current.Session["tokenResponse"]; string username = String.Empty; string roles = String.Empty; var result = new EmbedConfig(); try { /*Obtener datos usuario*/ List <string> datos = (List <string>)TempData["sessionUser"]; TempData.Keep("sessionUser"); username = datos[0] == null ? "": datos[0]; /*Fin Obtener datos usuario*/ if (resultReport != null) { //Validar Token Credencial tokenCredentialsAAD = tokenCredentialsAAD == null ? "": tokenCredentialsAAD; if (!String.IsNullOrEmpty(tokenCredentialsAAD.ToString())) { tokenCredentialsAAD = await GetNewTokenCredencial(Username, Password); System.Web.HttpContext.Current.Session["tokenCredentialsAAD"] = tokenCredentialsAAD; if (tokenCredentialsAAD == null) { if (TempData["sessionUser"] != null) { ListLogs.Clear(); ListLogs.Add("Inicio EmbeddedReport Controller. Token del Credencial no existe"); ListLogs.Add("ERROR"); //AddLogDataBase(ListLogs, TempData["sessionUser"]); } ViewBag.Error = "Token de Credencial no existe"; return(View("~/Views/Home/Error.cshtml")); } } //Validar Token Response tokenResponse = tokenResponse == null ? "" : tokenResponse; if (!String.IsNullOrEmpty(tokenResponse.ToString())) { var FechaActual = System.Web.HttpContext.Current.Session["tokenResponseExp"]; int respuesta = ValidarToken(FechaActual.ToString(), 1); if (respuesta == 1) { tokenCredentialsAAD = System.Web.HttpContext.Current.Session["tokenCredentialsAAD"]; EmbedToken TokenReponse = await GetNewTokenResponse(WorkspaceId, ReportId, tokenCredentialsAAD); System.Web.HttpContext.Current.Session["tokenResponse"] = TokenReponse; //Validar Tiempo del Token EmbedToken jwtOri = (EmbedToken)tokenResponse; DateTime DateExp = Convert.ToDateTime(jwtOri.Expiration); var timeEpox = ConvertToUnixTime(DateExp); System.Web.HttpContext.Current.Session["tokenResponseExp"] = timeEpox; if (TokenReponse == null) { if (TempData["sessionUser"] != null) { ListLogs.Clear(); ListLogs.Add("Inicio EmbeddedReport Controller. Token Power Bi Reponse. TokenReponse no existe"); ListLogs.Add("ERROR"); //AddLogDataBase(ListLogs, TempData["sessionUser"]); } ViewBag.Error = "Token Power Bi Reponse. TokenReponse no existe"; return(View("~/Views/Home/Error.cshtml")); } resultReport.EmbedToken = TokenReponse; } } return(View(resultReport)); } //Aqui uno la lista de los valores, esta lista de valores fue almacenada en HomeController, //esto comprende, el campo FiltroTabla, FiltroColumna y los valores de cada uno de ellos. List <EmbedConfig> resulList = new List <EmbedConfig>(); result = new EmbedConfig { Username = username, Roles = roles, FiltroTabla = FiltrosTabla, FiltroColumna = FiltrosColumna, ValoresFiltro = ValuesFilter, TiposDato = TiposDato, WorkspaceId = WorkspaceId, ReportId = ReportId }; // Create a user token access. if (tokenCredentialsAAD != null) { //TODO: VALIDAR TIEMPO DE EXPIRACIÓN tokenCredentials = (TokenCredentials)tokenCredentialsAAD; } else { var credential = new UserPasswordCredential(Username, Password); // Authenticate using created credentials var authenticationContext = new AuthenticationContext(AuthorityUrl); var authenticationResult = await authenticationContext.AcquireTokenAsync(ResourceUrl, ApplicationId, credential); if (authenticationResult == null) { result.ErrorMessage = "Authentication Failed."; return(View(result)); } tokenCredentials = new TokenCredentials(authenticationResult.AccessToken, "Bearer"); System.Web.HttpContext.Current.Session["tokenCredentialsAAD"] = tokenCredentials; System.Web.HttpContext.Current.Cache.Insert(cacheKey, tokenCredentials, null, cTime, cExp, cPri, null); } // Create a Power BI Client object. It will be used to call Power BI APIs. using (var client = new PowerBIClient(new Uri(ApiUrl), tokenCredentials)) { // Get a list of reports. var reportsFromWorkspace = System.Web.HttpContext.Current.Session["reportsFromWorkspace"]; ODataResponseListReport reports; if (reportsFromWorkspace != null) { reports = (ODataResponseListReport)reportsFromWorkspace; } else { reports = await client.Reports.GetReportsInGroupAsync(WorkspaceId); System.Web.HttpContext.Current.Session["reportsFromWorkspace"] = reports; } // No reports retrieved for the given workspace. if (reports.Value.Count() == 0) { result.ErrorMessage = "No reports were found in the workspace"; return(View(result)); } Report report; if (string.IsNullOrWhiteSpace(ReportId)) { // Get the first report in the workspace. report = reports.Value.FirstOrDefault(); } else { report = reports.Value.FirstOrDefault(r => r.Id == ReportId); } if (report == null) { result.ErrorMessage = "No report with the given ID was found in the workspace. Make sure ReportId is valid."; return(View(result)); } //GenerateTokenRequest generateTokenRequestParameters; //var generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: "view"); var generateTokenRequestParameters = new GenerateTokenRequest(); tokenResponse = await client.Reports.GenerateTokenInGroupAsync(WorkspaceId, report.Id, generateTokenRequestParameters); if (tokenResponse == null) { if (TempData["sessionUser"] != null) { ListLogs.Clear(); ListLogs.Add("Inicio EmbeddedReport Controller. Failed to generate embed token"); ListLogs.Add("ERROR"); AddLogDataBase(ListLogs, TempData["sessionUser"]); } result.ErrorMessage = "Failed to generate embed token."; return(View(result)); } else { System.Web.HttpContext.Current.Session["tokenResponse"] = tokenResponse; } if (System.Web.HttpContext.Current.Session["tokenResponseExp"] == null) { EmbedToken jwtOri = (EmbedToken)tokenResponse; DateTime DateExp = Convert.ToDateTime(jwtOri.Expiration); var timeEpox = ConvertToUnixTime(DateExp); System.Web.HttpContext.Current.Session["tokenResponseExp"] = timeEpox; } // Generate Embed Configuration. result.EmbedToken = (EmbedToken)tokenResponse; result.EmbedUrl = report.EmbedUrl; result.Id = report.Id; //cli y emp, deben ser reemplazados por la lista de valores. System.Web.HttpContext.Current.Session[reportName] = result; System.Web.HttpContext.Current.Cache.Insert(cacheReportKey, result, null, cTime, cExp, cPri, null); if (TempData["sessionUser"] != null) { ListLogs.Clear(); ListLogs.Add("Inicio EmbeddedReport Controller. Token Nuevo"); ListLogs.Add("INFO"); AddLogDataBase(ListLogs, TempData["sessionUser"]); } return(View(result)); } } catch (HttpOperationException exc) { int Linea = GetLineNumber(exc); result.ErrorMessage = Linea.ToString(); } catch (Exception exc) { int Linea = GetLineNumber(exc); result.ErrorMessage = "Error:" + exc + " .Línea de Error: " + Linea.ToString(); } return(View(result)); } catch (Exception ex) { int Linea = GetLineNumber(ex); if (TempData["sessionUser"] != null) { ListLogs.Clear(); ListLogs.Add("Inicio EmbeddedReport Controller. Error. " + ex.Message + " .Línea de Error:" + Linea); ListLogs.Add("INFO"); AddLogDataBase(ListLogs, TempData["sessionUser"]); } return(PartialView("Error" + ex.Message + " .Línea de Error:" + Linea)); } }
public PowerBIModel(EmbedToken embedToken, string embedUrl) { EmbedToken = embedToken; EmbedUrl = embedUrl; }
public async Task <ActionResult> EmbedReport(string username, string roles) { var result = new EmbedConfig(); try { result = new EmbedConfig { Username = username, Roles = roles }; var error = GetWebConfigErrors(); if (error != null) { result.ErrorMessage = error; return(View(result)); } // Create a user password cradentials. var credential = new UserPasswordCredential(Username, Password); // Authenticate using created credentials var authenticationContext = new AuthenticationContext(AuthorityUrl); var authenticationResult = await authenticationContext.AcquireTokenAsync(ResourceUrl, ClientId, credential); if (authenticationResult == null) { result.ErrorMessage = "Authentication Failed."; return(View(result)); } var tokenCredentials = new TokenCredentials(authenticationResult.AccessToken, "Bearer"); // Create a Power BI Client object. It will be used to call Power BI APIs. using (var client = new PowerBIClient(new Uri(ApiUrl), tokenCredentials)) { var reports = await client.Reports.GetReportsInGroupAsync(GroupId); Report report; if (string.IsNullOrEmpty(ReportId)) { // Get the first report in the group. report = reports.Value.FirstOrDefault(); } else { report = reports.Value.FirstOrDefault(r => r.Id == ReportId); } if (report == null) { result.ErrorMessage = "Group has no reports."; return(View(result)); } var et = new EmbedToken(authenticationResult.AccessToken, null, null); // Generate Embed Configuration. result.EmbedToken = authenticationResult.AccessToken; result.EmbedUrl = report.EmbedUrl; result.Id = report.Id; return(View(result)); } } catch (HttpOperationException exc) { result.ErrorMessage = string.Format("Status: {0} ({1})\r\nResponse: {2}\r\nRequestId: {3}", exc.Response.StatusCode, (int)exc.Response.StatusCode, exc.Response.Content, exc.Response.Headers["RequestId"].FirstOrDefault()); } catch (Exception exc) { result.ErrorMessage = exc.ToString(); } return(View(result)); }
static void Main(string[] args) { try { // Create a user password cradentials. credential = new ClientCredential(Secrets.ClientID, Secrets.ClientSecret); // Authenticate using created credentials Authorize().Wait(); using (var client = new PowerBIClient(new Uri(apiUrl), tokenCredentials)) { #region Embed Token EmbedToken embedToken = null; if (useEmbedToken && !useRLS) { // **** Without RLS **** embedToken = client.Reports.GenerateTokenInGroup(groupId, reportId, new GenerateTokenRequest(accessLevel: "View", datasetId: datasetId.ToString())); } else if (useEmbedToken && useRLS) { // **** With RLS **** // Documentation: https://docs.microsoft.com/power-bi/developer/embedded/embedded-row-level-security // Example: // // Define Embed Token request: //var generateTokenRequestParameters = new GenerateTokenRequest("View", null, // identities: new List<EffectiveIdentity> { new EffectiveIdentity(username: "******", // roles: new List<string> { "roleA", "roleB" }, // datasets: new List<string> { "datasetId" }) }); // // Generate Embed Token: //var tokenResponse = await client.Reports.GenerateTokenInGroupAsync("groupId", "reportId", // generateTokenRequestParameters); var rls = new EffectiveIdentity(username: "******", new List <string> { datasetId.ToString() }); var rolesList = new List <string>(); rolesList.Add("<ENTER ROLE>"); rls.Roles = rolesList; embedToken = client.Reports.GenerateTokenInGroup(groupId, reportId, new GenerateTokenRequest(accessLevel: "View", datasetId: datasetId.ToString(), rls)); } #endregion #region Output Embed Token if (useEmbedToken) { // Get a single report used for embedding Report report = client.Reports.GetReportInGroup(groupId, reportId); Console.WriteLine("\r*** EMBED TOKEN ***\r"); Console.Write("Report Id: "); Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine(reportId); Console.ResetColor(); Console.Write("Report Embed Url: "); Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine(report.EmbedUrl); Console.ResetColor(); Console.WriteLine("Embed Token Expiration: "); Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine(embedToken.Expiration.ToString()); Console.ResetColor(); Console.WriteLine("Report Embed Token: "); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine(embedToken.Token); Console.ResetColor(); } #endregion #region Output Datasets Console.WriteLine("\r*** DATASETS ***\r"); try { // List of Datasets // This method calls for items in a Group/App Workspace. To get a list of items within your "My Workspace" // call GetDatasets() var datasetList = client.Datasets.GetDatasetsInGroup(groupId); foreach (Dataset ds in datasetList.Value) { Console.WriteLine(ds.Id + " | " + ds.Name); } } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Error fetching datasets: " + ex.Message); Console.ResetColor(); } #endregion #region Output Reports Console.WriteLine("\r*** REPORTS ***\r"); try { // List of reports // This method calls for items in a Group/App Workspace. To get a list of items within your "My Workspace" // call GetReports() var reportList = client.Reports.GetReportsInGroup(groupId); foreach (Report rpt in reportList.Value) { Console.WriteLine(rpt.Id + " | " + rpt.Name + " | DatasetID = " + rpt.DatasetId); } } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Error fetching reports: " + ex.Message); Console.ResetColor(); } #endregion #region Output Dashboards Console.WriteLine("\r*** DASHBOARDS ***\r"); try { // List of reports // This method calls for items in a Group/App Workspace. To get a list of items within your "My Workspace" // call GetReports() var dashboards = client.Dashboards.GetDashboardsInGroup(groupId); foreach (Dashboard db in dashboards.Value) { Console.WriteLine(db.Id + " | " + db.DisplayName); } } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Error fetching dashboards: " + ex.Message); Console.ResetColor(); } #endregion #region Output Gateways Console.WriteLine("\r*** Gateways ***\r"); try { var gateways = client.Gateways.GetGateways(); Console.WriteLine(gateways.Value[0].Name); //foreach (Gateway g in gateways) //{ // Console.WriteLine(g.Name + " | " + g.GatewayStatus); //} } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Error fetching gateways: " + ex.Message); Console.ResetColor(); } #endregion } } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(ex.ToString()); Console.ResetColor(); } }
/// <summary> /// Returns true if DetailedActivity instances are equal /// </summary> /// <param name="other">Instance of DetailedActivity to be compared</param> /// <returns>Boolean</returns> public bool Equals(DetailedActivity other) { if (ReferenceEquals(null, other)) { return(false); } if (ReferenceEquals(this, other)) { return(true); } return (( Description == other.Description || Description != null && Description.Equals(other.Description) ) && ( Photos == other.Photos || Photos != null && Photos.Equals(other.Photos) ) && ( Gear == other.Gear || Gear != null && Gear.Equals(other.Gear) ) && ( Calories == other.Calories || Calories != null && Calories.Equals(other.Calories) ) && ( SegmentEfforts == other.SegmentEfforts || SegmentEfforts != null && SegmentEfforts.SequenceEqual(other.SegmentEfforts) ) && ( DeviceName == other.DeviceName || DeviceName != null && DeviceName.Equals(other.DeviceName) ) && ( EmbedToken == other.EmbedToken || EmbedToken != null && EmbedToken.Equals(other.EmbedToken) ) && ( SplitsMetric == other.SplitsMetric || SplitsMetric != null && SplitsMetric.SequenceEqual(other.SplitsMetric) ) && ( SplitsStandard == other.SplitsStandard || SplitsStandard != null && SplitsStandard.SequenceEqual(other.SplitsStandard) ) && ( Laps == other.Laps || Laps != null && Laps.SequenceEqual(other.Laps) ) && ( BestEfforts == other.BestEfforts || BestEfforts != null && BestEfforts.SequenceEqual(other.BestEfforts) )); }