예제 #1
0
        public static ReportsController.FetchReportResult FetchReport(string reportId)
        {
            // Create a dev token for fetch
            var devToken = PowerBIToken.CreateDevToken(WorkspaceCollection, WorkspaceId);

            using (var client = CreatePowerBiClient(devToken))
            {
                var reports = ReportsExtensions.GetReports(client.Reports, WorkspaceCollection, WorkspaceId);
                var report  = reports.Value.FirstOrDefault(r => r.Id == reportId);

                if (report != null)
                {
                    var embedToken = PowerBIToken.CreateReportEmbedToken(WorkspaceCollection, WorkspaceId, report.Id);

                    var result = new ReportsController.FetchReportResult
                    {
                        Report      = report,
                        AccessToken = embedToken.Generate(ConfigHelper.PowerbiSigningKey)
                    };

                    return(result);
                }

                return(new ReportsController.FetchReportResult()
                {
                    AccessToken = string.Empty,
                    Report = null
                });
            }
        }
예제 #2
0
        public static void UpdateConnection()
        {
            // Create a dev token for update
            var devToken = PowerBIToken.CreateDevToken(WorkspaceCollection, WorkspaceId);

            using (var client = CreatePowerBiClient(devToken))
            {
                // Get DataSets
                var dataset     = DatasetsExtensions.GetDatasets(client.Datasets, WorkspaceCollection, WorkspaceId).Value.Last();
                var datasources = DatasetsExtensions.GetGatewayDatasources(client.Datasets, WorkspaceCollection, WorkspaceId, dataset.Id).Value;

                // Build Credentials
                var delta = new GatewayDatasource
                {
                    CredentialType = "Basic",

                    BasicCredentials = new BasicCredentials
                    {
                        Username = WingtipTicketApp.Config.DatabaseUser,
                        Password = WingtipTicketApp.Config.DatabasePassword
                    }
                };

                // Update each DataSource
                foreach (var datasource in datasources)
                {
                    // Update the datasource with the specified credentials
                    GatewaysExtensions.PatchDatasource(client.Gateways, WorkspaceCollection, WorkspaceId, datasource.GatewayId, datasource.Id, delta);
                }
            }
        }
예제 #3
0
        public async Task <ActionResult> Index()
        {
            try
            {
                var devToken = PowerBIToken.CreateDevToken(this.workspaceCollection, this.workspaceId);
                using (var client = CreatePowerBIClient(devToken))
                {
                    var viewModel = new List <ReportViewModel>();

                    var reportsResponse = await client.Reports.GetReportsAsync(this.workspaceCollection, this.workspaceId);

                    var dashboardReports = reportsResponse.Value.Where(m => m.Name.ToLower().Contains("dashboard"));

                    foreach (Report report in dashboardReports)
                    {
                        var embedToken = PowerBIToken.CreateReportEmbedToken(this.workspaceCollection, this.workspaceId, report.Id);
                        viewModel.Add(new ReportViewModel()
                        {
                            Report = report, AccessToken = embedToken.Generate(this.accessKey)
                        });
                    }

                    return(View(viewModel));
                }
            }
            catch (Exception ex)
            {
                StorageClient.LogError(ex);
            }
            return(null);
        }
예제 #4
0
        public async Task <ActionResult> Report(string reportId)
        {
            try
            {
                var devToken = PowerBIToken.CreateDevToken(this.workspaceCollection, this.workspaceId);
                using (var client = this.CreatePowerBIClient(devToken))
                {
                    var reportsResponse = await client.Reports.GetReportsAsync(this.workspaceCollection, this.workspaceId);

                    var report     = reportsResponse.Value.FirstOrDefault(r => r.Id == reportId);
                    var embedToken = PowerBIToken.CreateReportEmbedToken(this.workspaceCollection, this.workspaceId, report.Id);

                    var viewModel = new ReportViewModel
                    {
                        Report      = report,
                        AccessToken = embedToken.Generate(this.accessKey)
                    };

                    return(View(viewModel));
                }
            }
            catch (Exception ex)
            {
                StorageClient.LogError(ex);
            }
            return(null);
        }
        /// <summary>
        /// Removes a published dataset from a given workspace.
        /// </summary>
        /// <param name="workspaceCollectionName">The Power BI workspace collection name</param>
        /// <param name="workspaceId">The target Power BI workspace id</param>
        /// <param name="datasetId">The Power BI dataset to delete</param>
        /// <returns></returns>
        static async Task DeleteDataset(string workspaceCollectionName, string workspaceId, string datasetId)
        {
            var devToken = PowerBIToken.CreateDevToken(workspaceCollectionName, workspaceId);

            using (var client = await CreateClient(devToken))
            {
                await client.Datasets.DeleteDatasetByIdAsync(workspaceCollectionName, workspaceId, datasetId);
            }
        }
예제 #6
0
        /// <summary>
        /// Updates the Power BI dataset connection info for datasets with direct query connections
        /// </summary>
        /// <param name="workspaceCollectionName">The Power BI workspace collection name</param>
        /// <param name="workspaceId">The Power BI workspace id that contains the dataset</param>
        /// <returns></returns>
        static async Task UpdateConnection(string workspaceCollectionName, string workspaceId)
        {
            if (string.IsNullOrWhiteSpace(username))
            {
                Console.Write("Username: "******"Password: "******"Connection String (enter to skip): ");
            connectionString = Console.ReadLine();
            Console.WriteLine();

            var devToken = PowerBIToken.CreateDevToken(workspaceCollectionName, workspaceId);

            using (var client = await CreateClient(devToken))
            {
                // Get the newly created dataset from the previous import process
                var datasets = await client.Datasets.GetDatasetsAsync(workspaceCollectionName, workspaceId);

                // Optionally udpate the connectionstring details if preent
                if (!string.IsNullOrWhiteSpace(connectionString))
                {
                    var connectionParameters = new Dictionary <string, object>
                    {
                        { "connectionString", connectionString }
                    };
                    await client.Datasets.SetAllConnectionsAsync(workspaceCollectionName, workspaceId, datasets.Value[datasets.Value.Count - 1].Id, connectionParameters);
                }

                // Get the datasources from the dataset
                var datasources = await client.Datasets.GetGatewayDatasourcesAsync(workspaceCollectionName, workspaceId, datasets.Value[datasets.Value.Count - 1].Id);

                // Reset your connection credentials
                var delta = new GatewayDatasource
                {
                    CredentialType   = "Basic",
                    BasicCredentials = new BasicCredentials
                    {
                        Username = username,
                        Password = password
                    }
                };

                // Update the datasource with the specified credentials
                await client.Gateways.PatchDatasourceAsync(workspaceCollectionName, workspaceId, datasources.Value[datasources.Value.Count - 1].GatewayId, datasources.Value[datasources.Value.Count - 1].Id, delta);
            }
        }
예제 #7
0
 static Import ImportPbix(string workspaceCollectionName, string workspaceId, string datasetName, string filePath, string accessKey, string apiUrl)
 {
     using (var fileStream = File.OpenRead(filePath))
     {
         // Create a dev token for import
         var devToken = PowerBIToken.CreateDevToken(workspaceCollectionName, workspaceId);
         using (var client = CreateClient(devToken, accessKey, apiUrl))
         {
             // Import PBIX file from the file stream
             var import = client.Imports.PostImportWithFile(workspaceCollectionName, workspaceId, fileStream, datasetName);
             return(import);
         }
     }
 }
        /// <summary>
        /// Lists the datasets that are published to a given workspace.
        /// </summary>
        /// <param name="workspaceCollectionName">The Power BI workspace collection name</param>
        /// <param name="workspaceId">The target Power BI workspace id</param>
        /// <returns></returns>
        static async Task ListDatasets(string workspaceCollectionName, string workspaceId)
        {
            var devToken = PowerBIToken.CreateDevToken(workspaceCollectionName, workspaceId);

            using (var client = await CreateClient(devToken))
            {
                ODataResponseListDataset response = await client.Datasets.GetDatasetsAsync(workspaceCollectionName, workspaceId);

                foreach (Dataset d in response.Value)
                {
                    Console.WriteLine("{0}:  {1}", d.Name, d.Id);
                }
            }
        }
        public ActionResult Reports()
        {
            var devToken = PowerBIToken.CreateDevToken(this.workspaceCollection, this.workspaceId);

            using (var client = this.CreatePowerBIClient(devToken))
            {
                var reportsResponse = client.Reports.GetReports(this.workspaceCollection, this.workspaceId);

                var viewModel = new ReportsViewModel
                {
                    Reports = reportsResponse.Value.ToList()
                };

                return(PartialView(viewModel));
            }
        }
예제 #10
0
        public static SelectList FetchReports(string reportId, string exclude = null)
        {
            // Create a dev token for fetch
            var devToken = PowerBIToken.CreateDevToken(WorkspaceCollection, WorkspaceId);

            using (var client = CreatePowerBiClient(devToken))
            {
                var reportsResponse = ReportsExtensions.GetReports(client.Reports, WorkspaceCollection, WorkspaceId);

                if (!string.IsNullOrEmpty(exclude))
                {
                    reportsResponse.Value = reportsResponse.Value.Where(r => !r.Name.Equals(exclude)).ToList();
                }

                return(new SelectList(reportsResponse.Value.ToList(), "Id", "Name", reportId));
            }
        }
예제 #11
0
        public static void UploadReport(HttpPostedFileBase postedFile)
        {
            // Create a dev token for import
            var devToken = PowerBIToken.CreateDevToken(WorkspaceCollection, WorkspaceId);

            using (var client = CreatePowerBiClient(devToken))
            {
                // Import PBIX file from the file stream
                var import = ImportsExtensions.PostImportWithFile(client.Imports, WorkspaceCollection, WorkspaceId, postedFile.InputStream, Path.GetFileNameWithoutExtension(postedFile.FileName));

                // Poll the import to check when succeeded
                while (import.ImportState != "Succeeded" && import.ImportState != "Failed")
                {
                    import = ImportsExtensions.GetImportById(client.Imports, WorkspaceCollection, WorkspaceId, import.Id);
                    Thread.Sleep(1000);
                }
            }
        }
예제 #12
0
        public async Task <IHttpActionResult> GetReports()
        {
            Guid workspaceId = Guid.Parse(ConfigurationManager.AppSettings["powerbi:WorkspaceId"]);
            var  devToken    = PowerBIToken.CreateDevToken(ConfigurationManager.AppSettings["powerbi:WorkspaceCollection"], workspaceId);

            using (var client = this.CreatePowerBIClient(devToken))
            {
                var reportsResponse = await client.Reports.GetReportsAsync();

                return(Ok(reportsResponse.Value
                          .Select(report => new
                {
                    workspaceId = workspaceId,
                    reportId = report.Id,
                    reportName = report.Name,
                    reportEmbedUrl = report.EmbedUrl,
                })));
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                List <ReportViewModel> reportsList = new List <ReportViewModel>();
                var devToken = PowerBIToken.CreateDevToken(workspaceCollection, workspaceId);
                using (var client = this.CreatePowerBIClient(devToken))
                {
                    var reportsResponse = client.Reports.GetReports(workspaceCollection, workspaceId);

                    for (int i = 0; i < reportsResponse.Value.ToList().Count; i++)
                    {
                        reportsList.Add(new ReportViewModel
                        {
                            Id       = reportsResponse.Value[i].Id,
                            Name     = reportsResponse.Value[i].Id,
                            EmbedUrl = reportsResponse.Value[i].EmbedUrl,
                            WebUrl   = reportsResponse.Value[i].WebUrl,
                            Report   = reportsResponse.Value[i]
                        }
                                        );
                    }
                }

                var reportId = reportsList[0].Id;
                using (var client = this.CreatePowerBIClient(devToken))
                {
                    var embedToken = PowerBIToken.CreateReportEmbedToken(workspaceCollection, workspaceId, reportId);

                    var viewModel = new ReportViewModel
                    {
                        Report      = reportsList[0].Report,
                        AccessToken = embedToken.Generate(accessKey)
                    };

                    accessTokenText.Value = viewModel.AccessToken;
                    embedUrlText.Value    = viewModel.Report.EmbedUrl;
                }
            }
        }
        public async Task <ActionResult> Index()
        {
            List <ReportViewModel> reportsList = new List <ReportViewModel>();
            var devToken = PowerBIToken.CreateDevToken(this.workspaceCollection, this.workspaceId);

            using (var client = this.CreatePowerBIClient(devToken))
            {
                var reportsResponse = client.Reports.GetReports(this.workspaceCollection, this.workspaceId);

                for (int i = 0; i < reportsResponse.Value.ToList().Count; i++)
                {
                    reportsList.Add(new ReportViewModel
                    {
                        Id       = reportsResponse.Value[i].Id,
                        Name     = reportsResponse.Value[i].Id,
                        EmbedUrl = reportsResponse.Value[i].EmbedUrl,
                        WebUrl   = reportsResponse.Value[i].WebUrl,
                        Report   = reportsResponse.Value[i]
                    }
                                    );
                }
            }


            var reportId = reportsList[0].Id;

            using (var client = this.CreatePowerBIClient(devToken))
            {
                var embedToken = PowerBIToken.CreateReportEmbedToken(this.workspaceCollection, this.workspaceId, reportId);

                var viewModel = new ReportViewModel
                {
                    Report      = reportsList[0].Report,
                    AccessToken = embedToken.Generate(this.accessKey)
                };

                return(View(viewModel));
            }
        }
예제 #15
0
        public ActionResult Reports()
        {
            try
            {
                var devToken = PowerBIToken.CreateDevToken(this.workspaceCollection, this.workspaceId);
                using (var client = this.CreatePowerBIClient(devToken))
                {
                    var reportsResponse = client.Reports.GetReports(this.workspaceCollection, this.workspaceId);

                    var viewModel = new ReportsViewModel
                    {
                        Reports = reportsResponse.Value.OrderBy(m => m.Name).ToList()
                    };

                    return(PartialView(viewModel));
                }
            }
            catch (Exception ex)
            {
                StorageClient.LogError(ex);
            }
            return(null);
        }
예제 #16
0
        /// <summary>
        /// Imports a Power BI Desktop file (pbix) into the Power BI Embedded service
        /// </summary>
        /// <param name="workspaceCollectionName">The Power BI workspace collection name</param>
        /// <param name="workspaceId">The target Power BI workspace id</param>
        /// <param name="datasetName">The dataset name to apply to the uploaded dataset</param>
        /// <param name="filePath">A local file path on your computer</param>
        /// <returns></returns>
        static async Task <Import> ImportPbix(string workspaceCollectionName, string workspaceId, string datasetName, string filePath)
        {
            using (var fileStream = File.OpenRead(filePath))
            {
                // Create a dev token for import
                var devToken = PowerBIToken.CreateDevToken(workspaceCollectionName, workspaceId);
                using (var client = await CreateClient(devToken))
                {
                    // Import PBIX file from the file stream
                    var import = await client.Imports.PostImportWithFileAsync(workspaceCollectionName, workspaceId, fileStream, datasetName);

                    // Example of polling the import to check when the import has succeeded.
                    while (import.ImportState != "Succeeded" && import.ImportState != "Failed")
                    {
                        import = await client.Imports.GetImportByIdAsync(workspaceCollectionName, workspaceId, import.Id);

                        Console.WriteLine("Checking import state... {0}", import.ImportState);
                        Thread.Sleep(1000);
                    }

                    return(import);
                }
            }
        }
 public PowerBIReportClient(string workspaceCollection, string workspaceId)
     : this(PowerBIToken.CreateDevToken(workspaceCollection, workspaceId), workspaceCollection, workspaceId)
 {
 }
예제 #18
0
        public HttpResponseMessage GetList()
        {
            Console.Write(Settings.WorkspaceName);

            if (string.IsNullOrEmpty(Settings.WorkspaceName) ||
                string.IsNullOrEmpty(Settings.WorkspaceId) ||
                string.IsNullOrEmpty(Settings.AccessKey))
            {
                return(Request.CreateResponse(string.Empty));
            }

            PBIReports reports;

            //Get an app token to generate a JSON Web Token (JWT). An app token flow is a claims-based design pattern.
            //To learn how you can code an app token flow to generate a JWT, see the PowerBIToken class.
            var appToken = PowerBIToken.CreateDevToken(Settings.WorkspaceName, Settings.WorkspaceId);
            //var appToken = PowerBIToken.CreateDevToken(workspaceName, workspaceId);

            //After you get a PowerBIToken which has Claims including your WorkspaceName and WorkspaceID,
            //you generate JSON Web Token (JWT) . The Generate() method uses classes from System.IdentityModel.Tokens: SigningCredentials,
            //JwtSecurityToken, and JwtSecurityTokenHandler.
            string jwt = appToken.Generate(Settings.AccessKey);
            //string jwt = appToken.Generate(accessKey);

            //Construct reports uri resource string
            var uri = String.Format("https://api.powerbi.com/beta/collections/{0}/workspaces/{1}/reports", Settings.WorkspaceName, Settings.WorkspaceId);

            //var uri = String.Format("https://api.powerbi.com/beta/collections/{0}/workspaces/{1}/reports", workspaceName, workspaceId);

            //Configure reports request
            System.Net.WebRequest request = System.Net.WebRequest.Create(uri) as System.Net.HttpWebRequest;
            request.Method        = "GET";
            request.ContentLength = 0;

            //Set the WebRequest header to AppToken, and jwt
            //Note the use of AppToken instead of Bearer
            request.Headers.Add("Authorization", String.Format("AppToken {0}", jwt));

            //Get reports response from request.GetResponse()
            using (var response = request.GetResponse() as System.Net.HttpWebResponse)
            {
                //Get reader from response stream
                using (var reader = new System.IO.StreamReader(response.GetResponseStream()))
                {
                    string json = reader.ReadToEnd();
                    //Deserialize JSON string into PBIReports
                    reports = JsonConvert.DeserializeObject <PBIReports>(json);
                }
            }

            var reportList = from rpt in reports.value
                             select new
            {
                id       = rpt.id,
                name     = rpt.name,
                embedUrl = rpt.embedUrl,
                token    = getReportToken(rpt.id)
            };

            return(Request.CreateResponse(reportList));
        }