Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehler bei CC API für Import & Export unter X5

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

  • Fehler bei CC API für Import & Export unter X5

    Hi,
    wird die CC API unter Eclipse X noch unterstützt? Irgendwie scheinen die Import/Export Funktionen unter X5 nicht ganz rund zu laufen (5.0.16).

    Beim Import kommt es zum Fehler "unknown column "0" in field list". Das auch bei Testdaten mit sehr wenigen, kontrollierten Werten und unterschiedlichen CCs. In Eclipse 4.3.4 trat dieser Fehler nicht auf. Jobs sind keine vorhanden.

    Beim Export werden nicht alle Einträge berücksichtigt ("nur veröffentlicht" ist nicht aktiv). -> Scheint mit der Mehrfach-Verarbeitung zusammenzuhängen (tritt auch in X4.3.4 auf). Bei max. 1 läuft der Export ohne Fehler. Wenn wir die Anzahl der gleichzeitig zu verarbeitenden Einträge erhöhen, treten ungefähr dem 2. oder 3. Batch Fehler auf: No export data for table cc_...

    Danke!
    Angehängte Dateien
    Zuletzt geändert von EBL; 21.11.2024, 09:58.

  • #2
    Hi,
    unknown column kann ich nachstellen beim Import. Da hat sich eine Array-Prüfung geändert in Contaos neuer ArrayUtil Klasse und damit denkt das System es käme nur ein Eintrag an, wenn doch mehrere verarbeitet werden sollen. Ich hab's notiert.

    Beim Export konnte ich keine Probleme feststellen. Selbst binäre Werte werden berücksichtigt.
    http://www.premium-contao-themes.com

    Kommentar


    • #3
      Super, der unknown column Fehler tritt jetzt nicht mehr auf. Allerdings werden jetzt auch beim Import nicht alle Einträge importiert. Wir kommen von ca. 3800 Einträgen, exportiert direkt aus der Datenbank als CSV Export auf ca. 1900 Einträge nach dem Import. Das auch, wenn wir die Tabelle vorher leeren. Was auch auffällt, ist dass je nach der Option "maximale Anzahl an Einträgen" unterschiedlich viele Einträge importiert werden.

      C 4.13.50, X 5.0.22

      Kommentar


      • #4
        Zitat von EBL Beitrag anzeigen
        Super, der unknown column Fehler tritt jetzt nicht mehr auf. Allerdings werden jetzt auch beim Import nicht alle Einträge importiert. Wir kommen von ca. 3800 Einträgen, exportiert direkt aus der Datenbank als CSV Export auf ca. 1900 Einträge nach dem Import. Das auch, wenn wir die Tabelle vorher leeren. Was auch auffällt, ist dass je nach der Option "maximale Anzahl an Einträgen" unterschiedlich viele Einträge importiert werden.

        C 4.13.50, X 5.0.22
        Das ist ja schon eine beachtliche Masse.
        Man kann nicht ausschließen, dass einfach irgendwann der Server dicht macht. Je nach Load, schafft der Server halt nur eine bestimmte kritische Masse. Das scheint hier bei ca.1900 vollständigen Datensätzen zu liegen.
        Das Frontend API Modul erlaubt Limits und Offsets via Url-Parameter (siehe Dokumentation). Damit können mehrere Importe in Reihe geschaltet werden, die jeweils versetzt ansetzen.

        Oder trenne die CSV in 3 oder 4 Einzeldateien und importiere diese jeweils in getrennten Import-Instanzen. Das sollte der Server schaffen, wenn er 1900 Datensätze grob schafft.
        Zuletzt geändert von Tim; 27.11.2024, 16:14.
        http://www.premium-contao-themes.com

        Kommentar


        • #5
          Also bei 100 Datensätzen kommen wir mit verschiedenen Settings auf 50 importierte Einträge. Nur bei gleichzeitig zu verarbeitenden Elementen = 1 werden alle importiert.

          Kommentar


          • #6
            Dann lass einzeln verarbeiten. Schwer zu sagen, ob die Stapelverarbeitung nicht auch in einen Flaschenhals läuft. Da spielen viele Faktoren rein.

            Was waren oben die 1900 Datensätze nach Import?

            Ist das ein einmaliger Import oder müssen hier stetig Daten getauscht werden? Wenn letzteres sollte man eher mit dem Frontend arbeiten und ggf. einen realen Cronjob nutzen, der das Frontend API Modul anstößt.

            Wenn keine Feldwerte geändert werden, kann man auch einfach via phpmyadmin importieren.
            Zuletzt geändert von Tim; 29.11.2024, 08:28.
            http://www.premium-contao-themes.com

            Kommentar


            • #7
              Wie gesagt, schwer pauschal zu sagen.

              Ich habe zum Test mal einen Import durchlaufen lassen mit 10er Blöcken. In der CSV sind 200 Einträge. Das Textfeld "textfeld" ist hochlaufend von 1 - 199, damit man sieht, dass es die jeweiligen Einträge sind.



              Angehängte Dateien
              http://www.premium-contao-themes.com

              Kommentar


              • #8
                Hi, also überraschenderweise hat der Import mit "maximale Anzahl an Einträgen" = 0 gut funktioniert (3800 Datensätze). Das können aber in Zukunft aber noch deutlich mehr werden, wäre also schon sinnvoll, wenn die Stapelverarbeitung auch problemlos laufen würde. Wir können dir dazu auch gerne einen Testzugang schicken.

                Anderes Thema: Gibt es einen einfachen Weg auch JSON Dateien als Quelle zu nutzen (zb. Quelle PHP Array und JSON in template zu php Arr konvertieren?)

                Vielen Dank!

                Kommentar


                • #9
                  Zitat von EBL Beitrag anzeigen
                  Hi, also überraschenderweise hat der Import mit "maximale Anzahl an Einträgen" = 0 gut funktioniert (3800 Datensätze). Das können aber in Zukunft aber noch deutlich mehr werden, wäre also schon sinnvoll, wenn die Stapelverarbeitung auch problemlos laufen würde. Wir können dir dazu auch gerne einen Testzugang schicken.

                  Anderes Thema: Gibt es einen einfachen Weg auch JSON Dateien als Quelle zu nutzen (zb. Quelle PHP Array und JSON in template zu php Arr konvertieren?)

                  Vielen Dank!
                  Die API erlaubt ein Template-File als Quelle, das einen Array beinhaltet. Wie dieser Array zustande kommt, ist frei.

                  Die Stapelverarbeitung hat in meinen Tests problemlos funktioniert. Wenn eine so große Masse an Daten in einem Rutsch durchgeht, empfehle ich über das Frontend zu importieren. Wie oben erwähnt erlaubt das Frontend Modul individuelle Offsets. Alternativ wäre die Backend-Import Logik individuell für Euren Zweck anzupassen.
                  http://www.premium-contao-themes.com

                  Kommentar


                  • #10
                    Über das Frontend Modul wird aktuell leider nichts importiert. Wenn in der API Anbindung "Tabelle vor Import leeren" aktiv ist, wird die Tabelle zwar geleert aber nichts importiert. Die zu importierende Datei ist dieselbe, die beim Standard Import ohne Stapelverarbeitung korrekt verarbeitet wird.

                    Standardtemplate mod_customcatalogapi:
                    Code:
                    <div class="<?php echo $this->class; ?> block"<?php echo $this->cssID; ?><?php if ($this->style): ?> style="<?php echo $this->style; ?>"<?php endif; ?>>
                    <?php if ($this->headline): ?>
                    <<?php echo $this->hl; ?>><?php echo $this->headline; ?></<?php echo $this->hl; ?>>
                    <?php endif; ?>
                    
                    <form action="<?php echo $this->action; ?>" method="<?php echo $this->method; ?>">
                    
                    <?php if(strtolower($this->method) == 'post'):?>
                    <input type="hidden" name="FORM_SUBMIT" value="<?php echo $this->formId; ?>">
                    <input type="hidden" name="REQUEST_TOKEN" value="?= \Contao\System::getContainer()->get('contao.csrf.token_manager')->getDefaultTokenValue(); ?>">
                    <?php endif; ?>
                    
                    <input type="hidden" name="api" value="<?php echo $this->Api->id; ?>">
                    
                    <?php echo $this->hidden; ?>
                    
                    <div class="tl_formbody_submit">
                    <div class="tl_submit_container">
                    <?php echo $this->runSubmit; ?>
                    </div>
                    </div>
                    </form>
                    
                    </div>
                    Frontend Ausgabe:
                    Code:
                    <div class="mod_customcatalog_apistarter cc_haendler_verarbeiter block">
                    
                    <form action="api-starter.html" method="get">
                    
                    
                    <input type="hidden" name="api" value="1">
                    
                    
                    <div class="tl_formbody_submit">
                    <div class="tl_submit_container">
                    <button type="submit" id="ctrl_run" class="submit submit tl_submit" name="run" value="Ausführen">Ausführen</button> </div>
                    </div>
                    </form>
                    
                    </div>
                    Mit Parametern wie in der Doku kommt es zum gleichen Ergebnis: api-starter.html?api=1&run=1&limit=10&offset=10

                    Kommentar


                    • #11
                      Boah, das ist alles lange her... Ich würde sagen, das hat niemand seit 6 Jahren genutzt. Wenn es nicht drin wäre im Kern, würde ich es kicken

                      Ich muss das selbst mal durchspielen, kann schon sein, dass sich da was geändert hat mit PHP8 und ggf. dem Caching der Daten, dass nichts ankommt.

                      Ähhh... also die Offset usw. Einstellungen sind für den Export konzipiert. Damit wird der DB-Query auf die Zieltabelle justiert. Ein Import greift immer die gesamte Quelle ab. Bei einer CSV alle Einträge. -> man kann mit mehreren CSVs arbeiten und mehreren API Startern.
                      http://www.premium-contao-themes.com

                      Kommentar


                      • #12
                        Ich hab das API Starter Modul etwas angepasst für C5 und werde einen neuen Hook etablieren "getSourceData"-Hook, der die ermittelten Quelldaten übergibt und manipulieren lässt, bevor sie weiter verarbeitet werden. Das sollte jede Form von Import-Daten - Übergabe frei ermöglichen.
                        http://www.premium-contao-themes.com

                        Kommentar

                        Lädt...
                        X