De grootste vraag bij E-commerce projecten; hoe krijgen we het volledige assortiment in de webshop? De oplossing is een geautomatiseerd proces dat informatie uit het WMS of ERP haalt en in Magento zet. Een productimport. Reach Digital is één van de meest ervaren en gespecialiseerde partijen in het realiseren van productimports voor Magento.
Zowel Magento 1 als Magento 2 bieden een uitgebreide API voor het realiseren van productimports (en andere koppelingen). Indien een bedrijf beschikt over interne developers, dan kunnen zij de import realiseren als uitbreiding op reeds gebruikte software. Bijvoorbeeld als Odoo, Akeneo of een maatwerk voorraadsysteem gebruikt wordt. In dat geval spelen wij een begeleidende rol in gebruik van de API. In praktijk is deze manier om Magento aan een WMS of ERP te koppelen erg efficiënt; intern is veel kennis aanwezig van de beschikbare data.
Wanneer een import via de API niet interessant is - bijvoorbeeld door verandering in ERP of WMS op korte termijn -, dan kan een import worden gerealiseerd op basis van Magento technologie. De import wordt door de developmentpartij van de webshop gerealisereerd als uitbreiding van de software waarop de webshop draait. Productinformatie wordt vanuit WMS geexporteerd als CSV bestand en via Magento standaardfunctionaliteit of met een Magento module geimporteerd. Magento 1 en Magento 2 bieden beide standaardfunctionaliteit voor het importeren van productdata(bestanden) in CSV formaat.
Geëxporteerde data is nooit één-op-één te importeren in Magento. De wijze waarop een bedrijf het warehouse management systeem of ERP gebruikt, is bepalend voor de informatie die beschikbaar is. Daarnaast bestaan er altijd de wens om op de nieuwe webshop productinformatie aan te passen of aan te passen. Dit is onmogelijk met standaard import functionaliteit. Bij Reach Digital realiseren we productimports op basis van ReachDigital\_Import. Dé industriestandaard voor het realiseren van complexe, snelle, low memory imports op het Magento platform.
ReachDigital_Import is dé industriestandaard voor het realiseren van complexe, snelle, low memory imports op het Magento platform. Het biedt developers de volgende functionaliteit:
Het verwerken van data gebeurt technisch in twee stappen. In de eerste stap wordt data geconverteerd naar een door Magento leesbaar bestand. Fieldmapping, waarbij ReachDigital_Import functies biedt voor het bewerken van bijvoorbeeld prijs, producttitel, SKU etc. In de tweede stap wordt data door de FastImporter geïmporteerd. De FastImporter bevat functionaliteit high performance imports (1500 product mutaties per seconde) mogelijk maakt. ReachDigital_Import is intern door Reach Digital ontwikkeld en hebben we open source beschikbaar gesteld. Vanuit de community zijn de afgelopen jaren verbeteringen aangedragen - en is feedback gekomen - waarmee de module continue is verbeterd. ReachDigital_Import draait via shell of crontaken, het biedt geen interface.
Downloaden kan voor zowel Magento 1 als Magento 2.
Om data periodiek te importeren, moet worden bepaald hoe de data wordt gepubliceerd. Dit is een afspraak met de dataleverancier (de leverancier van de producten, of bijvoorbeeld een partij als Icecat), of een configuratie van het gebruikte ERP, PIM of WMS systeem. Met ReachDigital\_Import hebben we de mogelijkheid om databestanden te downloaden via FTP en HTTP, naar een locatie op de server. Data kan worden aangeleverd als XLS (Microsoft Excel), XML, CSV of onbewerkte databasedump. Daarnaast is het in veel gevallen mogelijk om data op de server automatisch te converteren naar één van deze leesbare formaten. Een afbeelding of productfoto wordt vrijwel altijd aangeleverd als URL; een verwijzing naar de afbeelding op de server waarop de huidige webshop draait. Wanneer wordt gewerkt met data van een dataleverancier - bijvoorbeeld Icecat - dan worden afbeeldingen vaak door de dataleverancier via FTP geupload naar een locatie op de server. Met ReachDigital\_Import downloaden we afbeeldingen van externe locaties in een controlefolder op de server. Deze folder blijft bestaan, zodat bij een periodieke import kan worden gecontroleerd welke afbeeldingen al gedownload zijn. Afbeeldingen worden tijdens de import verwerkt op dezelfde manier wanneer ze handmatig zouden zijn toegevoegd; ze worden op de server opgeslagen in een op bestandsnaam gebaseerde mappenstructuur. Bijvoorbeeld: /media/catalog/product/t/s/tshirt-reachdigital.jpg Bij een import kunnen we meerdere afbeeldingen per product opslaan en afbeeldingen als small\_image, base\_image of thumbnail instellen. Via het Magento admin panel kunnen afbeeldingen worden uitgeschakeld. De mogelijkheid om handmatig, via het Magento admin panel, extra afbeeldingen toe te voegen blijft bestaan, zonder dat ze bij een volgende import worden verwijderd of overschreven.
Alle beschikbare productinformatie kan bij een import worden gebruikt om een categorie hiërarchie te genereren. Dit kan dus een nieuwe indelingen van producten zijn, speciaal voor de webshop. Het is ook mogelijk om bestaande categorie informatie uit het PIM, of WMS te halen en deze 1-op-1 te importeren. Voorbeeld: Categoriepad genereren uit producteigenschappen Inktcartridge HP 364XL zwart is in het oude systeem ingedeeld in de categorieen ‘inktcartridges’, ‘364XL (serie)’ en ‘HP’ . Voor iedere printer waarvoor dit product geschikt is, bestaat een categorie. Bij het product staan naast de bovenstaande, ook alle id’s van deze ‘compatible printer’ categorieën. De wens is om bezoekers twee manieren van navigeren te bieden: enerzijds op basis van cartridgenummer, de categoriestructuur is: inktcartridges > blader op inktcartridge > HP > 364XL > HP 364XL zwart, anderzijds op basis van printertype: inktcartridges > blader op printertype > HP > Deskjet > HP DeskJet 3520 > HP 364XL zwart. Voorbeeld: producten op basis van categoriepad in categorie plaatsen Twee leveranciers bieden Nikon Camera's aan. Leverancier A met het categoriepad "Camera's/Spiegelreflexcamera's/Nikon/", Leverancier B met het categoriepad "Digitale camera's/Nikon/Spiegelreflex camera/". In de webshop wordt handmatig een eigen categorie indeling gemaakt: "Camera's/SLR/". De paden van de leveranciers worden als referentie ingevuld bij de in Magento aangemaakte categorie. Zodra de import draait, wordt deze categorie gevuld met alle producten van zowel Leverancier A, als Leverancier B. Bij het realiseren van een import kunnen we overweg met meerdere bestanden. Het komt voor dat data van leveranciers, of een export uit een ERP of PIM uit meerdere bestanden bestaat. Bijvoorbeen één met categorie-informatie en een bestand met attribuut-data. In een situatie als de bovenstaande komt het voor dat het genereren van een nieuwe categorie, zoals [inktcartridges]/[merk]/[printertype]/ [merk][cartridgeserie]/[merk][productnaam] uit data wordt opgebouwd afkomstig uit verschillende tabellen. SEO is een meewegende factor in het bepalen van categoriepaden. Vaak gebeurt dit in overleg met een SEO specialist.
Om data periodiek te importeren, moet worden bepaald hoe de data wordt gepubliceerd. Dit is een afspraak met de dataleverancier (de leverancier van de producten, of bijvoorbeeld een partij als Icecat), of een configuratie van het gebruikte ERP, PIM of WMS systeem.Met ReachDigital\_Import hebben we de mogelijkheid om databestanden te downloaden via FTP en HTTP, naar een locatie op de server. Data kan worden aangeleverd als XLS (Microsoft Excel), XML, CSV of onbewerkte databasedump. Daarnaast is het in veel gevallen mogelijk om data op de server automatisch te converteren naar één van deze leesbare formaten.
Voordat data kan worden geimporteerd, wordt het gemapt (geconverteerd) naar een formaat geschikt voor Magento. Zo wordt bijvoorbeeld de kolom ‘aantal\_op\_voorraad’ gemapt naar de Magento kolom ‘qty’ of de kolom ‘product\_title’ naar de magento kolom ‘name’. Attributen waarbij verschillende waarden mogelijk zijn - bijvoorbeeld; merk - worden automatisch aangevuld wanneer er een nieuwe waarde wordt herkend. Voegt de dataleverancier dus producten toe van een nieuw merk, dan wordt deze waarde automatisch als attribuutwaarde toegevoegd. Is het attribuut zo geconfigureerd dat deze onderdeel uitmaakt van de layered navigation, dan zal dat betekenen dat de catalogus een nieuw merk heeft waarop bezoekers kunnen filteren. Gedurende het proces waarbij data wordt gemapt naar de juiste kolommen, hebben we de mogelijkheid om data te bewerken. Zo kunnen kolommen worden samengevoegd of berekeningen worden gemaakt. Bijvoorbeeld een marge optellen bij de inkoopprijs, of een artikelnummer voor de webshop genereren.
Wanneer productinformatie via een import éénmalig wordt gemigreerd van het oude systeem (oude webshop, of oud voorraadsysteem) naar Magento, dan kan na een succesvolle productimport in Magento de productinformatie hier handmatig worden bewerkt. Dit is dus ook een mogelijkheid - geen periodiek proces, maar eenmalig. Het resultaat is dan een goed gevulde Magento webshop, waarin op reguliere wijze productinformatie kan worden gewijzigd of toegevoegd. Het resultaat is dan een goed gevulde Magento webshop, waarin op reguliere wijze productinformatie kan worden gewijzigd of toegevoegd. Om - in het geval van op deze pagina beschreven periodieke imports - te voorkomen dat aanpassingen in productinformatie worden overschreven / gereset, importeren we data in Magento op adminniveau. De admin > website > storeview hiërarchie die standaard onderdeel is van Magento wordt gebruikt om dergelijke wijzigingen in content op een hoger liggend niveau te doen. We kunnen prijsinformatie op vrijwel alle mogelijke manieren bewerken bij het importeren. Het blijft het op deze manier echter ook mogelijk om op de reguliere manier catalogus prijsregels toe te passen voor het aanbieden van tijdelijke acties en promoties.
Een interessante mogelijkheid die we bij het importeren van producten in Magento bieden, is het systematisch bewerken van prijzen. We kunnen zeer uiteenlopende berekeningen realiseren, zoals bijvoorbeeld:- Verkoopprijs = inkoopprijs + merkspecifieke marge + BTW tarief - Verkoopprijs = inkoopprijs + verzendkosten (gewicht x prijs per kg) - Verkoopprijs = inkoopprijs + marge per productgroep + BTW tarief - Prijzen inclusief BTW zijn af te ronden op bijvoorbeeld € 9,99 of € 9,95.Het importeren of berekenen van staffelprijzen behoort ook tot de mogelijkheden.
Categorieën en producten die niet langer in de aangeleverde datafeed zijn opgenomen kunnen we automatisch uit de webshop verwijderen. Dit is in veel gevallen wenselijk; het voorkomt dat de database vervuild raakt met producten die niet meer worden verkocht of als vernieuwd product (ander naam, nieuwe OEM / EAN nummers) zijn toegevoegd.Het verwijderen van producten gebeurt wanneer de laatste datum waarop een product aanwezig was in de productfeed, bijvoorbeeld ouder is dan 30 dagen. Deze datum wordt bij iedere periodieke import geregistreerd. Afhankelijk van de situatie kan ook voorraad-informatie een rol spelen in de bepaling van te verwijderen producten.
Los van een productdata import kunnen we een voorraadimport realiseren. Omdat dit proces slechts één veld muteert, is het razendsnel. Tot 1500 mutaties per seconde. Het is een proces dat dus met hoge regelmaat kan draaien via een crontaak.De mogelijkheden van het ERP of warehouse management systeem (zoals Microsoft Dynamics Navision of SAP) dat in gebruik is zijn bepaald voor de manier van werken. Zo hebben sommigen van deze systemen de mogelijkheid om alleen gemuteerde voorraaden te exporteren, maar bieden andere alleen een volledig productdata export. De ReachDigital\_Import module kan hiermee overweg; het proces voor het updaten van de voorraaden blijft razendsnel.
Één van de meest voorkomende vragen bij het importeren van producten in Magento is hoe om te gaan met configurable products, grouped products, bundle products en simple products. Een nieuwe webshop is een goed moment op opnieuw na te denken over de wijze waarop producten worden samengevoegd.Bij het importeren van producten in Magento hebben we, afhankelijk van de beschikbare data, de mogelijkheid om configurable products, grouped product of bundels te genereren. Bijvoorbeeld op kleur, maat of aantal. De enige voorwaarde hiervoor is dat er een hiërarchische relatie is in de opbouw van bijvoorbeeld het artikelnummer. Dus bijvoorbeeld een situatie waarin S0914EB-04 de witte uitvoering van het product is, S0914EB-05 de zwarte en S0914EB-06 de blauwe.Wanneer er in de aangeleverde productdata een relatie tussen producten aanwezig is, dan is het ook mogelijk om gerelateerde producten, upsells of cross-sells te importeren.
Een belangrijk aandachtspunt bij grote aantallen producten met betrekking tot performance, is het genereren van indexes. Indexes zijn 'platte' databasetabellen, waardoor eenvoudigere (snellere) queries kunnen worden uitgevoerd om informatie op te halen. Een standaardfunctionaliteit van Magento.Een nadeel is dat het generen van een nieuwe indexering voor het volledige assortiment een zwaar proces is, wat veel tijd in beslag neemt. Een risico voor snel veranderende productinformatie.Om die reden bieden we een oplossing die niet de volledige catalogus indexeert, maar met een mass update action alleen indexeringen aanpast van producten die nieuw of gewijzigd zijn. Zo ontstaat ‘partial reindexing’; de indexeringen worden blijven up to date zonder volledige herindexering, waardoor minder belastend voor de server. Dit heeft positieve invloed op de performance van de webshop.
De grootte van databestanden met duizenden producten loopt snel op. Een datafeed of export van een voorraadsysteem kan honderden MB’s per feed zijn. De standaard Magento dataflow module laadt databestanden in het werkgeheugen van de server, waardoor tientallen Gigabytes aan geheugen nodig zijn om de data te verwerken. Vaak is dit niet voldoende. In zulke gevallen ontstaan memory errors (het gebrek aan beschikbaar geheugen) bij het importeren in Magento, met falende importprocessen als gevolg.Onderdeel van onze werkwijze is om die reden het automatisch opdelen van de feed in deelbestanden en het opslaan op de harde schijf van de server. Bij het importeren worden deze bestanden regel voor regel in het geheugen geladen en verwerkt. De server wordt minder belast, waardoor de webshop snel blijft. Deze oplossing is bewezen voor productimports van 500.000 producten, maar in potentie geschikt voor veel grotere aantallen.