I'm trying to create a shopping campaign with bidding strategy type ROAS and am getting this error when I try to add all products to the Ad Group. See my code below. Please let me know what I missed.
Campaign campaign = new Campaign();
campaign.setName(...);
campaign.setAdvertisingChannelType(AdvertisingChannelType.SHOPPING);
campaign.setBudget(..);
BiddingStrategyServiceInterface biddingStrategyService = adWordsServices.get(session, BiddingStrategyServiceInterface.class);
// Create a portfolio bidding strategy.
SharedBiddingStrategy portfolioBiddingStrategy = new SharedBiddingStrategy();
portfolioBiddingStrategy.setName(...);
TargetRoasBiddingScheme biddingScheme = new TargetRoasBiddingScheme();
biddingScheme.setTargetRoas(...);
portfolioBiddingStrategy.setBiddingScheme(biddingScheme);
BiddingStrategyOperation operation = new BiddingStrategyOperation();
operation.setOperand(portfolioBiddingStrategy);
operation.setOperator(Operator.ADD);
BiddingStrategyOperation[] operations = new BiddingStrategyOperation[] {operation};
BiddingStrategyReturnValue result = biddingStrategyService.mutate(operations);
SharedBiddingStrategy sharedBiddingStrategy = result.getValue(0);
BiddingStrategyConfiguration biddingStrategyConfiguration = new BiddingStrategyConfiguration();
biddingStrategyConfiguration.setBiddingStrategyId(sharedBiddingStrategy.getId());
campaign.setBiddingStrategyConfiguration(biddingStrategyConfiguration);
ShoppingSetting shoppingSetting = new ShoppingSetting();
shoppingSetting.setSalesCountry(countryOfSale);
shoppingSetting.setCampaignPriority(0);
shoppingSetting.setMerchantId(merchantId);
shoppingSetting.setEnableLocal(false);
campaign.setSettings(new Setting[] { shoppingSetting });
NetworkSetting networkSetting = new NetworkSetting();
networkSetting.setTargetContentNetwork(false);
networkSetting.setTargetGoogleSearch(true);
networkSetting.setTargetPartnerSearchNetwork(false);
networkSetting.setTargetSearchNetwork(false);
campaign.setNetworkSetting(networkSetting);
CampaignReturnValue campaignAddResult = setCampaignProperties(campaign, Operator.ADD);
campaign = campaignAddResult.getValue(0);
AdGroupServiceInterface adGroupService = adWordsServices.get(session, AdGroupServiceInterface.class);
// Create ad group.
AdGroup adGroup = new AdGroup();
adGroup.setCampaignId(campaign.getId());
adGroup.setName("Ad Group #" + System.currentTimeMillis());
// Create operation.
AdGroupOperation adGroupOperation = new AdGroupOperation();
adGroupOperation.setOperand(adGroup);
adGroupOperation.setOperator(Operator.ADD);
// Make the mutate request.
AdGroupReturnValue adGroupAddResult = adGroupService.mutate(new AdGroupOperation[] { adGroupOperation });
// Display result.
adGroup = adGroupAddResult.getValue(0);
// Create product ad.
AdGroupAdServiceInterface adGroupAdService = adWordsServices.get(session, AdGroupAdServiceInterface.class);
ProductAd productAd = new ProductAd();
// Create ad group ad.
AdGroupAd adGroupAd = new AdGroupAd();
adGroupAd.setAdGroupId(adGroup.getId());
adGroupAd.setAd(productAd);
// Create operation.
AdGroupAdOperation adGroupAdOperation = new AdGroupAdOperation();
adGroupAdOperation.setOperand(adGroupAd);
adGroupAdOperation.setOperator(Operator.ADD);
// Make the mutate request.
AdGroupAdReturnValue adGroupAdAddResult = adGroupAdService.mutate(new AdGroupAdOperation[] { adGroupAdOperation });
// Display result.
adGroupAd = adGroupAdAddResult.getValue(0);
ProductPartitionTree partitionTree = ProductPartitionTree.createAdGroupTree(adWordsServices, session, adGroup.getId());
ProductPartitionNode rootNode = partitionTree.getRoot().removeAllChildren();
rootNode = rootNode.asBiddableUnit();
AdGroupCriterionServiceInterface adGroupCriterionService = adWordsServices.get(session, AdGroupCriterionServiceInterface.class);
List<AdGroupCriterionOperation> mutateOperations = partitionTree.getMutateOperations();
adGroupCriterionService.mutate(mutateOperations.toArray(new AdGroupCriterionOperation[0])); //ERROR OCCURS HERE