/// <summary>
    /// Runs the code example.
    /// </summary>
    /// <param name="user">The AdWords user.</param>
    /// <param name="businessId">The AdWords Express business id.</param>
    public void Run(AdWordsUser user, long businessId) {
      // Get the ExpressBusinessService.
      ExpressBusinessService businessService = (ExpressBusinessService)
          user.GetService(AdWordsService.v201406.ExpressBusinessService);

      // Get the PromotionService
      PromotionService promotionService = (PromotionService)
          user.GetService(AdWordsService.v201406.PromotionService);

      // Get the business for the businessId. We will need its geo point to
      // create a Proximity criterion for the new Promotion.
      Selector businessSelector = new Selector();

      Predicate predicate = new Predicate();
      predicate.field = "Id";
      predicate.@operator = PredicateOperator.EQUALS;
      predicate.values = new string[] { businessId.ToString() };
      businessSelector.predicates = new Predicate[] { predicate };

      businessSelector.fields = new string[] { "Id", "GeoPoint" };

      ExpressBusinessPage businessPage = businessService.get(businessSelector);

      if (businessPage == null || businessPage.entries == null ||
          businessPage.entries.Length == 0) {
        Console.WriteLine("No business was found.");
        return;
      }

      // Set the business ID to the service.
      promotionService.RequestHeader.expressBusinessId = businessId;

      // First promotion
      Promotion marsTourPromotion = new Promotion();
      Money budget = new Money();
      budget.microAmount = 1000000L;
      marsTourPromotion.name = "Mars Tour Promotion " + ExampleUtilities.GetShortRandomString();
      marsTourPromotion.status = PromotionStatus.PAUSED;
      marsTourPromotion.destinationUrl = "http://www.example.com";
      marsTourPromotion.budget = budget;
      marsTourPromotion.callTrackingEnabled = true;

      // Criteria

      // Criterion - Travel Agency product service
      ProductService productService = new ProductService();
      productService.text = "Travel Agency";

      // Criterion - English language
      // The ID can be found in the documentation:
      // https://developers.google.com/adwords/api/docs/appendix/languagecodes
      Language language = new Language();
      language.id = 1000L;

      // Criterion - Within 15 miles
      Proximity proximity = new Proximity();
      proximity.geoPoint = businessPage.entries[0].geoPoint;
      proximity.radiusDistanceUnits = ProximityDistanceUnits.MILES;
      proximity.radiusInUnits = 15;

      marsTourPromotion.criteria = new Criterion[] { productService, language, proximity };

      // Creatives

      Creative creative1 = new Creative();
      creative1.headline = "Standard Mars Trip";
      creative1.line1 = "Fly coach to Mars";
      creative1.line2 = "Free in-flight pretzels";

      Creative creative2 = new Creative();
      creative2.headline = "Deluxe Mars Trip";
      creative2.line1 = "Fly first class to Mars";
      creative2.line2 = "Unlimited powdered orange drink";

      marsTourPromotion.creatives = new Creative[] { creative1, creative2 };

      PromotionOperation operation = new PromotionOperation();
      operation.@operator = Operator.ADD;
      operation.operand = marsTourPromotion;

      try {
        Promotion[] addedPromotions = promotionService.mutate(
            new PromotionOperation[] { operation });

        Console.WriteLine("Added promotion ID {0} with name {1} to business ID {2}.",
        addedPromotions[0].id, addedPromotions[0].name, businessId);
      } catch (Exception ex) {
        throw new System.ApplicationException("Failed to add promotions.", ex);
      }
    }
    /// <summary>
    /// Runs the code example.
    /// </summary>
    /// <param name="user">The AdWords user.</param>
    public void Run(AdWordsUser user) {
      // Get the BudgetSuggestionService.
      BudgetSuggestionService budgetSuggestionService = (BudgetSuggestionService)
          user.GetService(AdWordsService.v201406.BudgetSuggestionService);

      BudgetSuggestionSelector selector = new BudgetSuggestionSelector();

      List<Criterion> criteria = new List<Criterion>();

      // Criterion - Travel Agency product/service. See GetProductServices.cs for an example
      // of how to get valid product/service settings.
      ProductService productService = new ProductService();
      productService.text = "Travel Agency";
      productService.locale = "en_US";
      criteria.Add(productService);

      // Criterion - English language.
      // The ID can be found in the documentation:
      // https://developers.google.com/adwords/api/docs/appendix/languagecodes
      Language language = new Language();
      language.id = 1000L;
      criteria.Add(language);

      // Criterion - Mountain View, California location.
      // The ID can be found in the documentation:
      // https://developers.google.com/adwords/api/docs/appendix/geotargeting
      // https://developers.google.com/adwords/api/docs/appendix/cities-DMAregions
      Location location = new Location();
      location.id = 1014044L;
      criteria.Add(location);

      selector.criteria = criteria.ToArray();

      try {
        BudgetSuggestion budgetSuggestion = budgetSuggestionService.get(selector);

        Console.WriteLine("Budget suggestion for criteria is:\n" +
            "  SuggestedBudget={0}\n" +
            "  Min/MaxBudget={1}/{2}\n" +
            "  Min/MaxCpc={3}/{4}\n" +
            "  CPM={5}\n" +
            "  CPC={6}\n" +
            "  Impressions={7}\n",
            budgetSuggestion.suggestedBudget.microAmount,
            budgetSuggestion.minBudget.microAmount, budgetSuggestion.maxBudget.microAmount,
            budgetSuggestion.minCpc.microAmount, budgetSuggestion.maxCpc.microAmount,
            budgetSuggestion.cpm.microAmount,
            budgetSuggestion.cpc.microAmount,
            budgetSuggestion.impressions);

        if (budgetSuggestion.budgetQuantiles != null
            && budgetSuggestion.budgetQuantiles.Length > 0) {
          int quantileCount = 0;
          Console.WriteLine("  Budget quantiles:");
          foreach (Money budgetQuantile in budgetSuggestion.budgetQuantiles) {
            Console.WriteLine("    {0}) {1}", ++quantileCount, budgetQuantile.microAmount);
          }
        } else {
          Console.WriteLine("  No budget quantiles found on budget suggestion");
        }
      } catch (Exception ex) {
        throw new System.ApplicationException("Failed to get budget suggestion.", ex);
      }
    }