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<Competitor> ParseCompetitors(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"); }); } }