Ankündigung

Einklappen
Keine Ankündigung bisher.

Unerklärliches Fehlverhalten beim API-Import aus einer CSV-Datei

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Unerklärliches Fehlverhalten beim API-Import aus einer CSV-Datei

    Hallo zusammen,

    ich stehe hier gerade vor einem ziemlichen Rätsel:

    Ich betreue aktuell zwei Projekte auf Basis von EclipseX + CC. In beiden Projekten habe ich eine Export- und Import-Pipeline für CSV-Dateien gebaut.

    In Projekt A funktionieren diese auch problemlos. Ich mache einen Export, ändere ein wenig in der Datei, speichere sie, importiere sie wieder, die Änderung ist da. Genau wie es sein soll.

    In Projekt B habe ich die Pipelines auf exakt die gleiche Art und Weise angelegt und es geht sogar auf eine sehr ähnliche Tabelle, es ist bei beiden Projekten nämlich (wenig überraschend) "cc_product_catalog" (deren Felder pro Projekt etwas vom Ursprungszustand abweichen, was aber eigentlich kein Problem darstellen sollte).
    Hier funktioniert der Import aber nicht, selbst wenn ich eine frisch exportierte Datei (die inhaltlich absolut OK zu sein scheint, die CSV-Struktur sieht nicht grundlegend anders aus als bei einem Export aus Projekt A) direkt unverändert wieder einlese, kommt, wie auch beim Importversuch einer veränderten Datei, jedes Mal die Fehlermeldung "No data found", wenn ich auf "Ausführen" klicke.

    Nun basierte Projekt A auf EclipseX v2.0 und Projekt B auf v2.0.7, aber selbst ein Update von Projekt A auf die aktuelle v2.1.5 änderte leider absolut nichts an diesem Fehlverhalten, die Ursache muss also woanders liegen, ich weiß halt nur leider nicht, wo.
    Die Tabellen unterscheiden sich wie gesagt nur minimal, Projekt A hat ein zusätzliches Boolean-Feld, während Projekt B ein zusätzliches DB-Select-Feld enthält, da dort eine Verküpfung von Produkten zu Zubehör (eine separate Katalog-Tabelle) nachgehalten werden muss. Eigentlich alles kein Hexenwerk, aber trotzdem knallt es in Projekt B.

    Das ist schon sehr frustrierend, denn ich hatte extra auf Basis von Electron und Svelte eine Desktopanwendung geschrieben, die das Editieren der exportierten Dateien für Laien zugänglich macht, um ungeschulte Mitarbeiter mit der Datenpflege beauftragen zu können, ohne dass Diese dazu Kenntisse vom und Zugang zum Contao-Backend benötigen. Und nun sieht es so aus, also müsste ich zumindest für Projekt B nun trotzdem alles, was über mein Tool eingepflegt wurde, händisch zu Contao übertragen.

    Hat hier irgendjemand eine Idee, was beim Import schief gehen könnte, so dass mir diese Fließbandarbeit eventuell doch noch erspart bleibt?
    Zuletzt geändert von Sigma-90; 28.02.2021, 23:56.

  • #2
    Ich halte es für unmöglich dies in einem Forum frei zu supporten. Zum einen ist das Thema bereits sehr komplex und jede projektbezogene Arbeit erfordert Einarbeitung und Kenntnis jedes Bausteins vom Projektaufbau. Es spielen dutzende Faktoren eine Rolle. Das kann nur durch effektive Arbeit, direkt am System, durchleuchtet werden.

    Meine Empfehlung: Alles deutet auf einen Fehler im externen Tool und in der CSV hin. Hier würde ich anfangen zu suchen. Es reicht ein inkompatibles Zeichen oder auch eine Zeile zu viel. Auch die reine Datenmasse kann kritische Werte annehmen, wo Speicherbuffer schlichtweg voll sind. -> Staffelungen sind dann noch möglich.

    Kurze Steckliste, welche Punkte allgemein kritisch sind und wo man prüft:
    - Immer 1. Was sagt der Server-/Error log. (-> Hier finden sich ggf. schon die Lösungen warum eine CSV korrekt gefressen wird, die andere nicht. CC Systemeinstellungen ebenfalls auf Debug und Api auf Fehler-Ausgabe setzen)

    - Wieviele Einträge sind in der CSV
    - Wo sind die Unterschiede beider CSVs
    - Werden Bild-/Dateidaten übertragen (Server-Auslasten)
    - Korrektes Trennzeichen genutzt und Sonderzeichen beachtet.

    Zuletzt geändert von Tim; 01.03.2021, 07:54.
    http://www.premium-contao-themes.com

    Kommentar


    • #3
      Hi Tim.

      Danke für die schnelle Antwort.

      Der Mangel an Logs ist ja mein Hauptproblem. Sämtliche Debugoptionen sind an, dennoch scheint das System nirgendwo festzuhalten, welches Problem zum Abbruch beim Einlesen der Import-Datei geführt hat. Das System-Log listet bloß die Bestätigung des vor dem Importversuch angelegten Backups, vom Fehlschlag danach ist nichts zu finden. Das PHP-Error-Logfile des Servers ist ebenfalls leer.
      Das System bricht also einfach mit der nichtssagenden "No data found"-Meldung ab ohne irgendeine Art sinnvolles Feedback über die Ursache zu geben.

      Alle von dir genannten Faktoren kann ich ausschließen:

      Der Fehler kann eigentlich nicht im Tool liegen, denn selbst einen unveränderten frischen Export kann ich nicht direkt wieder importieren, da kommt der gleiche Fehler. Da ich vermutete, dass das System eventuell smart genug sein könnte, um zu erkennen, dass es aufgrund der Datengleichheit in diesem Fall nichts zu importieren gibt, habe ich dann auch per Notepad++ mal einen einzigen Text geändert, mit dem gleichen Ergebnis. Es scheint also ein Problem bei den Pipelines an sich zu sein.

      Die Anzahl der Einträge beträgt aktuell gerade mal 35 und kein Datenblock in der CSV ist so groß, dass es sich dabei um einen codierten Block von Binärdaten von Bildern oder Dateien handeln könnte (hätte mich ehrlich gesagt auch schwer gewundert) und die CSV-Datei ist insgesamt gerade mal 59 KB groß, am Speicherbuffer und der Serverauslastung kann es also auch nicht liegen. Und selbstverständlich ist sowohl bei Import- als auch Export-Pipeline dasselbe Trennzeichen konfiguriert (Semikolon).

      Gibt es irgendwo noch andere, CC-exklusive Logs, von denen ich evtl. nichts weiß? Denn ansonsten weiß ich absolut nicht, wo ich ansetzen könnte.

      Kommentar


      • #4
        Naja, irgendwo muss ja ein Unterschied beider CSVs sein . Das ist aber extern kaum zu überblicken. Du kannst mir die "defekte" csv mal schicken. Vielleicht sehe ich was auf die Schnelle.
        Hast du es mal mit nur einer Werte-Zeile in der CSV probiert?
        ---
        Standardmäßig versucht CC die gesammelten Daten lokal zwischen zu speichern. Vielleicht scheitert das. (Schreibrechte des /system/tmp Ordner prüfen).
        Du kannst das System auf reine Session setzen:

        initconfig.php
        Code:
         [COLOR=#333333][SIZE=11px][COLOR=#8735a5]$GLOBALS[/COLOR][[COLOR=#dd2400]'PCT_CUSTOMCATALOG_API'[/COLOR]][[COLOR=#dd2400]'SETTINGS'[/COLOR]][[COLOR=#dd2400]'useLocalStorage'[/COLOR]] = false;[/SIZE][/COLOR]
        Zuletzt geändert von Tim; 01.03.2021, 11:17.
        http://www.premium-contao-themes.com

        Kommentar

        Lädt...
        X