Hallo Zusammen,
nutzt zufällig jemand Synesty um die Shopware 6 Store API (nicht Admin API) anzusteuern?
Ich würde mir gerne Produkt-Feeds für diverse Drittsysteme erstellen und will dazu über Synesty gehen, statt einem Shopware Plugin.
Viele Grüße
Ramin
Hallo Ramin,
viel kann ich leider nicht beisteuern.
Wir haben uns die Store API schon angesehen und ein wenig ausprobiert. Uns ist aber kein sinnvoller use case eingefallen, den man nicht mit den vorhandenen Steps (bzw. der Admin API) abdecken könnte. Wir haben das Thema deshalb nicht weiter verfolgt.
Die Store API sollte relativ leicht über API Call oder SpreadsheetUrlDownload Steps nutzbar sein. Du benötigst nur den API-Schlüssel für den entsprechenden Sales Channel und kannst diesen im Feld „requestHeaders“ (sw-access-key
) angegeben.
Der request body für eine einfache Produktsuche sieht so aus:
Es gibt noch einige, weitere Möglichkeiten die Filterung/Suche zu verfeinern (siehe
Fetch a list of products | Store API)
Beispiel: Produktabruf mit Filterung nach tag-Name:
Falls du Fragen oder Anregungen zur SW Store API hast, kannst du uns gerne schreiben.
VG Torsten
Hallo Thorsten,
ja, den API Abruf mit Filterung hab ich bereits hinbekommen. Jetzt geht es wieder um das Parsing der Antwort, bei der ich etwas hänge.
Das automatische Parsing kann ich hier leider nicht verwenden, da es eine Paginierung gibt. Habe dann versucht mit Hilfe des Handbuches APICall (API-Connector-Tools) | Synesty | No Code - Low Code Integration & Automation etwas zusammen zu bauen, aber da kommen wieder meine Parsing Wissenslücken hervor.
Ich bräuchte hier ein Parsing Template, dass erstmal die Paginierung vornehmen kann. Über die Store API kommen immer 100 Produkte zurück mit einer Page Info.
Im zweiten Step müsste ich dann die einzelnen Felder mappen.
Viele Grüße
Ramin
Ich bin jetzt schon mal einen Schritt weiter gekommen, in dem ich mein Parsing Template für das Abrufen der Felder vervollständigt habe. Bei der Pagination komme ich aber nicht weiter. Im Handbuch und in allen anderen Anwendungsfällen die ich bisher hatte, erfolgt die Pagination über die URL des API Calls.
Bei der Shopware Store API muss man allerdings die Pagination in den Body packen und blättert darüber weiter.
Die Frage ist jetzt aber, was baue ich da an der Stelle ein, damit der API Call immer weiter ausgeführt wird, bis man am Ende der Pages kommt?
Viele Grüße
Ramin
Hallo Ramin,
die pagination
Funktion wird an der Stelle nicht funktionieren, da ein URL Parameter für die Seite verwendet wird.
Du könntest mit Hilfe der callcounter
Variable die Seite im requestBody pro Call hochzählen.
Ich habe es nicht mit der Shopware Store API getestet, aber schon mal in einem anderen Projekt ähnlich verwendet.
Im parsingTemplate kannst du, solange ein element vorhanden ist (numRows > 0
), als nextUrl immer wieder gleiche url aufrufen (z.B. mit initialUrl
).
Parsing Code:
<#assign numRows = 0 />
<#assign row = target.addRow()>
<#list json['elements'] as j >
<#assign row = target.addRow()>
<#-- dein parsing code -->
<#assign numRows = numRows + 1 />
</#list>
<#if (numRows > 0 ) >
${nextUrl( initialUrl )}
</#if>
VG Torsten
Mega!!! Funktioniert. Danke Dir!
Viele Grüße
Ramin
1 Like
Hallo Thorsten,
benötige doch nochmal Hilfe. Bei meinen Tests hab ich das Limit des API-Calls über den Step auf 5 begrenzt. Wenn ich den Flow aber komplett durchlaufen lassen will, bekomme ich immer beim 8. API Call folgenden Fehler und ich checke nicht so ganz woran es liegt.
Das in der Fehlermeldung genannten CustomField custom_master_data_list_price_ga
ist eventuell nicht bei jedem Produkt ausgefüllt und wird entsprechend nicht ausgeliefert. Kann es sein, dass sich der Flow daran stört, weil im Parsing Tempalte das Feld genannt wird, aber nicht zurückkomt?
Viele Grüße
Ramin
Hallo Ramin,
entschuldige die späte Rückmeldung.
Es wird vermutlich daran liegen, dass das customField nicht bei allen Produkten vorhanden ist.
Du kannst im parsingTemplate mit ?hasContent
prüfen, ob das Feld vorhanden ist. Der Teil im parsingTemplate könnte in etwas so aussehen:
<#if r['customFields']['custom_master_data_list_price_ga']?hasContent>
${row.addCol("custom_master_data_list_price_ga", r['customFields']['custom_master_data_list_price_ga'])}
<#else>
${row.addCol("custom_master_data_list_price_ga", "")}
</#if>
VG Torsten