/// <summary>
        /// Creates a Selling Manager product. Sellers use Selling Manager products to store SYI forms for use
        /// as listing templates.
        /// </summary>
        ///
        /// <param name="SellingManagerProductDetails">
        /// Contains product information that the seller has recorded, such as a product
        /// description and inventory and restocking details.
        /// </param>
        ///
        /// <param name="FolderID">
        /// Unique identifier of the folder. This ID is created when the folder is added and is returned by the
        /// <b>AddSellingManagerInventoryFolder</b> call.
        /// </param>
        ///
        /// <param name="SellingManagerProductSpecifics">
        /// Specifies an eBay category associated with the product,
        /// defines Item Specifics that are relevant to the product,
        /// and defines variations available for the product
        /// (which may be used to create mult-variation listings).
        /// </param>
        ///
        public SellingManagerProductDetailsType AddSellingManagerProduct(SellingManagerProductDetailsType SellingManagerProductDetails, long FolderID, SellingManagerProductSpecificsType SellingManagerProductSpecifics)
        {
            this.SellingManagerProductDetails = SellingManagerProductDetails;
            this.FolderID = FolderID;
            this.SellingManagerProductSpecifics = SellingManagerProductSpecifics;

            Execute();
            return(ApiResponse.SellingManagerProductDetails);
        }
		/// <summary>
		/// Creates a Selling Manager product. Sellers use Selling Manager products to store SYI forms for use
		/// as listing templates.
		/// </summary>
		/// 
		/// <param name="SellingManagerProductDetails">
		/// Contains product information that the seller has recorded, such as a product
		/// description and inventory and restocking details.
		/// </param>
		///
		/// <param name="FolderID">
		/// Unique identifier of the folder. This ID is created when the folder is added and is returned by the
		/// <b>AddSellingManagerInventoryFolder</b> call.
		/// </param>
		///
		/// <param name="SellingManagerProductSpecifics">
		/// Specifies an eBay category associated with the product,
		/// defines Item Specifics that are relevant to the product,
		/// and defines variations available for the product
		/// (which may be used to create mult-variation listings).
		/// </param>
		///
		public SellingManagerProductDetailsType AddSellingManagerProduct(SellingManagerProductDetailsType SellingManagerProductDetails, long FolderID, SellingManagerProductSpecificsType SellingManagerProductSpecifics)
		{
			this.SellingManagerProductDetails = SellingManagerProductDetails;
			this.FolderID = FolderID;
			this.SellingManagerProductSpecifics = SellingManagerProductSpecifics;

			Execute();
			return ApiResponse.SellingManagerProductDetails;
		}
		/// <summary>
		/// Revises a Selling Manager product.
		/// 
		/// This call is subject to change without notice; the
		/// deprecation process is inapplicable to this call.
		/// </summary>
		/// 
		/// <param name="SellingManagerProductDetails">
		/// The details of the product that is being revised.
		/// </param>
		///
		/// <param name="SellingManagerFolderDetails">
		/// The details of the folder for this product.
		/// </param>
		///
		/// <param name="DeletedFieldList">
		/// Specifies the name of a field to remove from a Selling Manager product.
		/// The request can contain zero, one, or many instances of DeletedField (one for each field to be removed).
		/// DeletedField accepts the following path names, which remove the corresponding fields:
		/// SellingManagerProductDetails.CustomLabel
		/// SellingManagerProductDetails.QuantityAvailable
		/// SellingManagerProductDetails.UnitCost
		/// These values are case-sensitive. Use values that match the case of the schema element names.
		/// </param>
		///
		/// <param name="SellingManagerProductSpecifics">
		/// Specifies an eBay category associated with the product,
		/// defines Item Specifics that are relevant to the product,
		/// and defines variations available for the product
		/// (which may be used to create mult-variation listings).
		/// </param>
		///
		public SellingManagerProductDetailsType ReviseSellingManagerProduct(SellingManagerProductDetailsType SellingManagerProductDetails, SellingManagerFolderDetailsType SellingManagerFolderDetails, StringCollection DeletedFieldList, SellingManagerProductSpecificsType SellingManagerProductSpecifics)
		{
			this.SellingManagerProductDetails = SellingManagerProductDetails;
			this.SellingManagerFolderDetails = SellingManagerFolderDetails;
			this.DeletedFieldList = DeletedFieldList;
			this.SellingManagerProductSpecifics = SellingManagerProductSpecifics;

			Execute();
			return ApiResponse.SellingManagerProductDetails;
		}
        /// <summary>
        /// Revises a Selling Manager Product.
        ///
        /// This call is subject to change without notice; the
        /// deprecation process is inapplicable to this call. The user must have a Selling Manager Pro subscription to use this call.
        /// </summary>
        ///
        /// <param name="SellingManagerProductDetails">
        /// The details of the product that is being revised.
        /// </param>
        ///
        /// <param name="SellingManagerFolderDetails">
        /// The details of the folder for this product.
        /// </param>
        ///
        /// <param name="DeletedFieldList">
        /// Specifies the name of a field to remove from a Selling Manager product.
        /// The request can contain zero, one, or many instances of DeletedField (one for each field to be removed).
        /// DeletedField accepts the following path names, which remove the corresponding fields:
        /// SellingManagerProductDetails.CustomLabel
        /// SellingManagerProductDetails.QuantityAvailable
        /// SellingManagerProductDetails.UnitCost
        /// These values are case-sensitive. Use values that match the case of the schema element names.
        /// </param>
        ///
        /// <param name="SellingManagerProductSpecifics">
        /// Specifies an eBay category associated with the product,
        /// defines Item Specifics that are relevant to the product,
        /// and defines variations available for the product
        /// (which may be used to create multi-variation listings).
        /// </param>
        ///
        public SellingManagerProductDetailsType ReviseSellingManagerProduct(SellingManagerProductDetailsType SellingManagerProductDetails, SellingManagerFolderDetailsType SellingManagerFolderDetails, List <string> DeletedFieldList, SellingManagerProductSpecificsType SellingManagerProductSpecifics)
        {
            this.SellingManagerProductDetails   = SellingManagerProductDetails;
            this.SellingManagerFolderDetails    = SellingManagerFolderDetails;
            this.DeletedFieldList               = DeletedFieldList;
            this.SellingManagerProductSpecifics = SellingManagerProductSpecifics;

            Execute();
            return(ApiResponse.SellingManagerProductDetails);
        }
		public void ReviseSellingManagerProduct()
		{
			Assert.IsTrue(TestData.ProductId!=long.MinValue);
			ReviseSellingManagerProductCall api = new ReviseSellingManagerProductCall(apiContext);
			SellingManagerProductDetailsType sellingManagerProductDetails =	new SellingManagerProductDetailsType();
			sellingManagerProductDetails.ProductID=TestData.ProductId;
			sellingManagerProductDetails.ProductName="Revise product by selling manager call";
			api.SellingManagerProductDetails=sellingManagerProductDetails; 
			api.Execute();
			//check whether the call is success.
			Assert.IsTrue(api.ApiResponse.Ack==AckCodeType.Success || api.ApiResponse.Ack==AckCodeType.Warning,"do not success!");
			Assert.IsNotNull(api.SellingManagerProductDetails);
		}
        public void ReviseSellingManagerProduct()
        {
            Assert.IsTrue(TestData.ProductId != long.MinValue);
            ReviseSellingManagerProductCall  api = new ReviseSellingManagerProductCall(apiContext);
            SellingManagerProductDetailsType sellingManagerProductDetails = new SellingManagerProductDetailsType();

            sellingManagerProductDetails.ProductID   = TestData.ProductId;
            sellingManagerProductDetails.ProductName = "Revise product by selling manager call";
            api.SellingManagerProductDetails         = sellingManagerProductDetails;
            api.Execute();
            //check whether the call is success.
            Assert.IsTrue(api.ApiResponse.Ack == AckCodeType.Success || api.ApiResponse.Ack == AckCodeType.Warning, "do not success!");
            Assert.IsNotNull(api.SellingManagerProductDetails);
        }
 public void AddSellingManagerProduct()
 {
     Assert.IsTrue(TestData.Folder_id1!=long.MinValue);
     AddSellingManagerProductCall api = new AddSellingManagerProductCall(apiContext);
     SellingManagerProductDetailsType details = new SellingManagerProductDetailsType();
     details.ProductName="Product for test";
     details.QuantityAvailable=10;
     api.SellingManagerProductDetails=details;
     api.FolderID=TestData.Folder_id1;
     api.Execute();
     //check whether the call is success.
     Assert.IsTrue(api.ApiResponse.Ack==AckCodeType.Success || api.ApiResponse.Ack==AckCodeType.Warning,"fail!");
     Assert.IsTrue(10==api.SellingManagerProductDetails.QuantityAvailable);
     Assert.IsTrue("Product for test".Equals(api.SellingManagerProductDetails.ProductName));
     long productId = api.SellingManagerProductDetailsReturn.ProductID;
     Assert.IsTrue(productId != 0L);
     TestData.ProductId = productId;
 }
        public void AddSellingManagerProduct()
        {
            Assert.IsTrue(TestData.Folder_id1 != long.MinValue);
            AddSellingManagerProductCall     api     = new AddSellingManagerProductCall(apiContext);
            SellingManagerProductDetailsType details = new SellingManagerProductDetailsType();

            details.ProductName              = "Product for test";
            details.QuantityAvailable        = 10;
            api.SellingManagerProductDetails = details;
            api.FolderID = TestData.Folder_id1;
            api.Execute();
            //check whether the call is success.
            Assert.IsTrue(api.ApiResponse.Ack == AckCodeType.Success || api.ApiResponse.Ack == AckCodeType.Warning, "fail!");
            Assert.IsTrue(10 == api.SellingManagerProductDetails.QuantityAvailable);
            Assert.IsTrue("Product for test".Equals(api.SellingManagerProductDetails.ProductName));
            long productId = api.SellingManagerProductDetailsReturn.ProductID;

            Assert.IsTrue(productId != 0L);
            TestData.ProductId = productId;
        }