0

RangeError: Maximum call stack size exceeded.

Hallo zusammen,

ich importiere per csv meine Shop-Bestellungen in ninox. Die temporärere Tabelle wird dann per Skript in die eigentlichen Tabellen (Kunde und Bestellungen) weiter verarbeitet. Der unten stehende Code soll die Kunden aus den Bestellungen filtern und nachschauen, ob der Kunde (anhand der E-Mail) bereits angelegt wurde. Ist dem so, dann soll das Skript den Kunden nicht anlegen. Ansonsten wird der Kunde angelegt.

Leider renne ich jedes Mal bei einer Tabellengröße von knapp 250 Kunden in ein "RangeError: Maximum call stack size exceeded."

Der Fehler löst sich auf, wenn ich nicht mehr den Ort, das Bundesland und das Land speicher. 

Habt ihr eine Idee?

 
var counter := 0;
for wc_customer in (select WooCommerce_Import) do
let email := wc_customer.'E-Mail'
        if email != void then
let kunde_exist := first(select Kunden where 'E-Mail' = wc_customer.'E-Mail').Nr;
wc_customer.(Importiert := 0);
if kunde_exist = void then
let kunde := (create Kunden);
let land_crm := first((select Laender)[Kurzname = wc_customer.Land]).Nr;
kunde.(Geschlecht := 0);
kunde.(Vorname := wc_customer.Vorname);
kunde.(Nachname := wc_customer.Nachname);
kunde.('E-Mail' := email);
kunde.(Zusatz := wc_customer.Zusatz);
kunde.(Strasse := wc_customer.Strasse);
kunde.(PLZ := wc_customer.PLZ);
kunde.(Ort := wc_customer.Ort);
kunde.(Bundesland := wc_customer.Bundesland);
kunde.(Land := land_crm);
counter := counter + 1;
wc_customer.(Importiert := 1)
end
end
end;
if counter > 0 then
dialog("Shop Import", "Der Import wurde abgeschlossen. Es wurden " + counter + " Kunden importiert.", ["OK"])
else
dialog("Shop Import", "Alle Kunden sind bereits angelegt. Daher wurde kein Kunde importiert.", ["OK"])
end

Danke im Voraus

 

Viele Grüße

Pascal

4 Antworten

null
    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Pascal,

    versuche es bitte so:

    ---

    let myWCI:=select WooCommerce_Import;
    myWCI.(Importiert:=false);
    for i in myWCI['E-Mail'] do
    if cnt(select Kunden where 'E-Mail' = i.'E-Mail')=0 then
    let newC := (create Kunden);
    newC.(Land:=first(select Laender[Kurzname = i.Land]);
    Geschlecht := 0;
    Vorname := i.Vorname;
    Nachname := i.Nachname;
    'E-Mail' := i.'E-Mail';
    Zusatz := i.Zusatz;
    Strasse := i.Strasse;
    PLZ := i.PLZ;
    Ort := i.Ort;
    Bundesland := i.Bundesland);
    i.(Importiert := true)
    else
    i.(Importiert := false)
    end
    end;
    let counter:=cnt(myWCI[Importiert]);
    if counter>0 then
    dialog("Shop Import", "Der Import wurde abgeschlossen. Es wurden " + counter + " Kunden importiert.", ["OK"])
    else
    dialog("Shop Import", "Alle Kunden sind bereits angelegt. Daher wurde kein Kunde importiert.", ["OK"])
    end

    ---

    Leo

    • Pascal
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Leo,

    danke die Hilfe! Wenn ich die folgenden Zeilen ohne newC. schreibe, bekomme ich eine Fehlermeldung:

    Geschlecht := 0;
    Vorname := i.Vorname;
    Nachname := i.Nachname;
    'E-Mail' := i.'E-Mail';

    Kann das sein?

    Grüße
    Pascal

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Pascal,

    eigentlich wenn es eingeklammert ist 

    newC.(Feld1:=Value1;

    Feld2:=Value2

    ...

    FeldX:=ValueX)

    sollte es gehen. Du kannst natürlich auch ausschreiben.

    Leo

    • Pascal
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Leo,

    ah, die Klammer hatte ich übersehen! Danke für den Hinweis :-) Probiere ich gleich einmal aus.

    Beste Grüße

    Pascal

Content aside

  • vor 3 JahrenZuletzt aktiv
  • 4Antworten
  • 553Ansichten