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.v201208.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.v201208.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.v201208.LineItemService);

              // Set the order that all created line items will belong to and the
              // video ad unit ID to target.
              long orderId = long.Parse(_T("INSERT_ORDER_ID_HERE"));
              string targetedVideoAdUnitId = _T("INSERT_TARGETED_VIDEO_AD_UNIT_ID_HERE");

              // Set the custom targeting key ID and value ID representing the metadata
              // on the content to target. This would typically be a key representing
              // a "genre" and a value representing something like "comedy".
              long contentCustomTargetingKeyId =
              long.Parse(_T("INSERT_CONTENT_CUSTOM_TARGETING_KEY_ID_HERE"));
              long contentCustomTargetingValueId =
              long.Parse(_T("INSERT_CONTENT_CUSTOM_TARGETING_VALUE_ID_HERE"));

              // Create custom criteria for the content metadata targeting.
              CustomCriteria contentCustomCriteria = new CustomCriteria();
              contentCustomCriteria.keyId = contentCustomTargetingKeyId;
              contentCustomCriteria.valueIds = new long[] {contentCustomTargetingValueId};
              [email protected] = CustomCriteriaComparisonOperator.IS;

              // Create custom criteria set.
              CustomCriteriaSet customCriteriaSet = new CustomCriteriaSet();
              customCriteriaSet.children = new CustomCriteriaNode[] {contentCustomCriteria};

              // Create inventory targeting.
              InventoryTargeting inventoryTargeting = new InventoryTargeting();
              AdUnitTargeting adUnitTargeting = new AdUnitTargeting();
              adUnitTargeting.adUnitId = targetedVideoAdUnitId;
              adUnitTargeting.includeDescendants = true;
              inventoryTargeting.targetedAdUnits = new AdUnitTargeting[] {adUnitTargeting};

              // Create video position targeting.
              VideoPositionTargeting videoPositionTargeting = new VideoPositionTargeting();
              videoPositionTargeting.targetedVideoPositions =
              new VideoPositionTargetingType[] {VideoPositionTargetingType.PREROLL};

              // Create targeting.
              Targeting targeting = new Targeting();
              targeting.customTargeting = customCriteriaSet;
              targeting.inventoryTargeting = inventoryTargeting;
              targeting.videoPositionTargeting = videoPositionTargeting;

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

              // Set the environment type to video.
              lineItem.environmentType = EnvironmentType.VIDEO_PLAYER;

              // Set the creative rotation type to optimized.
              lineItem.creativeRotationType = CreativeRotationType.OPTIMIZED;

              // Create the master creative placeholder.
              CreativePlaceholder creativeMasterPlaceholder = new CreativePlaceholder();
              Size size1 = new Size();
              size1.width = 400;
              size1.height = 300;
              size1.isAspectRatio = false;
              creativeMasterPlaceholder.size = size1;

              // Create companion creative placeholders.
              CreativePlaceholder companionCreativePlaceholder1 = new CreativePlaceholder();
              Size size2 = new Size();
              size2.width = 300;
              size2.height = 250;
              size2.isAspectRatio = false;
              companionCreativePlaceholder1.size = size2;

              CreativePlaceholder companionCreativePlaceholder2 = new CreativePlaceholder();
              Size size3 = new Size();
              size3.width = 728;
              size3.height = 90;
              size3.isAspectRatio = false;
              companionCreativePlaceholder2.size = size3;

              // Set companion creative placeholders.
              creativeMasterPlaceholder.companions = new CreativePlaceholder[] {
              companionCreativePlaceholder1, companionCreativePlaceholder2};

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

              // Set delivery of video companions to optional.
              lineItem.companionDeliveryOption = CompanionDeliveryOption.OPTIONAL;

              // 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 day to $1.
              lineItem.costType = CostType.CPD;
              Money money = new Money();
              money.currencyCode = "USD";
              money.microAmount = 1000000L;
              lineItem.costPerUnit = money;

              // Set the percentage to be 100%.
              lineItem.unitsBought = 100;

              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);
              }
        }
        /// <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.v201208.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};

              PostalCodeLocation postalCodeLocation = new PostalCodeLocation();
              postalCodeLocation.id = 9000093;
              postalCodeLocation.postalCode = "B3P";

              // 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.v201208.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.v201208.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);
              }
        }
        /// <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.v201208.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);
              }
        }