Naar de inhoud
SyncMyShop

Shopify en SAP Business One

Shopify SAP Business One koppeling

Relaties uit SAP Business One worden bedrijven in Shopify B2B, prijslijsten en speciale prijzen worden catalogi, en magazijnen worden locaties. Orders, met het inkoopordernummer van de klant, gaan als verkooporder naar SAP. Gebouwd op jouw SAP-inrichting en jouw Shopify-plan, en daarna door ons gedraaid en bewaakt.

Wat je tussen Shopify en SAP Business One koppelt

Shopify geeft gegevens vrij via de GraphQL Admin API, SAP Business One via de Service Layer, de OData-API op poort 50000. Bij deze combinatie draait het meestal om B2B: relaties met eigen prijzen die in Shopify als bedrijf bestellen.

Stroom Richting Shopify SAP Business One
Relaties naar Shopify companyCreate, companyLocationCreate BusinessPartners
Artikelen naar Shopify productSet, varianten met sku Items
Prijzen naar Shopify catalogus met prijslijst PriceLists, SpecialPrices
Voorraad naar Shopify inventorySetQuantities per locatie ItemWarehouseInfoCollection
Orders naar SAP webhook orders/create, poNumber Orders met DocumentLines
Leveringen naar Shopify fulfillment met trackingnummer DeliveryNotes

Een B2B-order in Shopify weet via purchasingEntity voor welk bedrijf en welke locatie hij is geplaatst. Die locatie hoort bij een CardCode in SAP, en zo komt de order op de juiste relatie zonder te zoeken op e-mailadres. Hoe dit in een ERP-koppeling past staat op ERP koppeling met je webshop.

Welk systeem is leidend, per gegeven

Gegeven Leidend Richting Gedrag
Relatie, CardCode, adressen SAP naar Shopify bedrijf plus een locatie per afleveradres
Contactpersonen die inloggen Shopify blijft in Shopify de koppeling maakt geen logins aan
ItemCode, omschrijving SAP naar Shopify sku op de variant
Prijslijst en speciale prijzen SAP naar Shopify één catalogus per locatie, in de SAP-volgorde
Voorraad per magazijn SAP naar Shopify per locatie, met de verwachte waarde erbij
Order en poNumber Shopify naar SAP één keer, Shopify-ordernummer als sleutel

Wat Shopify en SAP Business One anders bewaren

Speciale prijzen tegenover catalogi

Prijzen uit SAP Business One naar Shopify-catalogi Artikel 10482 kost in prijslijst 2 van SAP 9,20 euro; relatie C10432 heeft een speciale prijs van 9,60 euro, die in SAP voorgaat. De koppeling zet de prijslijst in een catalogus voor de groep en de speciale prijs in een eigen catalogus voor de bedrijfslocatie van C10432. Die locatie krijgt alleen de eigen catalogus, omdat Shopify bij twee catalogi de laagste prijs geeft. SAP Business One Shopify B2B Prijslijst 2 groothandel SpecialPrices relatie C10432 Catalogus groothandel andere bedrijven Catalogus C10432 alleen locatie Bakker 10482: € 9,20 10482: € 9,60, gaat in SAP voor Krijgt de locatie van Bakker beide catalogi, dan rekent Shopify de laagste prijs, 9,20 euro, terwijl in SAP 9,60 euro geldt. De koppeling zet in de catalogus C10432 ook de overige prijzen uit prijslijst 2.
In SAP gaat de speciale prijs voor, in Shopify wint bij twee catalogi de laagste prijs. Elke bedrijfslocatie krijgt daarom één catalogus met de prijs die SAP zou rekenen.

Een relatie in SAP hangt aan één prijslijst (PriceListNum). Daarboven staan speciale prijzen per artikel en relatie, met perioden (DateFrom, Dateto) en per periode een staffel. Een speciale prijs gaat in SAP voor op alle andere prijzen van die relatie.

Shopify B2B werkt met catalogi. Een catalogus heeft een prijslijst met vaste prijzen per variant en hangt aan een of meer bedrijfslocaties. Heeft een locatie meer dan één catalogus, dan krijgt de koper de laagste prijs. Geef je de locatie van relatie C10432 de groothandelscatalogus van € 9,20 en een eigen catalogus met de afgesproken € 9,60, dan betaalt de klant € 9,20. De koppeling rekent daarom per locatie zelf de prijs uit zoals SAP hem zou rekenen, en geeft de locatie één catalogus: de speciale prijs waar die bestaat, en de prijslijst voor de rest.

Dat kost catalogi. 300 relaties met eigen speciale prijzen zijn 300 catalogi. Onder Plus zijn er 3 actieve catalogi; op Plus 10.000 per winkel en 25 per locatie. Een prijslijst in Shopify heeft geen begin- of einddatum, dus de koppeling zet een periodeprijs op de begindatum in de catalogus en haalt hem op de einddatum weg. Zie klantspecifieke prijzen.

Magazijnen tegenover locaties

Per artikel en magazijn geeft SAP InStock, Committed en Ordered. Een magazijn heeft een WarehouseCode van maximaal 8 tekens. Shopify heeft locaties: 10 op Basic, Grow en Advanced, 200 op Plus. Per locatie houdt Shopify zelf bij wat er aan open orders hangt (committed), en wat er te koop is heet available.

SAP en Shopify trekken dezelfde order dus allebei af, op een ander moment:

Moment SAP InStock / Committed Shopify committed Wat de koppeling als available schrijft
Order geplaatst, nog niet in SAP 20 / 0 4 20 - 0 - 4 = 16
Order in SAP 20 / 4 4 20 - 4 = 16
Geleverd in SAP, fulfillment in Shopify 16 / 0 0 16

De koppeling trekt van InStock het toegezegde aantal af en daarnaast de Shopify-orders die SAP nog niet heeft. Hij schrijft met inventorySetQuantities en geeft sinds API-versie 2026-04 bij elke regel changeFromQuantity mee: de waarde die hij verwacht. Is de voorraad in Shopify intussen veranderd, door een order of een correctie in de winkel, dan weigert Shopify de wijziging en leest de koppeling eerst opnieuw. Zie welke voorraad toon je in je webshop.

Ordernummers en het inkoopordernummer

Een Shopify-order heeft een naam als #1042. Een B2B-order heeft daarnaast het poNumber van de koper. In SAP is NumAtCard het veld waarmee de klant de order herkent, en dat staat op pakbon en factuur. Bij een B2B-order gaat daar het poNumber in. Het Shopify-ordernummer gaat in een eigen veld (U_ShopifyOrder), en daarop zoekt de koppeling voordat hij een order aanmaakt. Een nieuw eigen veld is in de Service Layer pas bereikbaar na een herstart van de Service Layer; die plannen we in bij de inrichting.

De technische werkelijkheid van deze combinatie

Onderwerp Shopify SAP Business One, Service Layer
Limiet herstel van 100 punten per seconde, 200 op Advanced, 1.000 op Plus geen gedocumenteerd; de grens is je server
Boven de grens 200 OK met fout THROTTLED trage antwoorden
Per verzoek invoerlijsten tot 250 items 20 records per pagina, aan te passen
Webhooks 8 nieuwe pogingen in 4 uur, daarna opgeheven vanaf FP 2602: 3 pogingen, 2 seconden ertussen
Toegang app met access token en scopes sessie, verloopt na 30 minuten zonder aanroep

Nagelezen op 3 oktober 2026 in de documentatie van Shopify en de handleiding Working with SAP Business One Service Layer.

Voorraad doorgerekend. 4.000 varianten op 3 locaties zijn 12.000 voorraadregels. inventorySetQuantities neemt 250 regels per aanroep: 12.000 / 250 = 48 aanroepen. Uit SAP is het voorraadoverzicht per artikel te lezen met $select op ItemCode en ItemWarehouseInfoCollection: 4.000 artikelen bij 500 per pagina zijn 8 aanroepen. Na de eerste ronde gaan alleen gewijzigde regels mee. Je eigen aantallen reken je door met doorvoer berekenen.

Throttling ziet er anders uit. Een vertraagd verzoek aan Shopify geeft geen 429 maar 200 OK met de fout THROTTLED in het antwoord. Een koppeling die alleen op de statuscode let, ziet dat als gelukt. De koppeling leest de fout en het veld throttleStatus en wacht tot er weer punten zijn. Meer in Shopify API-limieten.

Webhooks aan twee kanten. Shopify probeert een webhook 8 keer in 4 uur en heft het abonnement daarna op. SAP probeert standaard 3 keer met 2 seconden ertussen en gooit een bericht na 24 uur weg. Aan beide kanten draait daarom een controleronde op de wijzigingsdatum, zodat een gemiste melding de volgende ronde alsnog binnenkomt.

Wat een standaardkoppeling hier niet doet

Apps in de Shopify App Store die SAP Business One koppelen, beschrijven wat ze doen. Bij een van die apps stond:

  • Artikelen en artikelgroepen, één kant op. Items worden producten en artikelgroepen categorieën, van SAP naar Shopify.
  • Geen orders, prijzen of voorraad per locatie in de beschrijving van de app.
  • SAP Business One 10.0 op HANA als voorwaarde, met de Service Layer ingericht door je SAP-partner.

Een gebouwde koppeling schrijft orders met inkoopordernummer naar SAP, rekent speciale prijzen per locatie om naar catalogi en houdt de voorraad per magazijn gelijk.

Als het misgaat

Wat er misgaat Wat de koppeling doet Wat je ziet
Shopify antwoordt THROTTLED wachten op punten, verzoek herhalen niets
changeFromQuantity klopt niet meer voorraad opnieuw lezen, dan schrijven een regel in het logboek
SAP-sessie verlopen, 401 opnieuw inloggen, aanroep herhalen niets
Bedrijfslocatie zonder CardCode de order wacht, andere orders gaan door de order en het bedrijf
Catalogus vol, 25 per locatie geen nieuwe catalogus, prijs niet gezet de locatie en de prijzen
Webhook-abonnement opgeheven opnieuw aangemaakt, gemiste orders opgehaald een regel in het logboek

Een order die blijft falen wordt met de oorspronkelijke inhoud bewaard en gaat opnieuw mee zodra de oorzaak is opgelost. Voor livegang draait de koppeling als dry run: per bedrijfslocatie welke catalogus en welke prijzen er in Shopify zouden komen, en per order welke relatie en regels er in SAP zouden ontstaan, zonder iets te schrijven.

Wij hosten en bewaken de koppeling en passen hem aan als Shopify een nieuwe API-versie uitbrengt of SAP een feature pack. De systeemkant staat op SAP Business One koppeling, de platformkant op Shopify koppeling, en alle stromen op koppelingen. Verwante combinaties: WooCommerce SAP Business One koppeling en Magento SAP Business One koppeling. Vertel welk Shopify-plan en welke SAP-versie je hebt.

Veelgestelde vragen

Heb ik Shopify Plus nodig?

Voor B2B niet: bedrijven, catalogi, staffelprijzen en inkoopordernummers zitten in Basic, Grow, Advanced en Plus. Onder Plus zijn er 3 actieve catalogi, en een catalogus direct aan een bedrijfslocatie hangen kan alleen op Plus. Heb je in SAP speciale prijzen voor tientallen relaties, dan is Plus nodig, met tot 25 catalogi per locatie en 10.000 per winkel.

Welke SAP Business One-versie heb ik nodig?

Een versie met de Service Layer: op SAP HANA, of op Microsoft SQL Server vanaf 10.0 PL01. Webhooks uit SAP vragen 10.0 FP 2602. Op een oudere versie haalt de koppeling wijzigingen in artikelen en voorraad op met een filter op de wijzigingsdatum.

Hoe worden SAP-magazijnen locaties in Shopify?

Elk magazijn dat online mag verkopen wordt een locatie, met de WarehouseCode als sleutel. Shopify heeft 10 locaties op Basic, Grow en Advanced en 200 op Plus. Magazijnen die niet online verkopen, zoals een showroom, laat de koppeling weg of telt hij op bij een andere locatie.

Wat gebeurt er met een speciale prijs met een einddatum?

Een prijslijst in Shopify heeft geen begin- of einddatum. De koppeling zet de speciale prijs op de begindatum uit SAP in de catalogus en haalt hem op de einddatum weg, waarna de prijs uit de gewone prijslijst weer geldt. Je ziet in het logboek welke prijzen op welke dag zijn gewijzigd.

Gaat het inkoopordernummer van de klant mee naar SAP?

Ja. Een B2B-order in Shopify heeft een poNumber. Dat gaat naar NumAtCard, het referentieveld van de klant op de SAP-order, zodat het op de pakbon en factuur staat. Het Shopify-ordernummer bewaart de koppeling in een eigen veld, bijvoorbeeld U_ShopifyOrder, en gebruikt het als sleutel tegen dubbele orders.

Kunnen staffelprijzen uit SAP naar Shopify?

Ja. Een speciale prijs in SAP kan per periode een staffel op aantal hebben. In Shopify worden dat prijsbreuken op aantal in de prijslijst van de catalogus, en die zitten in alle vier de plannen met B2B. Zie staffelprijzen.

Vertel wat je nodig hebt

Vertel welke systemen je gebruikt en wat je wilt verbeteren. Je krijgt binnen één werkdag een persoonlijk antwoord. We helpen je de werkzaamheden helder te krijgen en spreken de prijs en planning af voordat je iets toezegt.

  • Je weet de prijs en de doorlooptijd voordat je iets toezegt
  • Wij zoeken uit welke koppeling het werk uit handen neemt
  • Wij verzorgen de bouw, hosting, bewaking en het onderhoud
  • Je team krijgt minder overtypwerk en minder uitzoekwerk

Leveranciers, producten, orders per dag, een ruwe schatting is prima.

Of mail direct: carsten@syncmyshop.com