Thanks Eric, got it working now. It was a sneaky one so I won't beat myself up over it too much .
cheers. Migration to v2009 complete. Hopefully we get 6 month sunset on reports service etc. On Feb 18, 3:14 pm, AdWords API Advisor <adwordsapiadvi...@google.com> wrote: > Hi David, > > Although you created a CampaignCriterionIdFilter[] of size 1, you > never actually created a CampaignCriterionIdFilter object to put in > that array. > > // You had this. > CampaignCriterionIdFilter[] ccIDfilters = new > CampaignCriterionIdFilter[1]; > > // Now add this. > ccIDfilters[0] = new CampaignCriterionIdFilter(); > > // You had this. > ccIDfilters[0].campaignId = campaignID; > > Best, > - Eric > > On Feb 18, 9:25 am, David <cont...@akamarketing.com> wrote: > > > Hi Eric and all. I've set up soap logging but nothing goes into the > > log as the error occurs before the campaignTargetService.get method is > > called. http log and soap log is both empty. I've isolated campaign > > negative keywords into a test page but can confirm logging works as > > stuff is being logged from my main app. > > > If I'm doing someone crazy wrong and stupid well then my bad but I > > can't for the life of me get this to work. > > > My method for campaign neg keywords is : > > > public static int getCampaignNegativeKWCountV2009(string campaignName, > > long campaignID, string accountIDstring) > > { > > Debug.WriteLine("camp name is " + campaignName + " ||| camp > > id is = " + campaignID.ToString()); > > > AdWordsUser user = new AdWordsUser(); > > CampaignCriterionService campaignCriterionService = > > (CampaignCriterionService)user.GetService(AdWordsService.v200909.CampaignCr > > iterionService); > > campaignCriterionService.RequestHeader.clientCustomerId = > > accountIDstring; > > > CampaignCriterionSelector ccs = new > > CampaignCriterionSelector(); > > > //filter which campaigns you want data for > > CampaignCriterionIdFilter[] ccIDfilters = new > > CampaignCriterionIdFilter[1]; > > ccIDfilters[0].campaignId = campaignID; > > ccIDfilters[0].campaignIdSpecified = true; //ERROR HERE > > > //associate selector with filters > > ccs.idFilters = ccIDfilters; > > > //get what you want > > CampaignCriterion[] criterions = > > (CampaignCriterion[])campaignCriterionService.get(ccs).entries; > > > //// no campaign level neg KWs > > if (criterions == null) > > return 0; > > > int keywordCount = 0; > > for (int i = 0; i < criterions.Length; i++) > > //confirm the negative criteria of a KW and not a URL > > (content network) > > if (criterions[i].GetType().Name == "Keyword") keywordCount > > ++; > > > return keywordCount; > > } > > > The error I get is > > > Object reference not set to an instance of an object. at this line. > > ccIDfilters[0].campaignId = campaignID; > > ccIDfilters[0].campaignIdSpecified = true; > > > campaigncritierionselectors expects an array of > > CampaignCriterionIdFilter's. So I create an array with a capcity of 1 > > and fill its zero'th element with a long which I know is not null and > > is proper.. but ccIDfilters doesn't seem to be getting created > > propertly. I went into the CampaignCriterionIdFilter defintion code > > and didn't see a constructor but its a partial class so that's prob > > why. > > > I'm sure its something stupid I'm missing but a working .net example > > would be great. I'm using .net client lib v7. The new one. > > > cheers. > > > On Feb 17, 4:37 pm, David <cont...@akamarketing.com> wrote: > > > > Thanks Eric. I'll try and set up SOAP logging. Can you tell me though > > > is my code correct? > > > > Rgds > > > david. > > > > On Feb 17, 3:57 pm, AdWords API Advisor <adwordsapiadvi...@google.com> > > > wrote: > > > > > Hi David, > > > > > When you have problems like this its always best to look at the SOAP > > > > request and response XML. Please post this XML to this thread and > > > > that should shed some light on the problem. > > > > > Best, > > > > - Eric Koleda, AdWords API Team > > > > > On Feb 16, 9:53 am, David <cont...@akamarketing.com> wrote: > > > > > > Thanks again Ursula. I'm using the .net client library anyhow but > > > > > understand that what you have is still pretty much what I'm doing. The > > > > > methods do seem different slightly though which I find strange because > > > > > the end soap web service is the same one for both java and .net, but > > > > > the surrounding framework is obviously different for one programming > > > > > language v another. I don't really know what or if > > > > > campaignIDspecified is used for. > > > > > > But the basic process between your code and mine is the same and is : > > > > > > > > //create service > > > > > > > //create selector > > > > > > > //create campaign filters based on campaignID > > > > > > > //associate filters with selector > > > > > > > //associate (pass in) selector with service get call. > > > > > > I don't think im populating filters incorrectly.. > > > > > > > //THINK I'M GOING WRONG HERE - campaignID is a long > > > > > > > > CampaignCriterionIdFilter[] ccIDfilters = new > > > > > > > CampaignCriterionIdFilter[1]; > > > > > > > ccIDfilters[0].campaignId = campaignID; > > > > > > > ccIDfilters[0].campaignIdSpecified = true; > > > > > > > > //ADDING THE FILTERS TO THE SELECTOR I CREATED ABOVE > > > > > > > ccs.idFilters = ccIDfilters; > > > > > > Any Google reps know where I'm going wrong. The filters object of the > > > > > selector is always null. > > > > > > On Feb 16, 2:28 pm, Ursula <ursula.kellm...@gmail.com> wrote: > > > > > > > Hi David, > > > > > > > Here is a snippet of my code that works ( java). Do you have a > > > > > > wrong > > > > > > import or something for the CampaignCriterionIdFilter? I don't see > > > > > > a > > > > > > property call campaignIdSpecified in my source. > > > > > > > //AdwordsNetworkAccount is a wrapper around the client api > > > > > > adwordsUser > > > > > > object > > > > > > > public List<NegativeCampaignCriterion> getCampaignNegativeKeywords( > > > > > > > AdwordsNetworkAccount adwordsNetworkAccount, > > > > > > > long[] campaignChannelIDs) > > > > > > CampaignCriterionServiceInterface service = > > > > > > getCampaignCriterionService(adwordsNetworkAccount); > > > > > > > CampaignCriterionSelector selector = new > > > > > > CampaignCriterionSelector(); > > > > > > > // Initialize the array of filters > > > > > > CampaignCriterionIdFilter[] criterionFilter = > > > > > > new > > > > > > CampaignCriterionIdFilter[campaignChannelIDs.length]; > > > > > > selector.setIdFilters(criterionFilter); > > > > > > > CampaignCriterionIdFilter filter = null; > > > > > > for (int i = 0; i < campaignChannelIDs.length; i++) > > > > > > { > > > > > > filter = new CampaignCriterionIdFilter(); > > > > > > filter.setCampaignId(campaignChannelIDs[i]); > > > > > > selector.setIdFilters(i, filter); > > > > > > } > > > > > > > CampaignCriterionPage criterion = service.get(selector); > > > > > > > On Feb 16, 5:18 am, David <cont...@akamarketing.com> wrote: > > > > > > > > Hi Ursula, thanks for your help, however thats pretty much what > > > > > > > I'm > > > > > > > attempting to do already. I don't see a selector.setIdFilters > > > > > > > method I > > > > > > > just see a selector.IdFilters method. > > > > > > > > I'm trying the below. > > > > > > > //create service > > > > > > > //create selector > > > > > > > //create campaign filters based on campaignID > > > > > > > //associate filters with selector > > > > > > > //associate (pass in) selector with service get call. > > > > > > > > Sample of my code is below. > > > > > > > > AdWordsUser user = new AdWordsUser(headers); > > > > > > > CampaignCriterionService campaignCriterionService = > > > > > > > (CampaignCriterionService)user.GetService(AdWordsService.v200909.CampaignCr > > > > > > > iterionService); > > > > > > > > //SELECTOR CREATED HERE CALLED CCS > > > > > > > CampaignCriterionSelector ccs = new CampaignCriterionSelector(); > > > > > > > > //THINK I'M GOING WRONG HERE - campaignID is a long > > > > > > > CampaignCriterionIdFilter[] ccIDfilters = new > > > > > > > CampaignCriterionIdFilter[1]; > > > > > > > ccIDfilters[0].campaignId = campaignID; > > > > > > > ccIDfilters[0].campaignIdSpecified = true; > > > > > > > > //ADDING THE FILTERS TO THE SELECTOR I CREATED ABOVE > > > > > > > ccs.idFilters = ccIDfilters; > > > > > > > > //PASSING THE SELECTOR IN TO THE MAIN GET CALL > > > > > > > CampaignCriterion[] criterions = > > > > > > > (CampaignCriterion[])campaignCriterionService.get(ccs).entries; > > > > > > > > Has anyone got any example code from this? > > > > > > > > thanks in advance. > > > > > > > > On Feb 15, 10:30 pm, Ursula <ursula.kellm...@gmail.com> wrote: > > > > > > > > > You need to create a CampaignCriterionSelector as well : > > > > > > > > > CampaignCriterionSelector selector = new > > > > > > > > CampaignCriterionSelector(); > > > > > > > > > and then add the CampaignCriterionIdFilter that you created: > > > > > > > > > selector.setIdFilters( ccIDfilters) > > > > > > > > > then pass this selector to the get method. > > > > > > > > campaignCriterionService.get(selector).entries; > > > > > > > > > Ursula Kellmann > > > > > > > > > On Feb 15, 6:11 am, David <cont...@akamarketing.com> wrote: > > > > > > > > > > Anyone got any ideas. Anyone done this before? > > > > > > > > > > On Feb 13, 4:35 pm, David <cont...@akamarketing.com> wrote: > > > > > > > > > > > CampaignCriterionIdFilter[] ccIDfilters = new > > > > > > > > > > CampaignCriterionIdFilter[1]; > > > > > > > > > > ccIDfilters[0].campaignId = campaignID; > > > > > > > > > > ccIDfilters[0].campaignIdSpecified = true; //CRASH HERE - > > > > > > > > > > ccIDfilters > > > > > > > > > > gives null reference exception... > > > > > > > > > > ccs.idFilters = ccIDfilters; > > > > > > > > > > > CampaignCriterion[] criterions = > > > > > > > > > > (CampaignCriterion[])campaignCriterionService.get(ccs).entries; > > > > > > > > > > > What gives? I created a new filter array with space for one > > > > > > > > > > campaignID, set that id and the associated the filter array > > > > > > > > > > with the > > > > > > > > > > overal selector.. > > > > > > > > > > > Any input > > ... > > read more » -- You received this message because you are subscribed to the Google Groups "AdWords API Forum" group. To post to this group, send email to adwords-...@googlegroups.com. To unsubscribe from this group, send email to adwords-api+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/adwords-api?hl=en.