Beispiel #1
0
        public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "post", Route = "workspaces/{workspaceid}/reports")] HttpRequestMessage req, string workspaceId, TraceWriter log)
        {
            log.Info("AddReport function processed a request.");

            HttpResponseMessage rtnResponse = null;

            try
            {
                // Get request body
                AddReportRequest requestparameters = await req.Content.ReadAsAsync <AddReportRequest>();

                // import the report
                var reportresult = PBIEHelper.ImportPbix(workspaceId, requestparameters.name, requestparameters.report).Result;

                foreach (Dataset dataset in reportresult.Datasets)
                {
                    PBIEHelper.UpdateDataSetConnectionString(workspaceId, dataset.Id, requestparameters);

                    // we're not dealing with an Azure SQL DB, so we may need to create a datasource
                    if (!requestparameters.server.ToLower().Contains(".database.windows.net"))
                    {
                        IEnumerable <GatewayDatasource> datasources = await PBIEHelper.GetGatewayDataSourcesAsync(workspaceId, dataset.Id);

                        if (datasources.Count() <= 0) // no associated gateway, need to create a datasource
                        {
                            // find matching gateway
                            Gateway gateway = await PBIEHelper.GetWorkspaceGatewaysAsync(requestparameters.gatewayname);

                            if (gateway != null)
                            {
                                await PBIEHelper.CreateGatewayDatasourceAsync(gateway, requestparameters.server, requestparameters.database, requestparameters.credentials);
                            }
                        }
                    }
                }

                rtnResponse = req.CreateResponse(HttpStatusCode.OK, JsonConvert.SerializeObject(reportresult.Id));
            }
            catch (Exception ex)
            {
                rtnResponse = req.CreateResponse(HttpStatusCode.InternalServerError, $"An unexpected error occured. This could be caused by any number of issues including invalid parameters or incorrect database connection details. Please check the request parameters and try again. Details: {ex.Message}");
            }


            return(rtnResponse);
        }
Beispiel #2
0
        public static void UpdateDataSetConnectionString(string workspaceId, string datasetId, AddReportRequest requestparameters)
        {
            ConnectionDetails connectionDetails = new ConnectionDetails($"Data Source={requestparameters.server};Initial Catalog={requestparameters.database}");

            using (PowerBIClient client = CreateClient().Result)
            {
                client.Datasets.SetAllDatasetConnectionsInGroupAsync(workspaceId, datasetId, connectionDetails).Wait();
            }
        }