parse xml / Fill Properties /Read xml

 Fill Properties /Read xml 

Ticket 93818: [Holz Pichler] 3.3. Item variants – “range value” attributes.

ExtendedOrderXmlParser

public override IBasketLine ParseBasketLine(XElement element)
{
    var result = ParseEntity<IBasketLine>(element, (fields, basketLine) =>
    {
        FillSalesLineProperties(fields, basketLine);
 
 
        var rangeValueList = ParseRangeValueLineList(element.Element("RangeValues")) as List<RangeValue>; ;
        ((BasketLine)basketLine).RangeValueList = rangeValueList;
 
 
        basketLine.AvailableSalesAgreementLines = ParseAvailableSalesAgreementLines(element);
        if (basketLine.IsSupplementary)
        {
            basketLine.StoredProductTitle = basketLine.ProductTitle;
            basketLine.StoredVariantTitle = basketLine.Title;
        }
    });
    if (result != null)
        RenameFields(result.Fields, "UnitOfMeasureDescription_""UOMDescription_");
 
    return result;
}
 
protected virtual IList<RangeValue> ParseRangeValueLineList(XElement rangeValueElement)
{
    return ParseList<RangeValue>(rangeValueElement, "RangeValue", ParseRangeValueLine);
}
 
protected virtual RangeValue ParseRangeValueLine(XElement element)
{
    return ParseEntity<RangeValue>(element, (fields, result) =>
    {
        result.Id = fields.ReadString("Id");
        result.Name = fields.ReadString("Name");
        result.Value = fields.ReadDecimal("Value").GetValueOrDefault();
        result.SortNumber = fields.ReadInt("SortNumber").GetValueOrDefault();
    });
}


Ticket 96724: [Kavo] 3.16 SEARCH – OEM# AND COMPETITOR# FIELDS

sample Respons from Get Product for OEMReferanceNo (String List)
<field name="ConfiguratorModel" value="" />
      <field name="ModifiedDate" value="21-01-21 10:17:00" />
      <Attachments></Attachments>
      <RelatedProducts></RelatedProducts>
      <OemReferenceNumbers>
        <ReferenceNumber>1741084A00</ReferenceNumber>
        <ReferenceNumber>1741084A11</ReferenceNumber>
        <ReferenceNumber>2101000Q0E</ReferenceNumber>
        <ReferenceNumber>2101000QAE</ReferenceNumber>
        <ReferenceNumber>2101000QAS</ReferenceNumber>
        <ReferenceNumber>21010BN700</ReferenceNumber>
        <ReferenceNumber>7701473327</ReferenceNumber>
        <ReferenceNumber>7701475995</ReferenceNumber>
        <ReferenceNumber>7701476496</ReferenceNumber>
        <ReferenceNumber>7701774435</ReferenceNumber>
        <ReferenceNumber>8200035221</ReferenceNumber>
        <ReferenceNumber>8200438425</ReferenceNumber>
        <ReferenceNumber>7701478031</ReferenceNumber>
        <ReferenceNumber>21310010190</ReferenceNumber>
      </OemReferenceNumbers>
    </Product>
  </Result>

How to parse XML List of String

public override IProduct ParseProduct(XElement element)
        {
            var product = base.ParseProduct(element);

            //Competitors
            ((Product)product).Competitors = ParseCompetitors(element.Element("Competitors"));

 
            //OemReferenceNumbers
            ((Product)product).OemReferenceNumbers = ParseOemReferenceNumbers(element.Element("OemReferenceNumbers"));
            
            return product;
        } 


protected virtual List<string> ParseOemReferenceNumbers(XElement element)
        {
            var oemReferenceNumbers = new List<string>();
            if (element == null)
                return oemReferenceNumbers;
            
            foreach (var child in element.Elements())
            { 
                oemReferenceNumbers.Add(child.Value);
            }  
            return oemReferenceNumbers;
        }


sample Respons from Get Product for Competotors (object)
<field name="Barcodes" value="" />
      <field name="ConfiguratorModel" value="" />
      <field name="ModifiedDate" value="21-01-21 12:18:00" />
      <Attachments></Attachments>
      <RelatedProducts></RelatedProducts>
      <Competitors>
        <Competitor id="182" name="Ashika" reference="95-03-393" />
        <Competitor id="227" name="Girling" reference="1207105" />
        <Competitor id="49" name="Japanparts" reference="FR-320" />
        <Competitor id="230" name="Japko" reference="95393" />
        <Competitor id="23" name="Nipparts" reference="J2503019" />
        <Competitor id="136" name="NPS" reference="M250A24" />
        <Competitor id="129" name="TRW" reference="PNK105" />
        <Competitor id="1579" name="Seiken" reference="110-20472" />
      </Competitors> </Product>

protected virtual List<CompetitorParseCompetitors(XElement element)
        {
            var competitors = new List<Competitor>();
            if (element == null)
                return competitors;
            
            foreach (var child in element.Elements())
            {                
                var competitor = ParseCompetitor(child);
                if (!competitors.Any(item => item.Equals(competitor)))
                    competitors.Add(competitor);
            }
            return competitors;
        }


/// Ticket 96724: [Kavo] 3.16 SEARCH – OEM# AND COMPETITOR# FIELDS 
        /// <summary>
        /// Parse the competitor.
        /// </summary>
        /// <param name="element">The XML element.</param>
        /// <returns></returns>
        protected virtual Competitor ParseCompetitor(XElement element)
        {
            var competitor = ObjectFactory.Create<Competitor>();
            competitor.Id = element.Attribute("id")?.Value;
            competitor.Name = element.Attribute("name")?.Value;
            competitor.Reference = element.Attribute("reference")?.Value;
            return competitor;
        }


// Top media 

<Response>
  <Version>9.3.5.1</Version>
  <Result>
    <ProductType>
      <field name = "Code" value="Laptop" />
      <field name = "Name" value="Laptop" />
    </ProductType>
    <ProductType>
      <field name = "Code" value="Mobile" />
      <field name = "Name" value="Mobile" />
    </ProductType> 
    <TotalTimeElapsed>1.473</TotalTimeElapsed>
  </Result>
</Response>


public class ExtendedCommonProvider
/// Ticket 100006: [Topmedia] 3.1. Search – Product Finder        
        public virtual IList<IProductType> GetProductTypes()
        {
            var request = new List<XElement>(); 
            var result = ExecuteRequest("GetProductTypes", request); 
             var productTypes = result.Elements("ProductType").Select(e => ((ExtendedCommonXmlParser)Parser).ParseProductType(e)).ToList();
             
            foreach (var item in productTypes)
            {
                item.WebsiteId = Context.WebsiteId;
            }
            return productTypes;
        }
public class ExtendedCommonXmlParser : CommonXmlParser
   {
       /// Ticket 100006: [Topmedia] 3.1. Search – Product Finder      
       public virtual IProductType ParseProductType(XElement element)
       {
           return ParseEntity<IProductType>(element, (fields, result) =>
           {
               result.Code = fields.ReadString("Code");
               result.Name = fields.ReadString("Name");
           });                      
 
       } 
   }