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