/// <summary>
    /// Runs the code example.
    /// </summary>
    /// <param name="user">The AdWords user.</param>
    /// <param name="campaignId">Id of the campaign for which disapproved ads
    /// are retrieved.</param>
    public void Run(AdWordsUser user, long campaignId) {
      // Get the AdGroupAdService.
      AdGroupAdService service =
          (AdGroupAdService) user.GetService(AdWordsService.v201506.AdGroupAdService);

      // Create the selector.
      Selector selector = new Selector() {
        fields = new string[] {
          Ad.Fields.Id, AdGroupAd.Fields.AdGroupCreativeApprovalStatus,
          AdGroupAd.Fields.AdGroupAdDisapprovalReasons
        },
        predicates = new Predicate[] {
          Predicate.Equals(AdGroup.Fields.CampaignId, campaignId),
          Predicate.Equals(AdGroupAd.Fields.AdGroupCreativeApprovalStatus,
              AdGroupAdApprovalStatus.DISAPPROVED.ToString())
        },
        paging = Paging.Default
      };

      AdGroupAdPage page = new AdGroupAdPage();

      try {
        do {
          // Get the disapproved ads.
          page = service.get(selector);

          // Display the results.
          if (page != null && page.entries != null) {
            int i = selector.paging.startIndex;
            foreach (AdGroupAd adGroupAd in page.entries) {
              Console.WriteLine("{0}) Ad id {1} has been disapproved for the following " +
                  "reason(s):", i + 1, adGroupAd.ad.id);
              foreach (string reason in adGroupAd.disapprovalReasons) {
                Console.WriteLine("    {0}", reason);
              }
              i++;
            }
          }
          selector.paging.IncreaseOffset();
        } while (selector.paging.startIndex < page.totalNumEntries);
        Console.WriteLine("Number of disapproved ads found: {0}", page.totalNumEntries);
      } catch (Exception e) {
        throw new System.ApplicationException("Failed to get disapproved ads.", e);
      }
    }
    /// <summary>
    /// Runs the code example.
    /// </summary>
    /// <param name="user">The AdWords user.</param>
    /// <param name="campaignId">Id of the campaign for which disapproved ads
    /// are retrieved.</param>
    public void Run(AdWordsUser user, long campaignId) {
      // Get the AdGroupAdService.
      AdGroupAdService service =
          (AdGroupAdService) user.GetService(AdWordsService.v201506.AdGroupAdService);

      // Get all the disapproved ads for this campaign.
      string query = string.Format("SELECT Id, AdGroupAdDisapprovalReasons WHERE " +
          "CampaignId = {0} AND AdGroupCreativeApprovalStatus = DISAPPROVED ORDER BY Id",
          campaignId);

      int offset = 0;
      int pageSize = 500;

      AdGroupAdPage page = new AdGroupAdPage();

      try {
        do {
          string queryWithPaging = string.Format("{0} LIMIT {1}, {2}", query, offset, pageSize);

          // Get the disapproved ads.
          page = service.query(queryWithPaging);

          // Display the results.
          if (page != null && page.entries != null) {
            int i = offset;
            foreach (AdGroupAd adGroupAd in page.entries) {
              Console.WriteLine("{0}) Ad id {1} has been disapproved for the following " +
                  "reason(s):", i, adGroupAd.ad.id);
              foreach (string reason in adGroupAd.disapprovalReasons) {
                Console.WriteLine("    {0}", reason);
              }
              i++;
            }
          }
          offset += pageSize;
        } while (offset < page.totalNumEntries);
        Console.WriteLine("Number of disapproved ads found: {0}", page.totalNumEntries);
      } catch (Exception e) {
        throw new System.ApplicationException("Failed to get disapproved ads.", e);
      }
    }
        /// <summary>
        /// Runs the code example.
        /// </summary>
        /// <param name="user">The AdWords user.</param>
        /// <param name="campaignId">Id of the campaign for which disapproved ads
        /// are retrieved.</param>
        public void Run(AdWordsUser user, long campaignId)
        {
            // Get the AdGroupAdService.
              AdGroupAdService service =
              (AdGroupAdService) user.GetService(AdWordsService.v201506.AdGroupAdService);

              // Create the selector.
              Selector selector = new Selector();
              selector.fields = new string[] {"Id", "AdGroupCreativeApprovalStatus",
              "AdGroupAdDisapprovalReasons"};

              // Create the filter.
              Predicate campaignPredicate = new Predicate();
              campaignPredicate.@operator = PredicateOperator.EQUALS;
              campaignPredicate.field = "CampaignId";
              campaignPredicate.values = new string[] {campaignId.ToString()};

              Predicate approvalPredicate = new Predicate();
              approvalPredicate.@operator = PredicateOperator.EQUALS;
              approvalPredicate.field = "AdGroupCreativeApprovalStatus";
              approvalPredicate.values = new string[] {AdGroupAdApprovalStatus.DISAPPROVED.ToString()};

              selector.predicates = new Predicate[] {campaignPredicate, approvalPredicate};

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

              int offset = 0;
              int pageSize = 500;

              AdGroupAdPage page = new AdGroupAdPage();

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

              // Get the disapproved ads.
              page = service.get(selector);

              // Display the results.
              if (page != null && page.entries != null) {
            int i = offset;
            foreach (AdGroupAd adGroupAd in page.entries) {
              Console.WriteLine("{0}) Ad id {1} has been disapproved for the following " +
                  "reason(s):", i, adGroupAd.ad.id);
              foreach (string reason in adGroupAd.disapprovalReasons) {
                Console.WriteLine("    {0}", reason);
              }
              i++;
            }
              }
              offset += pageSize;
            } while (offset < page.totalNumEntries);
            Console.WriteLine("Number of disapproved ads found: {0}", page.totalNumEntries);
              } catch (Exception e) {
            throw new System.ApplicationException("Failed to get disapproved ads.", e);
              }
        }
    /// <summary>
    /// Runs the code example.
    /// </summary>
    /// <param name="user">The AdWords user.</param>
    /// <param name="adGroupId">Id of the ad group from which third party
    /// redirect ads are retrieved.</param>
    public void Run(AdWordsUser user, long adGroupId) {
      // Get the AdGroupAdService.
      AdGroupAdService service =
          (AdGroupAdService) user.GetService(AdWordsService.v201506.AdGroupAdService);

      // Create a selector.
      Selector selector = new Selector();
      selector.fields = new string[] {"Id", "Status", "Url", "DisplayUrl", "RichMediaAdSnippet"};

      // Set the sort order.
      OrderBy orderBy = new OrderBy();
      orderBy.field = "Id";
      orderBy.sortOrder = SortOrder.ASCENDING;
      selector.ordering = new OrderBy[] {orderBy};

      // Restrict the fetch to only the selected ad group id.
      Predicate adGroupPredicate = new Predicate();
      adGroupPredicate.field = "AdGroupId";
      adGroupPredicate.@operator = PredicateOperator.EQUALS;
      adGroupPredicate.values = new string[] {adGroupId.ToString()};

      // Retrieve only third party redirect ads.
      Predicate typePredicate = new Predicate();
      typePredicate.field = "AdType";
      typePredicate.@operator = PredicateOperator.EQUALS;
      typePredicate.values = new string[] {"THIRD_PARTY_REDIRECT_AD"};

      // By default disabled ads aren't returned by the selector. To return
      // them include the DISABLED status in the statuses field.
      Predicate statusPredicate = new Predicate();
      statusPredicate.field = "Status";
      statusPredicate.@operator = PredicateOperator.IN;

      statusPredicate.values = new string[] {AdGroupAdStatus.ENABLED.ToString(),
          AdGroupAdStatus.PAUSED.ToString(), AdGroupAdStatus.DISABLED.ToString()};

      selector.predicates = new Predicate[] {adGroupPredicate, statusPredicate, typePredicate};

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

      int offset = 0;
      int pageSize = 500;

      AdGroupAdPage page = new AdGroupAdPage();

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

          // Get the third party redirect ads.
          page = service.get(selector);

          // Display the results.
          if (page != null && page.entries != null) {
            int i = offset;

            foreach (AdGroupAd adGroupAd in page.entries) {
              ThirdPartyRedirectAd thirdPartyRedirectAd = (ThirdPartyRedirectAd) adGroupAd.ad;
              Console.WriteLine("{0}) Ad id is {1} and status is {2}", i, thirdPartyRedirectAd.id,
                  adGroupAd.status);
              Console.WriteLine("  Url: {0}\n  Display Url: {1}\n  Snippet:{2}",
                  thirdPartyRedirectAd.finalUrls[0], thirdPartyRedirectAd.displayUrl,
                  thirdPartyRedirectAd.snippet);
              i++;
            }
          }
          offset += pageSize;
        } while (offset < page.totalNumEntries);
        Console.WriteLine("Number of third party redirect ads found: {0}", page.totalNumEntries);
      } catch (Exception ex) {
        throw new System.ApplicationException("Failed to get third party redirect ad(s).", ex);
      }
    }
    /// <summary>
    /// Runs the code example.
    /// </summary>
    /// <param name="user">The AdWords user.</param>
    /// <param name="adGroupId">Id of the ad group from which text ads are
    /// retrieved.</param>
    public void Run(AdWordsUser user, long adGroupId) {
      // Get the AdGroupAdService.
      AdGroupAdService service =
          (AdGroupAdService) user.GetService(AdWordsService.v201506.AdGroupAdService);

      // Create a selector.
      Selector selector = new Selector() {
        fields = new string[] {
          TextAd.Fields.Id, AdGroupAd.Fields.Status, TextAd.Fields.Headline,
          TextAd.Fields.Description1, TextAd.Fields.Description2, TextAd.Fields.DisplayUrl
        },
        ordering = new OrderBy[] { OrderBy.Asc(TextAd.Fields.Id) },
        predicates = new Predicate[] {
          // Restrict the fetch to only the selected ad group id.
          Predicate.Equals(AdGroupAd.Fields.AdGroupId, adGroupId),

          // Retrieve only text ads.
          Predicate.Equals("AdType", "TEXT_AD"),

          // By default disabled ads aren't returned by the selector. To return
          // them include the DISABLED status in the statuses field.
          Predicate.In(AdGroupAd.Fields.Status, new string[] {
              AdGroupAdStatus.ENABLED.ToString(),
              AdGroupAdStatus.PAUSED.ToString(),
              AdGroupAdStatus.DISABLED.ToString()
          })
        },
        paging = Paging.Default
      };

      AdGroupAdPage page = new AdGroupAdPage();

      try {
        do {
          // Get the text ads.
          page = service.get(selector);

          // Display the results.
          if (page != null && page.entries != null) {
            int i = selector.paging.startIndex;

            foreach (AdGroupAd adGroupAd in page.entries) {
              TextAd textAd = (TextAd) adGroupAd.ad;
              Console.WriteLine("{0}) Ad id is {1} and status is {2}", i + 1, textAd.id,
                  adGroupAd.status);
              Console.WriteLine("  {0}\n  {1}\n  {2}\n  {3}", textAd.headline,
                  textAd.description1, textAd.description2, textAd.displayUrl);
              i++;
            }
          }
          selector.paging.IncreaseOffset();
        } while (selector.paging.startIndex < page.totalNumEntries);
        Console.WriteLine("Number of text ads found: {0}", page.totalNumEntries);
      } catch (Exception e) {
        throw new System.ApplicationException("Failed to get text ads", e);
      }
    }
    /// <summary>
    /// Runs the code example.
    /// </summary>
    /// <param name="user">The AdWords user.</param>
    /// <param name="adGroupId">Id of the ad group from which third party
    /// redirect ads are retrieved.</param>
    public void Run(AdWordsUser user, long adGroupId) {
      // Get the AdGroupAdService.
      AdGroupAdService service =
          (AdGroupAdService) user.GetService(AdWordsService.v201506.AdGroupAdService);

      // Create a selector.
      Selector selector = new Selector() {
        fields = new string[] {
          Ad.Fields.Id, AdGroupAd.Fields.Status, ThirdPartyRedirectAd.Fields.Url,
          ThirdPartyRedirectAd.Fields.DisplayUrl, ThirdPartyRedirectAd.Fields.RichMediaAdSnippet
        },
        ordering = new OrderBy[] { OrderBy.Asc(Ad.Fields.Id) },
        predicates = new Predicate[] {
          // Restrict the fetch to only the selected ad group id.
          Predicate.Equals(AdGroupAd.Fields.AdGroupId, adGroupId.ToString()),

          // Restrieve only third party redirect ads.
          Predicate.Equals("AdType", "THIRD_PARTY_REDIRECT_AD"),

          // By default disabled ads aren't returned by the selector. To return
          // them include the DISABLED status in the statuses field.
          Predicate.In(AdGroupAd.Fields.Status, new string[] {
              AdGroupAdStatus.ENABLED.ToString(),
              AdGroupAdStatus.PAUSED.ToString(),
              AdGroupAdStatus.DISABLED.ToString()
          })
        },
        paging = Paging.Default
      };

      AdGroupAdPage page = new AdGroupAdPage();

      try {
        do {
          // Get the third party redirect ads.
          page = service.get(selector);

          // Display the results.
          if (page != null && page.entries != null) {
            int i = selector.paging.startIndex;

            foreach (AdGroupAd adGroupAd in page.entries) {
              ThirdPartyRedirectAd thirdPartyRedirectAd = (ThirdPartyRedirectAd) adGroupAd.ad;
              Console.WriteLine("{0}) Ad id is {1} and status is {2}", i, thirdPartyRedirectAd.id,
                  adGroupAd.status);
              Console.WriteLine("  Url: {0}\n  Display Url: {1}\n  Snippet:{2}",
                  thirdPartyRedirectAd.finalUrls[0], thirdPartyRedirectAd.displayUrl,
                  thirdPartyRedirectAd.snippet);
              i++;
            }
          }
          selector.paging.IncreaseOffset();
        } while (selector.paging.startIndex < page.totalNumEntries);
        Console.WriteLine("Number of third party redirect ads found: {0}", page.totalNumEntries);
      } catch (Exception e) {
        throw new System.ApplicationException("Failed to get third party redirect ad(s).", e);
      }
    }