/// <summary>
        /// Update the definition of an extra attribute for the specified product type.
        /// <example>
        ///  <code>
        /// var result = ProductTypeExtraFactory.UpdateExtra(handler : handler,  attributeInProductType :  attributeInProductType,  productTypeId :  productTypeId,  attributeFQN :  attributeFQN,  responseFields :  responseFields,  dataViewMode: dataViewMode,  expectedCode: expectedCode, successCode: successCode);
        /// var optionalCasting = ConvertClass<AttributeInProductType/>(result);
        /// return optionalCasting;
        ///  </code>
        /// </example>
        /// </summary>
        public static Mozu.Api.Contracts.ProductAdmin.AttributeInProductType UpdateExtra(ServiceClientMessageHandler handler,
                                                                                         Mozu.Api.Contracts.ProductAdmin.AttributeInProductType attributeInProductType, int productTypeId, string attributeFQN, string responseFields = null, DataViewMode dataViewMode = DataViewMode.Live,
                                                                                         HttpStatusCode expectedCode = HttpStatusCode.OK, HttpStatusCode successCode = HttpStatusCode.OK)
        {
            SetSdKparameters();
            var currentClassName  = System.Reflection.MethodInfo.GetCurrentMethod().DeclaringType.Name;
            var currentMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;

            Debug.WriteLine(currentMethodName + '.' + currentMethodName);
            var apiClient = Mozu.Api.Clients.Commerce.Catalog.Admin.Attributedefinition.Producttypes.ProductTypeExtraClient.UpdateExtraClient(
                attributeInProductType:  attributeInProductType, productTypeId:  productTypeId, attributeFQN:  attributeFQN, responseFields:  responseFields, dataViewMode: dataViewMode);

            try
            {
                apiClient.WithContext(handler.ApiContext).Execute();
            }
            catch (ApiException ex)
            {
                // Custom error handling for test cases can be placed here
                Exception customException = TestFailException.GetCustomTestException(ex, currentClassName, currentMethodName, expectedCode);
                if (customException != null)
                {
                    throw customException;
                }
                return(null);
            }
            return(ResponseMessageFactory.CheckResponseCodes(apiClient.HttpResponse.StatusCode, expectedCode, successCode)
                                         ? (apiClient.Result())
                                         : null);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="attributeFQN">Fully qualified name for an attribute.</param>
        /// <param name="productTypeId">Identifier of the product type.</param>
        /// <param name="responseFields">Filtering syntax appended to an API call to increase or decrease the amount of data returned inside a JSON object. This parameter should only be used to retrieve data. Attempting to update data using this parameter may cause data loss.</param>
        /// <param name="dataViewMode">{<see cref="Mozu.Api.DataViewMode"/>}</param>
        /// <param name="attributeInProductType">Properties of an attribute definition associated with a specific product type. When an attribute is applied to a product type, each product of that type maintains the same set of attributes.</param>
        /// <returns>
        /// <see cref="Mozu.Api.Contracts.ProductAdmin.AttributeInProductType"/>
        /// </returns>
        /// <example>
        /// <code>
        ///   var producttypeoption = new ProductTypeOption();
        ///   var attributeInProductType = await producttypeoption.UpdateOptionAsync(_dataViewMode,  attributeInProductType,  productTypeId,  attributeFQN,  responseFields);
        /// </code>
        /// </example>
        public virtual async Task <Mozu.Api.Contracts.ProductAdmin.AttributeInProductType> UpdateOptionAsync(Mozu.Api.Contracts.ProductAdmin.AttributeInProductType attributeInProductType, int productTypeId, string attributeFQN, string responseFields = null, CancellationToken ct = default(CancellationToken))
        {
            MozuClient <Mozu.Api.Contracts.ProductAdmin.AttributeInProductType> response;
            var client = Mozu.Api.Clients.Commerce.Catalog.Admin.Attributedefinition.Producttypes.ProductTypeOptionClient.UpdateOptionClient(_dataViewMode, attributeInProductType, productTypeId, attributeFQN, responseFields);

            client.WithContext(_apiContext);
            response = await client.ExecuteAsync(ct).ConfigureAwait(false);

            return(await response.ResultAsync());
        }
예제 #3
0
        public virtual Mozu.Api.Contracts.ProductAdmin.AttributeInProductType UpdateOption(Mozu.Api.Contracts.ProductAdmin.AttributeInProductType attributeInProductType, int productTypeId, string attributeFQN, string responseFields = null)
        {
            MozuClient <Mozu.Api.Contracts.ProductAdmin.AttributeInProductType> response;
            var client = Mozu.Api.Clients.Commerce.Catalog.Admin.Attributedefinition.Producttypes.ProductTypeOptionClient.UpdateOptionClient(_dataViewMode, attributeInProductType, productTypeId, attributeFQN, responseFields);

            client.WithContext(_apiContext);
            response = client.Execute();
            return(response.Result());
        }
예제 #4
0
        /// <summary>
        /// Assigns an option attribute to the product type based on the information supplied in the request.
        /// </summary>
        /// <param name="productTypeId">Identifier of the product type.</param>
        /// <param name="responseFields">Use this field to include those fields which are not included by default.</param>
        /// <param name="dataViewMode">{<see cref="Mozu.Api.DataViewMode"/>}</param>
        /// <param name="attributeInProductType">Properties of an attribute definition associated with a specific product type. When an attribute is applied to a product type, each product of that type maintains the same set of attributes.</param>
        /// <returns>
        /// <see cref="Mozu.Api.Contracts.ProductAdmin.AttributeInProductType"/>
        /// </returns>
        /// <example>
        /// <code>
        ///   var producttypeoption = new ProductTypeOption();
        ///   var attributeInProductType = await producttypeoption.AddOptionAsync(_dataViewMode,  attributeInProductType,  productTypeId,  responseFields);
        /// </code>
        /// </example>
        public virtual async Task <Mozu.Api.Contracts.ProductAdmin.AttributeInProductType> AddOptionAsync(Mozu.Api.Contracts.ProductAdmin.AttributeInProductType attributeInProductType, int productTypeId, string responseFields = null)
        {
            MozuClient <Mozu.Api.Contracts.ProductAdmin.AttributeInProductType> response;
            var client = Mozu.Api.Clients.Commerce.Catalog.Admin.Attributedefinition.Producttypes.ProductTypeOptionClient.AddOptionClient(_dataViewMode, attributeInProductType, productTypeId, responseFields);

            client.WithContext(_apiContext);
            response = await client.ExecuteAsync();

            return(await response.ResultAsync());
        }
예제 #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="productTypeId">Identifier of the product type.</param>
        /// <param name="responseFields">Filtering syntax appended to an API call to increase or decrease the amount of data returned inside a JSON object. This parameter should only be used to retrieve data. Attempting to update data using this parameter may cause data loss.</param>
        /// <param name="dataViewMode">{<see cref="Mozu.Api.DataViewMode"/>}</param>
        /// <param name="attributeInProductType">Properties of an attribute definition associated with a specific product type. When an attribute is applied to a product type, each product of that type maintains the same set of attributes.</param>
        /// <returns>
        ///  <see cref="Mozu.Api.MozuClient" />{<see cref="Mozu.Api.Contracts.ProductAdmin.AttributeInProductType"/>}
        /// </returns>
        /// <example>
        /// <code>
        ///   var mozuClient=AddProperty(dataViewMode,  attributeInProductType,  productTypeId,  responseFields);
        ///   var attributeInProductTypeClient = mozuClient.WithBaseAddress(url).Execute().Result();
        /// </code>
        /// </example>
        public static MozuClient <Mozu.Api.Contracts.ProductAdmin.AttributeInProductType> AddPropertyClient(DataViewMode dataViewMode, Mozu.Api.Contracts.ProductAdmin.AttributeInProductType attributeInProductType, int productTypeId, string responseFields = null)
        {
            var          url        = Mozu.Api.Urls.Commerce.Catalog.Admin.Attributedefinition.Producttypes.ProductTypePropertyUrl.AddPropertyUrl(productTypeId, responseFields);
            const string verb       = "POST";
            var          mozuClient = new MozuClient <Mozu.Api.Contracts.ProductAdmin.AttributeInProductType>()
                                      .WithVerb(verb).WithResourceUrl(url)
                                      .WithBody <Mozu.Api.Contracts.ProductAdmin.AttributeInProductType>(attributeInProductType).WithHeader(Headers.X_VOL_DATAVIEW_MODE, dataViewMode.ToString())
            ;

            return(mozuClient);
        }
        public void Exercise_10_2_Update_ProductTypes()
        {
            #region Add "Monogram" as an Extra
            //Create a new ProductType resource
            var producttypeResource = new Mozu.Api.Resources.Commerce.Catalog.Admin.Attributedefinition.ProductTypeResource(_apiContext);

            //Add Your Code:
            //Get product type filtered by name
            var typePurse = (producttypeResource.GetProductTypesAsync(filter: "name sw 'purse'").Result).Items[0];

            //Create an Attribute resource
            var productAttributeResource = new Mozu.Api.Resources.Commerce.Catalog.Admin.Attributedefinition.AttributeResource(_apiContext);

            //In case you've forgotten about Product Attributes:
            //http://developer.mozu.com/content/api/APIResources/commerce/commerce.catalog/commerce.catalog.admin.attributedefinition.attributes.htm

            //Add Your Code:
            //Get a monogram attribute
            var attrMonogram = productAttributeResource.GetAttributeAsync("tenant~monogram").Result;

            //Add Your Code:
            //Create new object defining new extra
            var attributeInProductTypeMonogram = new Mozu.Api.Contracts.ProductAdmin.AttributeInProductType()
            {
                AttributeDetail = attrMonogram,
                AttributeFQN    = attrMonogram.AttributeFQN,
            };

            //Test if the Extra already exists
            if (typePurse.Extras.Find(x => x.AttributeFQN == "tenant~monogram") == null)
            {
                //Add Your Code:
                //Update product type with new extra
                typePurse.Extras.Add(attributeInProductTypeMonogram);

                //Update product type
                var updatedTypeMonogram = producttypeResource.UpdateProductTypeAsync(typePurse, (int)typePurse.Id).Result;
            }
            #endregion

            #region Add "Purse-Size" as an Option
            //Add Your Code:
            //Get a purse size attribute
            var attrSize = productAttributeResource.GetAttributeAsync("tenant~purse-size").Result;

            //Add Your Code:
            //Create new object defining new option
            var attributeInProductTypePurse = new Mozu.Api.Contracts.ProductAdmin.AttributeInProductType()
            {
                AttributeDetail  = attrSize,
                AttributeFQN     = attrSize.AttributeFQN,
                VocabularyValues = new List <Mozu.Api.Contracts.ProductAdmin.AttributeVocabularyValueInProductType>(),
                Order            = 0
            };

            //Add Your Code:
            //Exclude "Alta" from sizes
            var doNotInclude = "Alta";

            //A variable needed for Option types to providea hierarchical order for each value
            var sortOrder = 0;

            foreach (var value in attrSize.VocabularyValues)
            {
                if (!doNotInclude.ToLower().Contains(value.Content.StringValue.ToLower()))
                {
                    attributeInProductTypePurse.VocabularyValues.Add(new Mozu.Api.Contracts.ProductAdmin.AttributeVocabularyValueInProductType
                    {
                        Value = value.Value,
                        VocabularyValueDetail = value,
                        Order = sortOrder++
                    });
                }
            }

            //Test if the Option already exists
            if (typePurse.Options.Find(x => x.AttributeFQN == "tenant~purse-size") == null)
            {
                //update product type with new option
                typePurse.Options.Add(attributeInProductTypePurse);

                //update product type
                var updatedTypePurse = producttypeResource.UpdateProductTypeAsync(typePurse, (int)typePurse.Id).Result;
            }
            #endregion
        }