/// <summary>
    /// Run the code examples.
    /// </summary>
    /// <param name="user">The DFP user object running the code examples.</param>
    public override void Run(DfpUser user) {
      // Get the LineItemService.
      LineItemService lineItemService =
          (LineItemService) user.GetService(DfpService.v201311.LineItemService);

      // Set the order that all created line items will belong to and the
      // placement ID to target.
      long orderId = long.Parse(_T("INSERT_ORDER_ID_HERE"));
      long[] targetPlacementIds = new long[] {long.Parse(_T("INSERT_PLACEMENT_ID_HERE"))};

      // Create inventory targeting.
      InventoryTargeting inventoryTargeting = new InventoryTargeting();
      inventoryTargeting.targetedPlacementIds = targetPlacementIds;

      // Create geographical targeting.
      GeoTargeting geoTargeting = new GeoTargeting();

      // Include the US and Quebec, Canada.
      Location countryLocation = new Location();
      countryLocation.id = 2840L;

      Location regionLocation = new Location();
      regionLocation.id = 20123L;
      geoTargeting.targetedLocations = new Location[] {countryLocation, regionLocation};

      Location postalCodeLocation = new Location();
      postalCodeLocation.id = 9000093;

      // Exclude Chicago and the New York metro area.
      Location cityLocation = new Location();
      cityLocation.id = 1016367L;

      Location metroLocation = new Location();
      metroLocation.id = 200501L;
      geoTargeting.excludedLocations = new Location[] {cityLocation, metroLocation};

      // Exclude domains that are not under the network's control.
      UserDomainTargeting userDomainTargeting = new UserDomainTargeting();
      userDomainTargeting.domains = new String[] {"usa.gov"};
      userDomainTargeting.targeted = false;

      // Create day-part targeting.
      DayPartTargeting dayPartTargeting = new DayPartTargeting();
      dayPartTargeting.timeZone = DeliveryTimeZone.BROWSER;

      // Target only the weekend in the browser's timezone.
      DayPart saturdayDayPart = new DayPart();
      saturdayDayPart.dayOfWeek = Google.Api.Ads.Dfp.v201311.DayOfWeek.SATURDAY;

      saturdayDayPart.startTime = new TimeOfDay();
      saturdayDayPart.startTime.hour = 0;
      saturdayDayPart.startTime.minute = MinuteOfHour.ZERO;

      saturdayDayPart.endTime = new TimeOfDay();
      saturdayDayPart.endTime.hour = 24;
      saturdayDayPart.endTime.minute = MinuteOfHour.ZERO;

      DayPart sundayDayPart = new DayPart();
      sundayDayPart.dayOfWeek = Google.Api.Ads.Dfp.v201311.DayOfWeek.SUNDAY;

      sundayDayPart.startTime = new TimeOfDay();
      sundayDayPart.startTime.hour = 0;
      sundayDayPart.startTime.minute = MinuteOfHour.ZERO;

      sundayDayPart.endTime = new TimeOfDay();
      sundayDayPart.endTime.hour = 24;
      sundayDayPart.endTime.minute = MinuteOfHour.ZERO;

      dayPartTargeting.dayParts = new DayPart[] {saturdayDayPart, sundayDayPart};


      // Create technology targeting.
      TechnologyTargeting technologyTargeting = new TechnologyTargeting();

      // Create browser targeting.
      BrowserTargeting browserTargeting = new BrowserTargeting();
      browserTargeting.isTargeted = true;

      // Target just the Chrome browser.
      Technology browserTechnology = new Technology();
      browserTechnology.id = 500072L;
      browserTargeting.browsers = new Technology[] {browserTechnology};
      technologyTargeting.browserTargeting = browserTargeting;

      // Create an array to store local line item objects.
      LineItem[] lineItems = new LineItem[5];

      for (int i = 0; i < 5; i++) {
        LineItem lineItem = new LineItem();
        lineItem.name = "Line item #" + i;
        lineItem.orderId = orderId;
        lineItem.targeting = new Targeting();

        lineItem.targeting.inventoryTargeting = inventoryTargeting;
        lineItem.targeting.geoTargeting = geoTargeting;
        lineItem.targeting.userDomainTargeting = userDomainTargeting;
        lineItem.targeting.dayPartTargeting = dayPartTargeting;
        lineItem.targeting.technologyTargeting = technologyTargeting;

        lineItem.lineItemType = LineItemType.STANDARD;
        lineItem.allowOverbook = true;

        // Set the creative rotation type to even.
        lineItem.creativeRotationType = CreativeRotationType.EVEN;

        // Set the size of creatives that can be associated with this line item.
        Size size = new Size();
        size.width = 300;
        size.height = 250;
        size.isAspectRatio = false;

        // Create the creative placeholder.
        CreativePlaceholder creativePlaceholder = new CreativePlaceholder();
        creativePlaceholder.size = size;

        lineItem.creativePlaceholders = new CreativePlaceholder[] {creativePlaceholder};

        // Set the length of the line item to run.
        //lineItem.startDateTimeType = StartDateTimeType.IMMEDIATELY;
        lineItem.startDateTimeType = StartDateTimeType.IMMEDIATELY;
        lineItem.endDateTime = DateTimeUtilities.FromDateTime(System.DateTime.Today.AddMonths(1));

        // Set the cost per unit to $2.
        lineItem.costType = CostType.CPM;
        lineItem.costPerUnit = new Money();
        lineItem.costPerUnit.currencyCode = "USD";
        lineItem.costPerUnit.microAmount = 2000000L;

        // Set the number of units bought to 500,000 so that the budget is
        // $1,000.
        lineItem.unitsBought = 500000L;
        lineItem.unitType = UnitType.IMPRESSIONS;

        lineItems[i] = lineItem;
      }

      try {
        // Create the line items on the server.
        lineItems = lineItemService.createLineItems(lineItems);

        if (lineItems != null) {
          foreach (LineItem lineItem in lineItems) {
            Console.WriteLine("A line item with ID \"{0}\", belonging to order ID \"{1}\", and" +
                " named \"{2}\" was created.", lineItem.id, lineItem.orderId, lineItem.name);
          }
        } else {
          Console.WriteLine("No line items created.");
        }
      } catch (Exception ex) {
        Console.WriteLine("Failed to create line items. Exception says \"{0}\"",
            ex.Message);
      }
    }
    public void TestCreateLineItems() {
      // Create inventory targeting.
      InventoryTargeting inventoryTargeting = new InventoryTargeting();
      inventoryTargeting.targetedPlacementIds = new long[] {placementId};

      // Create geographical targeting.
      GeoTargeting geoTargeting = new GeoTargeting();

      // Include the US and Quebec, Canada.
      Location countryLocation = new Location();
      countryLocation.id = 2840L;

      Location regionLocation = new Location();
      regionLocation.id = 20123L;
      geoTargeting.targetedLocations = new Location[] {countryLocation, regionLocation};

      // Exclude Chicago and the New York metro area.
      Location cityLocation = new Location();
      cityLocation.id = 1016367L;

      Location metroLocation = new Location();
      metroLocation.id = 200501L;
      geoTargeting.excludedLocations = new Location[] {cityLocation, metroLocation};

      // Exclude domains that are not under the network's control.
      UserDomainTargeting userDomainTargeting = new UserDomainTargeting();
      userDomainTargeting.domains = new String[] {"usa.gov"};
      userDomainTargeting.targeted = false;

      // Create day-part targeting.
      DayPartTargeting dayPartTargeting = new DayPartTargeting();
      dayPartTargeting.timeZone = DeliveryTimeZone.BROWSER;

      // Target only the weekend in the browser's timezone.
      DayPart saturdayDayPart = new DayPart();
      saturdayDayPart.dayOfWeek = Google.Api.Ads.Dfp.v201311.DayOfWeek.SATURDAY;

      saturdayDayPart.startTime = new TimeOfDay();
      saturdayDayPart.startTime.hour = 0;
      saturdayDayPart.startTime.minute = MinuteOfHour.ZERO;

      saturdayDayPart.endTime = new TimeOfDay();
      saturdayDayPart.endTime.hour = 24;
      saturdayDayPart.endTime.minute = MinuteOfHour.ZERO;

      DayPart sundayDayPart = new DayPart();
      sundayDayPart.dayOfWeek = Google.Api.Ads.Dfp.v201311.DayOfWeek.SUNDAY;

      sundayDayPart.startTime = new TimeOfDay();
      sundayDayPart.startTime.hour = 0;
      sundayDayPart.startTime.minute = MinuteOfHour.ZERO;

      sundayDayPart.endTime = new TimeOfDay();
      sundayDayPart.endTime.hour = 24;
      sundayDayPart.endTime.minute = MinuteOfHour.ZERO;

      dayPartTargeting.dayParts = new DayPart[] {saturdayDayPart, sundayDayPart};


      // Create technology targeting.
      TechnologyTargeting technologyTargeting = new TechnologyTargeting();

      // Create browser targeting.
      BrowserTargeting browserTargeting = new BrowserTargeting();
      browserTargeting.isTargeted = true;

      // Target just the Chrome browser.
      Technology browserTechnology = new Technology();
      browserTechnology.id = 500072L;
      browserTargeting.browsers = new Technology[] {browserTechnology};
      technologyTargeting.browserTargeting = browserTargeting;

      // Create an array to store local line item objects.
      LineItem[] lineItems = new LineItem[2];

      for (int i = 0; i < lineItems.Length; i++) {
        LineItem lineItem = new LineItem();
        lineItem.name = "Line item #" + new TestUtils().GetTimeStamp();
        lineItem.orderId = orderId;
        lineItem.targeting = new Targeting();

        lineItem.targeting.inventoryTargeting = inventoryTargeting;
        lineItem.targeting.geoTargeting = geoTargeting;
        lineItem.targeting.userDomainTargeting = userDomainTargeting;
        lineItem.targeting.dayPartTargeting = dayPartTargeting;
        lineItem.targeting.technologyTargeting = technologyTargeting;

        lineItem.lineItemType = LineItemType.STANDARD;
        lineItem.allowOverbook = true;

        // Set the creative rotation type to even.
        lineItem.creativeRotationType = CreativeRotationType.EVEN;

        // Set the size of creatives that can be associated with this line item.
        Size size = new Size();
        size.width = 300;
        size.height = 250;
        size.isAspectRatio = false;

        // Create the creative placeholder.
        CreativePlaceholder creativePlaceholder = new CreativePlaceholder();
        creativePlaceholder.size = size;

        lineItem.creativePlaceholders = new CreativePlaceholder[] {creativePlaceholder};

        // Set the length of the line item to run.
        //lineItem.startDateTimeType = StartDateTimeType.IMMEDIATELY;
        lineItem.startDateTimeType = StartDateTimeType.IMMEDIATELY;
        lineItem.endDateTime = DateTimeUtilities.FromDateTime(System.DateTime.Today.AddMonths(1));

        // Set the cost per unit to $2.
        lineItem.costType = CostType.CPM;
        lineItem.costPerUnit = new Money();
        lineItem.costPerUnit.currencyCode = "USD";
        lineItem.costPerUnit.microAmount = 2000000L;

        // Set the number of units bought to 500,000 so that the budget is
        // $1,000.
        lineItem.unitsBought = 500000L;
        lineItem.unitType = UnitType.IMPRESSIONS;

        lineItems[i] = lineItem;
      }

      LineItem[] localLineItems = null;

      Assert.DoesNotThrow(delegate() {
        localLineItems = lineItemService.createLineItems(lineItems);
      });

      Assert.NotNull(localLineItems);
      Assert.AreEqual(localLineItems.Length, 2);

      Assert.AreEqual(localLineItems[0].name, lineItems[0].name);
      Assert.AreEqual(localLineItems[0].orderId, lineItems[0].orderId);

      Assert.AreEqual(localLineItems[1].name, lineItems[1].name);
      Assert.AreEqual(localLineItems[1].orderId, lineItems[1].orderId);
    }
    /// <summary>
    /// Run the code example.
    /// </summary>
    /// <param name="user">The DFP user object running the code example.</param>
    public override void Run(DfpUser user) {
      // Get the LineItemService.
      LineItemService lineItemService =
          (LineItemService) user.GetService(DfpService.v201311.LineItemService);

      // Set the order that all created line items will belong to and the
      // placement containing ad units with a mobile target platform.
      long orderId = long.Parse(_T("INSERT_ORDER_ID_HERE"));
      long[] targetedPlacementIds = new long[] {long.Parse(_T("INSERT_MOBILE_PLACEMENT_ID_HERE"))};

      // Create inventory targeting.
      InventoryTargeting inventoryTargeting = new InventoryTargeting();
      inventoryTargeting.targetedPlacementIds = targetedPlacementIds;

      // Create technology targeting.
      TechnologyTargeting technologyTargeting = new TechnologyTargeting();

      // Create device manufacturer targeting.
      DeviceManufacturerTargeting deviceManufacturerTargeting = new DeviceManufacturerTargeting();
      deviceManufacturerTargeting.isTargeted = true;

      // Target the Google device manufacturer (40100).
      Technology deviceManufacturerTechnology = new Technology();
      deviceManufacturerTechnology.id = 40100L;
      deviceManufacturerTargeting.deviceManufacturers =
          new Technology[] {deviceManufacturerTechnology};
      technologyTargeting.deviceManufacturerTargeting = deviceManufacturerTargeting;

      // Create mobile device targeting.
      MobileDeviceTargeting mobileDeviceTargeting = new MobileDeviceTargeting();

      // Exclude the Nexus One device (604046).
      Technology mobileDeviceTechnology = new Technology();
      mobileDeviceTechnology.id = 604046L;
      mobileDeviceTargeting.targetedMobileDevices = new Technology[] {mobileDeviceTechnology};
      technologyTargeting.mobileDeviceTargeting = mobileDeviceTargeting;

      // Create mobile device submodel targeting.
      MobileDeviceSubmodelTargeting mobileDeviceSubmodelTargeting =
          new MobileDeviceSubmodelTargeting();

      // Target the iPhone 4 device submodel (640003).
      Technology mobileDeviceSubmodelTechnology = new Technology();
      mobileDeviceSubmodelTechnology.id = 640003L;
      mobileDeviceSubmodelTargeting.targetedMobileDeviceSubmodels =
          new Technology[] {mobileDeviceSubmodelTechnology};
      technologyTargeting.mobileDeviceSubmodelTargeting = mobileDeviceSubmodelTargeting;

      // Create targeting.
      Targeting targeting = new Targeting();
      targeting.inventoryTargeting = inventoryTargeting;
      targeting.technologyTargeting = technologyTargeting;

      // Create local line item object.
      LineItem lineItem = new LineItem();
      lineItem.name = "Mobile line item";
      lineItem.orderId = orderId;
      lineItem.targeting = targeting;
      lineItem.lineItemType = LineItemType.STANDARD;
      lineItem.allowOverbook = true;

      // Set the target platform to mobile.
      lineItem.targetPlatform = TargetPlatform.MOBILE;

      // Set the creative rotation type to even.
      lineItem.creativeRotationType = CreativeRotationType.EVEN;

      // Create the creative placeholder.
      CreativePlaceholder creativePlaceholder = new CreativePlaceholder();
      Size size = new Size();
      size.width = 300;
      size.height = 250;
      size.isAspectRatio = false;
      creativePlaceholder.size = size;

      // Set the size of creatives that can be associated with this line item.
      lineItem.creativePlaceholders = new CreativePlaceholder[] {creativePlaceholder};

      // Set the length of the line item to run.
      lineItem.startDateTimeType = StartDateTimeType.IMMEDIATELY;
      lineItem.endDateTime = DateTimeUtilities.FromString("20120901 00:00:00");

      // Set the cost per unit to $2.
      lineItem.costType = CostType.CPM;
      Money money = new Money();
      money.currencyCode = "USD";
      money.microAmount = 2000000L;
      lineItem.costPerUnit = money;

      // Set the number of units bought to 500,000 so that the budget is
      // $1,000.
      lineItem.unitsBought = 500000L;
      lineItem.unitType = UnitType.IMPRESSIONS;

      try {
        // Create the line item on the server.
        lineItem = lineItemService.createLineItem(lineItem);

        if (lineItem != null) {
          Console.WriteLine("A line item with ID \"{0}\", belonging to order ID \"{1}\", and " +
              "named \"{2}\" was created.", lineItem.id, lineItem.orderId, lineItem.name);
        } else {
          Console.WriteLine("No line item created.");
        }
      } catch (Exception ex) {
        Console.WriteLine("Failed to create line items. Exception says \"{0}\"",
            ex.Message);
      }
    }