cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
dalmas
Regular Visitor

PowerBI API | Import PBIX

Hello,

 

I have a method to upload a .PBIX file to my PowerBI App, This method return a id as expected. However the reports and datasets doesn't appear on PowerBI

 

My Method :

 

   public static string SendFile()
        {

            string[] files = { "D://David/Documents//PBIX_TEST.pbix" };


            string boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x");
            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("https://api.powerbi.com/beta/myorg/imports?datasetDisplayName=PBI_TESTT");
            httpWebRequest.ContentType = "multipart/form-data; boundary=" + boundary;
            httpWebRequest.Method = "POST";
            httpWebRequest.KeepAlive = true;
            //httpWebRequest./*Credentials*/ = System.Net.CredentialCache.DefaultCredentials;
            httpWebRequest.Headers.Add("Authorization", String.Format("Bearer {0}", nsToken.TokenSingleton.Instance.token.AccessToken));
            Stream memStream = new System.IO.MemoryStream();
            byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
            string formdataTemplate = "\r\n--" + boundary + "\r\nContent-Disposition:  form-data; name=\"{0}\";\r\n\r\n{1}";
            string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n Content-Type: application/octet-stream\r\n\r\n";
            memStream.Write(boundarybytes, 0, boundarybytes.Length);
            for (int i = 0; i < files.Length; i++)
            {
                string header = string.Format(headerTemplate, "fieldNameHere", "PBIX_TEST.pbix");
                //string header = string.Format(headerTemplate, "uplTheFile", files[i]);
                byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
                memStream.Write(headerbytes, 0, headerbytes.Length);
                FileStream fileStream = new FileStream(files[i], FileMode.Open,
                FileAccess.Read);
                byte[] buffer = new byte[1024];
                int bytesRead = 0;
                while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
                {
                    memStream.Write(buffer, 0, bytesRead);
                }
                memStream.Write(boundarybytes, 0, boundarybytes.Length);
                fileStream.Close();
            }
            httpWebRequest.ContentLength = memStream.Length;
            Stream requestStream = httpWebRequest.GetRequestStream();
            memStream.Position = 0;
            byte[] tempBuffer = new byte[memStream.Length];
            memStream.Read(tempBuffer, 0, tempBuffer.Length);
            memStream.Close();
            requestStream.Write(tempBuffer, 0, tempBuffer.Length);
            requestStream.Close();
            try
            {
                WebResponse webResponse = httpWebRequest.GetResponse();
                Stream stream = webResponse.GetResponseStream();
                StreamReader reader = new StreamReader(stream);
                string var = reader.ReadToEnd();

                var jsonSerializer = new JavaScriptSerializer();
                var dataset = (dataset)jsonSerializer.Deserialize(var, typeof(dataset));
                return dataset.Id;

            }
            catch (Exception ex)
            {
                throw ex;
            }
            httpWebRequest = null;
        }

 

Can anyone help me ? 

 

Thanks

 

David Almas

PT-PT

 

1 REPLY 1
jocaplan-MSFT
Microsoft
Microsoft

The call happens async. When you do a call to GET .../imports/{importID} do you see any error message in the status?

Helpful resources

Announcements
PBI User Groups

Welcome to the User Group Public Preview

Check out new user group experience and if you are a leader please create your group!

MBAS on Demand

Microsoft Business Applications Summit sessions

On-demand access to all the great content presented by the product teams and community members! #MSBizAppsSummit #CommunityRocks

MBAS Attendee Badge

Claim Your Badge & Digital Swag!

Check out how to claim yours today!

secondImage

Are You Ready?

Test your skills now with the Cloud Skills Challenge.

Top Solution Authors