/// <summary> /// Removes the root of the tree. /// </summary> private void SetRootToEmpty() { ProductPartitionNode root = tree.Root; if (root != null && root.ProductPartitionId >= 0L) { AdGroupCriterion rootCriterion = new AdGroupCriterion() { adGroupId = ADGROUP_ID, criterion = new Criterion() { id = root.ProductPartitionId } }; AdGroupCriterionOperation removeOp = new AdGroupCriterionOperation() { @operator = Operator.REMOVE, operand = rootCriterion }; AdGroupCriterionService adGroupCriterionService = (AdGroupCriterionService) user.GetService(AdWordsService.v201806.AdGroupCriterionService); adGroupCriterionService.mutate(new AdGroupCriterionOperation[] { removeOp }); } Assert.DoesNotThrow(delegate() { tree = ProductPartitionTree.DownloadAdGroupTree(user, ADGROUP_ID); }); }
/// <summary> /// Creates the default partition. /// </summary> /// <param name="user">The AdWords user.</param> /// <param name="adGroupId">The ad group ID.</param> private void CreateDefaultPartitionTree(AdWordsUser user, long adGroupId) { using (AdGroupCriterionService adGroupCriterionService = (AdGroupCriterionService)user.GetService( AdWordsService.v201802.AdGroupCriterionService)) { // Build a new ProductPartitionTree using an empty set of criteria. ProductPartitionTree partitionTree = ProductPartitionTree.CreateAdGroupTree(adGroupId, new List <AdGroupCriterion>()); partitionTree.Root.AsBiddableUnit().CpcBid = 1000000; try { // Make the mutate request, using the operations returned by the ProductPartitionTree. AdGroupCriterionOperation[] mutateOperations = partitionTree.GetMutateOperations(); if (mutateOperations.Length == 0) { Console.WriteLine("Skipping the mutate call because the original tree and the " + "current tree are logically identical."); } else { adGroupCriterionService.mutate(mutateOperations); } // The request was successful, so create a new ProductPartitionTree based on the updated // state of the ad group. partitionTree = ProductPartitionTree.DownloadAdGroupTree(user, adGroupId); Console.WriteLine("Final tree: {0}", partitionTree); } catch (Exception e) { throw new System.ApplicationException("Failed to set shopping product partition.", e); } } }
/// <summary> /// Executes the tree operations. /// </summary> /// <returns>The synced product partition tree.</returns> private ProductPartitionTree ExecuteTreeOperations() { AdGroupCriterionOperation[] operations = tree.GetMutateOperations(); AdGroupCriterionService service = (AdGroupCriterionService)user.GetService( AdWordsService.v201806.AdGroupCriterionService); service.mutate(operations); return(ProductPartitionTree.DownloadAdGroupTree(user, ADGROUP_ID)); }
/// <summary> /// Creates a product partition tree. /// </summary> /// <param name="user">The AdWords user for which the product partition is created.</param> /// <param name="adGroupId">Ad group ID.</param> /// <returns>The product partition.</returns> private static ProductPartitionTree CreateProductPartition(AdWordsUser user, long adGroupId) { using (AdGroupCriterionService adGroupCriterionService = (AdGroupCriterionService)user.GetService(AdWordsService.v201809 .AdGroupCriterionService)) { // Build a new ProductPartitionTree using the ad group's current set of criteria. ProductPartitionTree partitionTree = ProductPartitionTree.DownloadAdGroupTree(user, adGroupId); Console.WriteLine("Original tree: {0}", partitionTree); // Clear out any existing criteria. ProductPartitionNode rootNode = partitionTree.Root.RemoveAllChildren(); // Make the root node a subdivision. rootNode = rootNode.AsSubdivision(); // Add a unit node for condition = NEW to include it. rootNode.AddChild( ProductDimensions.CreateCanonicalCondition(ProductCanonicalConditionCondition .NEW)); // Add a unit node for condition = USED to include it. rootNode.AddChild( ProductDimensions.CreateCanonicalCondition(ProductCanonicalConditionCondition .USED)); // Exclude everything else. rootNode.AddChild(ProductDimensions.CreateCanonicalCondition()).AsExcludedUnit(); // Make the mutate request, using the operations returned by the // ProductPartitionTree. AdGroupCriterionOperation[] mutateOperations = partitionTree.GetMutateOperations(); if (mutateOperations.Length == 0) { Console.WriteLine( "Skipping the mutate call because the original tree and the current " + "tree are logically identical."); } else { adGroupCriterionService.mutate(mutateOperations); } // The request was successful, so create a new ProductPartitionTree based on the // updated state of the ad group. partitionTree = ProductPartitionTree.DownloadAdGroupTree(user, adGroupId); return(partitionTree); } }
public void TestDownloadAdGroupTree() { ProductPartitionTree partitionTree = shoppingTestUtils.CreateTestTreeForAddition(ADGROUP_ID); AdGroupCriterionOperation[] operations = partitionTree.GetMutateOperations(); AdGroupCriterionService adGroupCriterionService = (AdGroupCriterionService)user.GetService( AdWordsService.v201607.AdGroupCriterionService); AdGroupCriterionReturnValue value = adGroupCriterionService.mutate(operations); ProductPartitionTree newPartitionTree = ProductPartitionTree.DownloadAdGroupTree(user, ADGROUP_ID); CompareTree(newPartitionTree.Root, partitionTree.Root); }
/// <summary> /// Runs the code example. /// </summary> /// <param name="user">The AdWords user.</param> /// <param name="adGroupId">The ad group to which product partition is /// added.</param> public void Run(AdWordsUser user, long adGroupId) { using (AdGroupCriterionService adGroupCriterionService = (AdGroupCriterionService)user.GetService( AdWordsService.v201802.AdGroupCriterionService)) { // Build a new ProductPartitionTree using the ad group's current set of criteria. ProductPartitionTree partitionTree = ProductPartitionTree.DownloadAdGroupTree(user, adGroupId); Console.WriteLine("Original tree: {0}", partitionTree); // Clear out any existing criteria. ProductPartitionNode rootNode = partitionTree.Root.RemoveAllChildren(); // Make the root node a subdivision. rootNode = rootNode.AsSubdivision(); // Add a unit node for condition = NEW. ProductPartitionNode newConditionNode = rootNode.AddChild( ProductDimensions.CreateCanonicalCondition(ProductCanonicalConditionCondition.NEW)); newConditionNode.AsBiddableUnit().CpcBid = 200000; ProductPartitionNode usedConditionNode = rootNode.AddChild( ProductDimensions.CreateCanonicalCondition(ProductCanonicalConditionCondition.USED)); usedConditionNode.AsBiddableUnit().CpcBid = 100000; // Add a subdivision node for condition = null (everything else). ProductPartitionNode otherConditionNode = rootNode.AddChild(ProductDimensions.CreateCanonicalCondition()).AsSubdivision(); // Add a unit node under condition = null for brand = "CoolBrand". ProductPartitionNode coolBrandNode = otherConditionNode.AddChild( ProductDimensions.CreateBrand("CoolBrand")); coolBrandNode.AsBiddableUnit().CpcBid = 900000L; // Add a unit node under condition = null for brand = "CheapBrand". ProductPartitionNode cheapBrandNode = otherConditionNode.AddChild( ProductDimensions.CreateBrand("CheapBrand")); cheapBrandNode.AsBiddableUnit().CpcBid = 10000L; // Add a subdivision node under condition = null for brand = null (everything else). ProductPartitionNode otherBrandNode = otherConditionNode.AddChild( ProductDimensions.CreateBrand(null)).AsSubdivision(); // Add unit nodes under condition = null/brand = null. // The value for each bidding category is a fixed ID for a specific // category. You can retrieve IDs for categories from the ConstantDataService. // See the 'GetProductCategoryTaxonomy' example for more details. // Add a unit node under condition = null/brand = null for product type // level 1 = 'Luggage & Bags'. ProductPartitionNode luggageAndBagNode = otherBrandNode.AddChild( ProductDimensions.CreateBiddingCategory(ProductDimensionType.BIDDING_CATEGORY_L1, -5914235892932915235L)); luggageAndBagNode.AsBiddableUnit().CpcBid = 750000L; // Add a unit node under condition = null/brand = null for product type // level 1 = null (everything else). ProductPartitionNode everythingElseNode = otherBrandNode.AddChild( ProductDimensions.CreateBiddingCategory(ProductDimensionType.BIDDING_CATEGORY_L1)); everythingElseNode.AsBiddableUnit().CpcBid = 110000L; try { // Make the mutate request, using the operations returned by the ProductPartitionTree. AdGroupCriterionOperation[] mutateOperations = partitionTree.GetMutateOperations(); if (mutateOperations.Length == 0) { Console.WriteLine("Skipping the mutate call because the original tree and the " + "current tree are logically identical."); } else { adGroupCriterionService.mutate(mutateOperations); } // The request was successful, so create a new ProductPartitionTree based on the updated // state of the ad group. partitionTree = ProductPartitionTree.DownloadAdGroupTree(user, adGroupId); Console.WriteLine("Final tree: {0}", partitionTree); } catch (Exception e) { throw new System.ApplicationException("Failed to set shopping product partition.", e); } } }