private ReadOnlyCollection <Product> ConvertProductsXmlToProducts(string productsXml) { List <Product> products = new List <Product>(); XDocument xmlDocument = XDocument.Parse(productsXml); if (xmlDocument != null) { string languageId = this.context.LanguageId; var elements = xmlDocument.Root.Elements(); foreach (var element in elements) { Product product = new Product(); product.RecordId = Convert.ToInt64(TransactionServiceClient.GetAttributeValue(element, "RecordId")); product.ItemId = TransactionServiceClient.GetAttributeValue(element, "ItemId"); product.ProductNumber = product.ItemId; // Set the IsRemote flag to true for each of the retrieved products. product.IsRemote = true; string isKit = TransactionServiceClient.GetAttributeValue(element, "IsKit"); if (!string.IsNullOrWhiteSpace(isKit)) { product.IsKit = Convert.ToBoolean(isKit); } string isMasterProduct = TransactionServiceClient.GetAttributeValue(element, "IsMasterProduct"); if (!string.IsNullOrWhiteSpace(isMasterProduct)) { product.IsMasterProduct = Convert.ToBoolean(isMasterProduct); } string price = TransactionServiceClient.GetAttributeValue(element, "Price"); if (!string.IsNullOrWhiteSpace(price)) { product.Price = Convert.ToDecimal(price); } int i = 0; var attributes = element.Elements("AttributeValues").Elements(); foreach (var attribute in attributes) { long attributeId = Convert.ToInt64(TransactionServiceClient.GetAttributeValue(attribute, "Attribute")); string textValue = TransactionServiceClient.GetAttributeValue(attribute, "TextValue"); ////string unitValue = TransactionServiceClient.GetAttributeValue(attribute, "Unit"); var getChannelProductAttributeByIdDataRequest = new GetChannelProductAttributeByIdDataRequest(attributeId, new ColumnSet()); var productAttribute = this.context.Runtime.Execute <SingleEntityDataServiceResponse <AttributeProduct> >(getChannelProductAttributeByIdDataRequest, this.context).Entity; if (productAttribute == null) { continue; } ProductProperty property = new ProductProperty(); property.AttributeValueId = productAttribute.AttributeValueRecordId; property.RecordId = productAttribute.RecordId; property.PropertyType = (ProductPropertyType)productAttribute.DataType; property.KeyName = productAttribute.KeyName; property.Value = textValue; ////property.UnitText = unitValue; // Create the default product schema. product.IndexedProductSchema.Add(productAttribute.KeyName, i++); product.SetProperty(productAttribute.KeyName, property); if (!product.IndexedProductProperties.ContainsKey(languageId)) { product.IndexedProductProperties[languageId] = new ProductPropertyDictionary(); } product.IndexedProductProperties[languageId].Add(productAttribute.KeyName, property); } ProductBuilder.CompleteProductInstantiation(product); products.Add(product); } } return(products.AsReadOnly()); }