Gelöst Paginierung funktioniert nicht richtig

  • Wenn Ihr uns das erste Mal besucht, lest euch bitte zuerst die Foren-Regeln durch.
9. Mai 2019
6
2
#1
Hallo,
wir entwickeln aktuell einen eigenen Connector um die Legacy Daten eines Kunden mit JTL zu integrieren. Den Connector habe ich prinzipiell von dem Wordpress / WooCommerce Connector abgeleitet (ein Stand vom GIT Server, der vielleicht 8 Wochen alt ist). Das ist zunächst ein reines PULL Model, sprich die Produkte werden nur nach JTL importiert.
Das Ganze funktioniert auch grundsätzlich - Kategorien und Produkte werden geladen. Allerdings scheitere ich an der Paginierung. Der Abgleich Code aus der WaWi ruft stets nur mit Limit =50 auf, setzt aber nie den Offset hoch. Es kommt dann die Meldung, dass unser Connector "immer wieder die gleichen Daten sendet".
Im Code gibt es ja noch eine Klasse mit der eine Checksum berechnet wird, soweit ich das sehen kann wird diese hier aber nicht genutzt. Welche Magie wurde hier vergessen ? Was braucht es, damit der Offset hochgesetzt wird ?

Gruss

Carsten Harnisch
 
Zuletzt von einem Moderator bearbeitet:

Immanuel

Moderator
Mitarbeiter
24. August 2016
332
50
#2
Hallo Carsten,

der Offset Parameter existiert zwar, wird aber nicht genutzt. Der Connector muss daher den aktuellen Stand selbst bestimmen. Dafür können die Mappings/Linkings (die nach jedem erfogreichen Pull in die Wawi im Endpoint erstellt werden) hinzugezogen werden.
 
9. Mai 2019
6
2
#3
Hallo Immanuel,
ich musste die Sache eine Zeit ruhen lassen und habe mich jetzt wieder damit beschäftigt. Ich merke mir nun den Status (sprich den Offset) in der Session. Das funktioniert auch ausserhalb der Abgleichs wenn ich mit dem Testtool arbeite.
Aus der JTL heraus ist aber weiterhin nicht funktionell. Ich habe testweise 143 Artikel im "Shop". Die Page-Size steht auf 100. Der Connector liefert dann 2mal Daten - einen Block mit 100 und dann einen Block mit 43 Sätze. Final dann keine weiteren Sätze.

Beim Abruf durch die JTL funktioniert das NUR wenn ich den Shop zurücksetze und dann einen Vollabgleich starte. Dann erfolgen zumindest 2 Abrufe.
Wenn ich aber danach den Abgleich erneut starte bricht der Abgleich nach dem ersten Call ab - mit der Meldung, dass der Connector "nicht alle Artikel gesendet hätte" ? Letztlich findet ein 2. Call überhaupt nicht statt. Sprich die Ganze Pagierung funktioniert nicht wirklich.
Hier frage ich wie der Abgleich funktionieren soll, wenn dann später in der Produktion x tausend Artikel übertragen werden, oder muss dann immer der Abgleich nach dem Zuürcksetzen gestartet werden ?

Gruss

Carsten
 
Zuletzt bearbeitet:

Immanuel

Moderator
Mitarbeiter
24. August 2016
332
50
#4
Hallo Carsten,

solange die Information der Position "nur" in der Session steht, geht diese nach Beendigung der Session natürlich verloren. Sinnvoller wäre hier wohl einen Primary Key Mapper zu implementieren und den aktuellen Offset über die Mappings/Linkings zu bestimmen. Unter folgendem Link (https://gitlab.jtl-software.de/jtlconnector/example-connector/tree/master/src) findest du einen Beispiel Connector. Besonderes Augenmerk wäre hier auf die Implementierung der Mapper und des Primary Key Mappers zu legen.

Nur der Connector weiß an welcher Stelle er sich befindet. Die Wawi sagt dem Connector lediglich wieviel Objekte er maximal schicken soll (Limit). Hier ein Beispiel: Es sind 200 Artikel im Shop. Die Wawi sagt nun, gib mir bitte 50 (Limit 50). Dann schickt der Connector die ersten 50 Artikel. Nach erfolgreichen Import der Artikel, meldet die Wawi dem Connector, dass genau diese 50 Artikel importiert wurden. Daraufhin speichert der Connector diese Informationen in seiner Linking Tabelle für Artikel. Nun sagt die Wawi erneut, gib mir bitte 50. Da nun für jeden gesendeten Artikel ein Eintrag in der Linking Tabelle existiert, weiß der Connector genau welche Artikel schon übertragen wurden und sendet weitere 50 Artikel, die noch nicht übertragen wurden. Nach insgesamt 4 Anfragen sind alle Artikel in die Wawi importiert. Fragt nun die Wawi erneut an, schickt der Connector ein leeres Ergebnis zurück.