/// <summary>
        /// Runs the code example.
        /// </summary>
        /// <param name="user">The AdWords user.</param>
        /// <param name="adGroupId">Id of the adgroup for which bid modifier is
        /// set.</param>
        /// <param name="bidModifier">The mobile bid modifier for adgroup</param>
        public void Run(AdWordsUser user, long adGroupId, double bidModifier)
        {
            using (AdGroupBidModifierService adGroupBidModifierService =
                       (AdGroupBidModifierService)user.GetService(AdWordsService.v201802
                                                                  .AdGroupBidModifierService))
            {
                // Mobile criterion ID.
                long criterionId = 30001;

                // Create the adgroup bid modifier.
                AdGroupBidModifier adGroupBidModifier = new AdGroupBidModifier
                {
                    bidModifier = bidModifier,
                    adGroupId   = adGroupId
                };

                Platform platform = new Platform
                {
                    id = criterionId
                };

                adGroupBidModifier.criterion = platform;

                AdGroupBidModifierOperation operation = new AdGroupBidModifierOperation
                {
                    @operator = Operator.ADD,
                    operand   = adGroupBidModifier
                };

                try
                {
                    // Add ad group level mobile bid modifier.
                    AdGroupBidModifierReturnValue retval = adGroupBidModifierService.mutate(
                        new AdGroupBidModifierOperation[]
                    {
                        operation
                    });

                    // Display the results.
                    if (retval != null && retval.value != null && retval.value.Length > 0)
                    {
                        AdGroupBidModifier newBidModifier = retval.value[0];
                        Console.WriteLine(
                            "AdGroup ID {0}, Criterion ID {1} was updated with ad group level " +
                            "modifier: {2}", newBidModifier.adGroupId, newBidModifier.criterion.id,
                            newBidModifier.bidModifier);
                    }
                    else
                    {
                        Console.WriteLine("No bid modifiers were added to the adgroup.");
                    }
                }
                catch (Exception e)
                {
                    throw new System.ApplicationException("Failed to add bid modifiers to adgroup.",
                                                          e);
                }
            }
        }
        /// <summary>
        /// Runs the code example.
        /// </summary>
        /// <param name="user">The AdWords user.</param>
        /// <param name="campaignId">Id of the campaign.</param>
        public void Run(AdWordsUser user, long campaignId)
        {
            // Get the AdGroupAdService.
            AdGroupBidModifierService adGroupBidModifierService =
                (AdGroupBidModifierService)user.GetService(
                    AdWordsService.v201705.AdGroupBidModifierService);

            // Get all ad group bid modifiers for the campaign.
            Selector selector = new Selector()
            {
                fields = new String[] {
                    AdGroupBidModifier.Fields.CampaignId, AdGroupBidModifier.Fields.AdGroupId,
                    AdGroupBidModifier.Fields.BidModifier, AdGroupBidModifier.Fields.BidModifierSource,
                    Criterion.Fields.CriteriaType, Criterion.Fields.Id
                },
                predicates = new Predicate[] {
                    Predicate.Equals(AdGroupBidModifier.Fields.CampaignId, campaignId)
                },
                paging = Paging.Default
            };

            AdGroupBidModifierPage page = new AdGroupBidModifierPage();

            try {
                do
                {
                    // Get the campaigns.
                    page = adGroupBidModifierService.get(selector);

                    // Display the results.
                    if (page != null && page.entries != null)
                    {
                        int i = selector.paging.startIndex;
                        foreach (AdGroupBidModifier adGroupBidModifier in page.entries)
                        {
                            string bidModifier = (adGroupBidModifier.bidModifierSpecified) ?
                                                 adGroupBidModifier.bidModifier.ToString() : "UNSET";
                            Console.WriteLine("{0}) Campaign ID {1}, AdGroup ID {2}, Criterion ID {3} has " +
                                              "ad group level modifier: {4} and source = {5}.",
                                              i + 1, adGroupBidModifier.campaignId,
                                              adGroupBidModifier.adGroupId, adGroupBidModifier.criterion.id, bidModifier,
                                              adGroupBidModifier.bidModifierSource);
                            i++;
                        }
                    }
                    selector.paging.IncreaseOffset();
                } while (selector.paging.startIndex < page.totalNumEntries);
                Console.WriteLine("Number of adgroup bid modifiers found: {0}", page.totalNumEntries);
            } catch (Exception e) {
                throw new System.ApplicationException("Failed to retrieve adgroup bid modifiers.", e);
            }
        }
        /// <summary>
        /// Runs the code example.
        /// </summary>
        /// <param name="user">The AdWords user.</param>
        /// <param name="adGroupId">Id of the ad group to which ads are added.
        /// </param>
        public void Run(AdWordsUser user, long campaignId)
        {
            // Get the AdGroupAdService.
            AdGroupBidModifierService adGroupBidModifierService =
                (AdGroupBidModifierService)user.GetService(
                    AdWordsService.v201409.AdGroupBidModifierService);

            const int PAGE_SIZE = 500;

            // Get all ad group bid modifiers for the campaign.
            Selector selector = new Selector();

            selector.fields = new String[] { "CampaignId", "AdGroupId", "BidModifier", "BidModifierSource",
                                             "CriteriaType", "Id" };

            Predicate predicate = new Predicate();

            predicate.field     = "CampaignId";
            predicate.@operator = PredicateOperator.EQUALS;
            predicate.values    = new string[] { campaignId.ToString() };
            selector.predicates = new Predicate[] { predicate };

            // Set the selector paging.
            selector.paging = new Paging();

            int offset   = 0;
            int pageSize = PAGE_SIZE;

            AdGroupBidModifierPage page = new AdGroupBidModifierPage();

            try {
                do
                {
                    selector.paging.startIndex    = offset;
                    selector.paging.numberResults = pageSize;

                    // Get the campaigns.
                    page = adGroupBidModifierService.get(selector);

                    // Display the results.
                    if (page != null && page.entries != null)
                    {
                        int i = offset;
                        foreach (AdGroupBidModifier adGroupBidModifier in page.entries)
                        {
                            string bidModifier = (adGroupBidModifier.bidModifierSpecified)?
                                                 adGroupBidModifier.bidModifier.ToString() : "UNSET";
                            Console.WriteLine("{0}) Campaign ID {1}, AdGroup ID {2}, Criterion ID {3} has " +
                                              "ad group level modifier: {4} and source = {5}.",
                                              i + 1, adGroupBidModifier.campaignId,
                                              adGroupBidModifier.adGroupId, adGroupBidModifier.criterion.id, bidModifier,
                                              adGroupBidModifier.bidModifierSource);
                            i++;
                        }
                    }
                    offset += pageSize;
                } while (offset < page.totalNumEntries);
                Console.WriteLine("Number of adgroup bid modifiers found: {0}", page.totalNumEntries);
            } catch (Exception ex) {
                throw new System.ApplicationException("Failed to retrieve adgroup bid modifiers.", ex);
            }
        }