trying to get report but always just get "ReportDownloadError.MISSING_PARAMETER" "Missing report definition"

1,100 views
Skip to first unread message

Michael D

unread,
Mar 16, 2015, 11:25:25 AM3/16/15
to adwor...@googlegroups.com
When im sending my request im gettin the following Error:

<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>
<reportDownloadError>
<ApiError><type>
ReportDownloadError.MISSING_PARAMETER</type>
<trigger>Missing report definition</trigger>
<fieldPath></fieldPath>
</ApiError>
</reportDownloadError>

The Details on reporting are not clearly telling how it works.

This is how I do it at the time. But it doesnt work. Is there any c# example on how to do this?

 public string GetReport()
        {
            var client = new HttpClient();
            client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accesToken);
            client.DefaultRequestHeaders.Add("developerToken", developerToken);
            client.DefaultRequestHeaders.Add("clientCustomerId",clientCustomerId);

            var request = new HttpRequestMessage(HttpMethod.Post, baseAdressAdWords)
            {
                Content = content
            };
            var response = client.SendAsync(request).Result;
            var soapResponse = response.Content.ReadAsStringAsync().Result;
            var streamSoapResponse = response.Content.ReadAsStreamAsync().Result;

            return soapResponse ;
        }
        private string ConstructPostRequest()
        {
            return String.Format(@"<reportDefinition xmlns=""https://adwords.google.com/api/adwords/cm/v201409"">
                  <selector>
                    <fields>CampaignId</fields>
                    <fields>Id</fields>
                    <fields>Impressions</fields>
                    <fields>Clicks</fields>
                    <fields>Cost</fields>
                    <predicates>
                      <field>Status</field>
                      <operator>IN</operator>
                      <values>ENABLED</values>
                      <values>PAUSED</values>
                    </predicates>
                  </selector>
                  <reportName>Custom Adgroup Performance Report</reportName>
                  <reportType>ADGROUP_PERFORMANCE_REPORT</reportType>
                  <dateRangeType>LAST_7_DAYS</dateRangeType>
                  <downloadFormat>XML</downloadFormat>
                </reportDefinition>"
                );
        }
}

Thank you very much.

Regards,

Michael

Danial Klimkin

unread,
Mar 16, 2015, 11:31:49 AM3/16/15
to adwor...@googlegroups.com
Hello Michael,


The request should have post parameter named "__rdxml", I don't see you use this name. Also, the value needs to be url encoded.

Please consider using our client libraries instead of implementing this routine yourself:



-Danial, AdWords API Team.

Michael D

unread,
Mar 20, 2015, 7:14:29 AM3/20/15
to adwor...@googlegroups.com
Hi,

im in a portableClassLibary so the ClientLibaries doesnt work for me.
 
I changed what you said but now im gettin this Error:

"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><reportDownloadError>
<ApiError>
<type>ReportDownloadError.INVALID_PARAMETER</type>
<trigger>Missing client information</trigger>
<fieldPath></fieldPath>
</ApiError>
</reportDownloadError>"


This ismy code now:

        public string GetReport()
        {
            var postString = this.ConstructPostRequest();
            var content = new StringContent(postString, Encoding.UTF8, "application/x-www-form-urlencoded");


            var client = new HttpClient();
          
            client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization: ", "Bearer " + accesToken);
            client.DefaultRequestHeaders.TryAddWithoutValidation("developerToken: ", developerToken);
            client.DefaultRequestHeaders.TryAddWithoutValidation("clientCustomerId: ", clientCustomerId);
            client.DefaultRequestHeaders.TryAddWithoutValidation("content-type: ", "application/x-www-form-urlencoded");


            var request = new HttpRequestMessage(HttpMethod.Post, baseAdressAdWords)
            {
                Content = content
            };
    
            var response = client.SendAsync(request).Result;
           
            var Response = response.Content.ReadAsStringAsync().Result;

            return Response ;
        }
        #region Construct Post Request
        private string ConstructPostRequest()
        {
           
             string xml=@"<reportDefinition xmlns=""https://adwords.google.com/api/adwords/cm/v201409"">

                  <selector>
                    <fields>CampaignId</fields>
                    <fields>Id</fields>
                    <fields>Impressions</fields>
                    <fields>Clicks</fields>
                    <fields>Cost</fields>
                    <predicates>
                      <field>Status</field>
                      <operator>IN</operator>
                      <values>ENABLED</values>
                      <values>PAUSED</values>
                    </predicates>
                  </selector>
                  <reportName>Custom Adgroup Performance Report</reportName>
                  <reportType>ADGROUP_PERFORMANCE_REPORT</reportType>
                  <dateRangeType>LAST_7_DAYS</dateRangeType>
                  <downloadFormat>XML</downloadFormat>
                </reportDefinition>"

             return "__rdxml="+ System.Net.WebUtility.UrlEncode(xml);

Danial Klimkin

unread,
Mar 20, 2015, 8:57:57 AM3/20/15
to adwor...@googlegroups.com
Hello Michael,


Is it possible some of the HTTP headers were not set?

Can you send me the exact request you've generated, via email? Please use "Reply to author" button on the right.


-Danial, AdWords API Team.

Wesley Ide

unread,
Feb 3, 2016, 2:27:19 PM2/3/16
to AdWords API Forum
Hi

I have the same problem.
I add the headers:
  • "User-Agent" : "Mozilla/5.0"
  • "Accept-Language" : "pt-br"
  • "Accept-Charset" : "UTF-8"
  • "Content-Type" : "application/soap+xml"
  • "Authorization" : "Bearer ACCESS_TOKEN"
  • "clientCustomerId", "XXX-XXX-XXXX"
  • "developerToken", "XXXXXXXXXXXXXXXXXXXXXX"
And the parameters:
  • __rdxml="<reportDefinition xmlns=\"https://adwords.google.com/api/adwords/cm/v201506\"><selector><fields>Cost<\/fields><fields>ConversionValue<\/fields><\/selector><reportName>Keywords Performance Report<\/reportName><reportType>KEYWORDS_PERFORMANCE_REPORT<\/reportType><dateRangeType>ALL_TIME<\/dateRangeType><downloadFormat>CSV<\/downloadFormat><\/reportDefinition>"
  • __fmt="CSV"
But the response is:
<?xml version="1.0" encoding="UTF-8"?>
<reportDownloadError>
   <ApiError>
      <type>ReportDownloadError.MISSING_PARAMETER</type>
      <trigger>Missing report definition</trigger>
      <fieldPath />
   </ApiError>
</reportDownloadError>

I did the request using the DHC tool with the headers and parameters that I mentioned, and worked perfect! But in my code (Java), have the behavior that I mentioned above.

Any suggestion about this misterious "MISSING_PARAMETER" or why dont works in my code, but did in a REST tool?

Wesley.

Yin Niu

unread,
Feb 9, 2016, 12:30:43 PM2/9/16
to AdWords API Forum
Hi Wesley, 

Are you using the Java client library? Here are some Java examples for downloading reports.  

Thanks,
Yin, AdWords API Team. 

Wesley Ide

unread,
Feb 11, 2016, 4:40:49 PM2/11/16
to AdWords API Forum
Hi Yin,

Yes, Im using Java client library. I saw the examples, and with one of them I had a better error message. The problem was the dateRangeType ALL_TIME which I was using, but the response message says it is invalid (but had in documentation).
It is strange, because the same parameter works with a rest application (which I mentioned before). But now I using with another form the dateRangeType.

Thanks Yin!!
Reply all
Reply to author
Forward
0 new messages