In Diskussion Syntax für For-Schleife? For-Schleife im Workflow gibt Syntaxfehler aus ...

OliausderSchweiz

Aktives Mitglied
3. März 2013
34
0
In einem Workflow möchte ich eine For-Schleife über Array-Werte ausführen ... da sieht wie folgt aus:

{% assign KIDs = '1,2,5,6' | Split: ',' -%}
{% for KID in KIDs -%}
{% capture sqlquery -%}
SQLQUERY ...
{% endcapture -%}
{% assign Value{{$KID}} = sqlquery | DirectQueryScalar -%}
{% endfor -%}

Beim Ausführen erhalte ich dann die Fehlermeldung "Syntax Error in 'assign'tag - Valid syntax: assign [var] = [source]"
Was mache ich falsch? Der Assign-Tag sieht doch genauso aus wie er soll, oder?

Vielen Dank an die Cracks die mir da helfen können!
 

John

Sehr aktives Mitglied
3. März 2012
3.900
950
Berlin
Zerleg das mal alles in einzelne Schritte. DotLquid mag keine zwei Operationen auf einmal, also String zuweisen und direkt splitten...
 

OliausderSchweiz

Aktives Mitglied
3. März 2013
34
0
Zerleg das mal alles in einzelne Schritte. DotLquid mag keine zwei Operationen auf einmal, also String zuweisen und direkt splitten...
Wie meinst Du das?
Die Syntax "{% assign KIDs = '1,2,5,6' | Split: ',' -%}" habe ich hier in einem thread im Forum gefunden und sollte gemäss dort funzen ...
Ich brauch ja einfach einen arry mit den Werten 1,2,5 und 6 ... gibts andere Varianten?
 

John

Sehr aktives Mitglied
3. März 2012
3.900
950
Berlin
Also so was funktioniert z.B.

Code:
{% assign KIDs = '7,8,9,10' | Split: ',' -%}
{% for KID in KIDs -%}
{% capture itemquery %}SELECT cName FROM vStandardArtikel WHERE kArtikel = {{ KID }}{% endcapture -%}\
{% assign result = itemquery | DirectQueryScalar -%}\
{{ result }}
{% endfor -%}
 
  • Gefällt mir
Reaktionen: OliausderSchweiz

frankell

Sehr aktives Mitglied
9. September 2019
2.299
694
Flensburg
Wie meinst Du das?
Die Syntax "{% assign KIDs = '1,2,5,6' | Split: ',' -%}" habe ich hier in einem thread im Forum gefunden und sollte gemäss dort funzen ...
Ich brauch ja einfach einen arry mit den Werten 1,2,5 und 6 ... gibts andere Varianten?
Die Zeile {% assign Value{{$KID}} = sqlquery | DirectQueryScalar -%} ist das Problem. Hier solltest Du erst, wie von John gezeigt, result zuweisen und danach damit machen, was Du möchtest. :)
 
  • Gefällt mir
Reaktionen: OliausderSchweiz

OliausderSchweiz

Aktives Mitglied
3. März 2013
34
0
Die Zeile {% assign Value{{$KID}} = sqlquery | DirectQueryScalar -%} ist das Problem. Hier solltest Du erst, wie von John gezeigt, result zuweisen und danach damit machen, was Du möchtest. :)
Vielen Dank Euch beiden ...

Das obengenannte hab ich so mal umgesetzt, erhalte jetzt aber denselben Fehler in der Zeile danach, also direkt vor dem {% endfor -%} ...
Dort möchte ich ja jeweils eine Variable assignen, deren Name aus dem Variablennamen und anschliessend die KID aus dem Array enthält (VarName1, Varname2, ...) und ihr den Wert der SQL-Abfrage zuweisen.

{% assign VarName{{KID}} = result -%} funzt nicht,
{% assign VarName$KID = result -%} funzt auch nicht ...

Wie setz ich jetzt diesen Variablennamen mit dem String "VarName" und der Variable "KID" zusammen?
 

frankell

Sehr aktives Mitglied
9. September 2019
2.299
694
Flensburg
Bevor man da falsch denkt: Gibt die Query nur einen Wert bzw. eine Spalte zurück oder mehr als eine Spalte?

Denn "(VarName1, Varname2, ...)" könnte auf Mehrspaltigkeit hindeuten.

Und leider verstehe ich immer noch nicht, was Du genau möchtest. Ich befürchte, dass hier auch Begrifflichkeiten durcheinandergewürfelt sind.

Also noch mal: Was möchtest Du ausgegeben haben und wo kommt das bzw. dessen Teile her?
 

OliausderSchweiz

Aktives Mitglied
3. März 2013
34
0
Bevor man da falsch denkt: Gibt die Query nur einen Wert bzw. eine Spalte zurück oder mehr als eine Spalte?

Denn "(VarName1, Varname2, ...)" könnte auf Mehrspaltigkeit hindeuten.

Und leider verstehe ich immer noch nicht, was Du genau möchtest. Ich befürchte, dass hier auch Begrifflichkeiten durcheinandergewürfelt sind.

Also noch mal: Was möchtest Du ausgegeben haben und wo kommt das bzw. dessen Teile her?
Die Query gibt pro Durchlauf einen Wert (Spalte) zurück.
Was ich möchte:
Das Ziel ist das Schreiben eines CSV-files, in der die Werte der 4 Variablen geschrieben werden.
Der Variablenname soll in der For-Schleife aus dem fixen String (Bsp. "KID") und der Ziffer aus dem Array "KIDs" zusammengesetzt werden um dann in der CSV-Ausgabe verwendet werden zu können ...
(Bsp:
CSV-Header: "KEY";"VARNAME1";"VARNAME2";"VARNAME3";"VARNAME4"
CSV-DATA: "{{KEY}}";"KID1";"KID2";"KID5";"KID6"
)
Danke schon mal, nochmal
 

frankell

Sehr aktives Mitglied
9. September 2019
2.299
694
Flensburg
Es wird irgendwie nicht besser. :D

Aber ich mach es mal ganz allgemein, nachdem Du das Ergebnis der SQL-Query in die Variable result geschrieben hast, also nach {% assign result = sqlquery | DirectQueryScalar -%}

Wenn Du dem Ergebnis der SQL-Query etwas hinzufügen möchtest, dann ginge das bspw. per Append:

{{ result | Append: "xyz" }} oder {% assign result = result | Append: "xyz" -%}

Dabei kann "xyz" auch durch eine Variable ersetzt werden, also innerhalb der Schleife bspw. durch KID (das Element des Arrays, das gerade in der Schleife verwendet wird).

Oder umgekehrt das Ergebnis der SQL-Query wird einem String oder einer Variablen hinzugefügt:

{{ "xyz" | Append: result }} oder {% assign result = "xyz" | Append: result -%}

Auch hier kann "xyz" durch eine Variable ersetzt werden, also innerhalb der Schleife bspw. durch KID (das Element des Arrays, das gerade in der Schleife verwendet wird).

Vielleicht kommen wir so ja einer Lösung näher.
 

OliausderSchweiz

Aktives Mitglied
3. März 2013
34
0
Es wird irgendwie nicht besser. :D

Aber ich mach es mal ganz allgemein, nachdem Du das Ergebnis der SQL-Query in die Variable result geschrieben hast, also nach {% assign result = sqlquery | DirectQueryScalar -%}

Wenn Du dem Ergebnis der SQL-Query etwas hinzufügen möchtest, dann ginge das bspw. per Append:

{{ result | Append: "xyz" }} oder {% assign result = result | Append: "xyz" -%}

Dabei kann "xyz" auch durch eine Variable ersetzt werden, also innerhalb der Schleife bspw. durch KID (das Element des Arrays, das gerade in der Schleife verwendet wird).

Oder umgekehrt das Ergebnis der SQL-Query wird einem String oder einer Variablen hinzugefügt:

{{ "xyz" | Append: result }} oder {% assign result = "xyz" | Append: result -%}

Auch hier kann "xyz" durch eine Variable ersetzt werden, also innerhalb der Schleife bspw. durch KID (das Element des Arrays, das gerade in der Schleife verwendet wird).

Vielleicht kommen wir so ja einer Lösung näher.
Shit, wirds nicht besser? ... Ja, ich glaube ich bin gard nicht so auf der SOll-Höhe :( ... hab ich oben doch tatsächlich etwas Mist geschrieben, sorry

Nochmals anders erklärt:
Ich habe pro For-Schleife drei Dinge als Ausgangslage:
1. Die KID, die aus dem Array kommt, also 1,2,5, oder 6
2. Den Wert der durch die Query geliefert wird in der Variable "result"
3. Den String "VALUE", an den die KID pro Schleifen-Durchlauf angehängt werden soll. Die beiden ergeben dann jeweils einen Variablennamen, also bsp. "VALUE1","VALUE2", "VALUE5";"VALUE6" und deren Inhalte ist jeweils das Ergebnis "result" der SQL-Query.

Die zwei Zeilen für die CSV-Ausgabe wären dann:
"KEY";"VARNAME1";"VARNAME2";"VARNAME3";"VARNAME4"
"{{KEY}}";"{{VALUE1}}";"{{VALUE2}}";"{{VALUE5}}";"{{VALUE6}}"

mit anderen Worten:
Pro Durchlauf erstelle ich eine Variable mit Namen (fixer String) und hänge dann die KID aus dem Array dran. Als Wert wird das Query-Ergebnis zugewiesen.

Ich hoffe das ist jetzt klarer ... ?
 

frankell

Sehr aktives Mitglied
9. September 2019
2.299
694
Flensburg
Ich glaube ich hab's jetzt verstanden.

Bei jedem Durchlauf erzeugst Du eine Variable mit der Bezeichnung VALUE{{ KID }}, und dieser Variablen weist Du den Wert {{ result }} zu.

Wenn das ginge, würde das so aussehen: {% assign Value{{ KID }} = result -%}

Aber das geht nicht. Du kannst Variablennamen in DotLiquid nicht dynamisieren.

Aber da stellt sich mir natürlich die Frage, warum ein dynamisierter Variablennamen überhaupt notwendig ist, wo er doch eh nicht in die Ausgabe gelangt, und/oder ob Du nicht auch anders zum Ziel gelangst. Dazu sind jedoch zu wenig Informationen vorhanden.
 

OliausderSchweiz

Aktives Mitglied
3. März 2013
34
0
Ich glaube ich hab's jetzt verstanden.

Bei jedem Durchlauf erzeugst Du eine Variable mit der Bezeichnung VALUE{{ KID }}, und dieser Variablen weist Du den Wert {{ result }} zu.

Wenn das ginge, würde das so aussehen: {% assign Value{{ KID }} = result -%}

Aber das geht nicht. Du kannst Variablennamen in DotLiquid nicht dynamisieren.

Aber da stellt sich mir natürlich die Frage, warum ein dynamisierter Variablennamen überhaupt notwendig ist, wo er doch eh nicht in die Ausgabe gelangt, und/oder ob Du nicht auch anders zum Ziel gelangst. Dazu sind jedoch zu wenig Informationen vorhanden.
Echt? Das geht nicht? hmmm ... und ja, Du hast's jetzt begriffen ;)

Dann beginn ich mal von Vorne:

EndZiel: Bei Vaterartikeln soll pro Kundengruppe (IDs 1,2,5,6) der niedrigste Kind-Preis aller Kinder inkl. deren Staffelpreisen + Sonderpreisen als Verkaufspreis gespeichert werden.
Bisheriger Ansatz: Mit Workflow CSV schreiben und mit Ameise importieren.
CSV-Struktur-Idee bisher:
"VATER-ID";"MINPREIS-KG1";"MINPREIS-KG2";"MINPREIS-KG5";"MINPREIS-KG6"
"{{ArtNo}}";"{{MinPreisKGruppe1}}";"{{MinPreisKGruppe2}}";"{{MinPreisKGruppe5}}";"{{MinPreisKGruppe6}}"

Weil ich eine for-Schleife benutze, müsste ich darin die Variable erzeugen. Hast du eine andere Idee?
 

OliausderSchweiz

Aktives Mitglied
3. März 2013
34
0
Echt? Das geht nicht? hmmm ... und ja, Du hast's jetzt begriffen ;)

Dann beginn ich mal von Vorne:

EndZiel: Bei Vaterartikeln soll pro Kundengruppe (IDs 1,2,5,6) der niedrigste Kind-Preis aller Kinder inkl. deren Staffelpreisen + Sonderpreisen als Verkaufspreis gespeichert werden.
Bisheriger Ansatz: Mit Workflow CSV schreiben und mit Ameise importieren.
CSV-Struktur-Idee bisher:
"VATER-ID";"MINPREIS-KG1";"MINPREIS-KG2";"MINPREIS-KG5";"MINPREIS-KG6"
"{{ArtNo}}";"{{MinPreisKGruppe1}}";"{{MinPreisKGruppe2}}";"{{MinPreisKGruppe5}}";"{{MinPreisKGruppe6}}"

Weil ich eine for-Schleife benutze, müsste ich darin die Variable erzeugen. Hast du eine andere Idee?
Habs gelöst ... mach die Query halt einfach 4x ... danke dir!
 

frankell

Sehr aktives Mitglied
9. September 2019
2.299
694
Flensburg
Alles klar.

Das ginge auch in einer einzigen Query, die man per Ameise exportieren (Eigener Export) und dann wieder importieren kann.

Aber auch in DotLiquid ginge das Ganze weiterhin mit einer For-Schleife, wenn Du die zweite Zeile in eine einzige Variable (bspw. "zeile2") schreibst und diese vor der Schleife bereits den Wert {{ ArtNo }} besitzt. Auf die Anführungszeichen in der CSV kannst Du verzichten, da dort ja nirgendwo ein Semikolon auftaucht. Ich gehe zumindest davon aus, dass Deine Artikelnummer kein Semikolon enthalten. :)

Dann kannst Du einfach in Deinem Ursprungscode die letzte Zeile vor dem Schleifenende durch Folgendes ersetzen:

{% capture result -%}{{ sqlquery | DirectQueryScalar }}{% endcapture -%}
{% assign zeile2 = zeile2 | Append: ';' | Append: result -%}

Deine Ausgabe am Ende ist dann:
VATER-ID;MINPREIS-KG1;MINPREIS-KG2;MINPREIS-KG5;MINPREIS-KG6
{{ zeile2 }}

Die andere Art der Speicherung der Query in eine Variable per capture hat den Hintergrund sicherzustellen, dass result ein String ist und keine Zahl, denn mit einer Zahl funzt Append nicht.
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu Syntax error im Template NOVA JTL-Shop - Fehler und Bugs 2
Seit Update auf 1.11.4 Workflow für Kartonauswahl gibt error JTL Das Objekt mit Nullwert muss einen Wert haben. BrowsePk: 152325 WorkflowAktionId: 155 JTL-Wawi 1.11 0
Neu Rechnung nur für bestimmte Kundengruppe drucken, aber für alle Erstellen Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 1
Neu JTL auf dem Server duplizieren für Experimente Installation von JTL-Wawi 1
Kaufland Preis ist falsch - Rabatt für die Kd Gruppe nicht berücksichtigt kaufland.de - Anbindung (SCX) 1
25 Gutscheine für Kunden auf Rechnung erstellen Allgemeine Fragen zu JTL-Vouchers 0
Neu SEO URL für den Blog Allgemeine Fragen zu JTL-Shop 2
Neu 🚨 Hinweis für JTL-Händler, die Taxdoo nutzen News, Events und Umfragen 1
Monatsabschluss Amazon FBA UK / CH mit JTL2Datev WaWi 1.10 bei IDU Nutzung und Zwangs VCS für GB / Schweiz JTL-Wawi 1.10 0
Neu Biete Connector-Tools für vollautomatische Lieferantenbestellungen an uvm. Dienstleistung, Jobs und Ähnliches 2
Externe Auftragsnummer für Rechnungs-Druckvorlage nicht vorhanden JTL-Wawi 1.11 6
Neu Sind Support-Tickets für WaWi und Ameise ohne kostenpflichtigen Tarif nicht mehr möglich? JTL-Wawi - Fehler und Bugs 3
Neu Coupon-Steuer Plugin: Korrekte Steuerberechnung für JTL-Shop Coupons Plugins für JTL-Shop 1
Neu Neuer Server für kleines Unternehmen User helfen Usern - Fragen zu JTL-Wawi 37
Neu Welche SQL Server Version für WaWi 1.0.0.0.0 unter Windows 11 Installation von JTL-Wawi 6
Neu Was ist die korrekte Variable für die letzte Seite eines Artikellistings? Betrieb / Pflege von JTL-Shop 11
Neu Open-Source-Lösung für produzierende Betriebe User helfen Usern 0
Neu Varianten Artikel erstellen mit Lister 2.0 nur für Amazon Amazon-Lister - Ideen, Lob und Kritik 0
Neu SUCHE Freelancer für JTL WAWI Anbindung an WooCommerce und Einrichtung Dienstleistung, Jobs und Ähnliches 2
Amazon-ASIN mit mehreren SKU für Chargenverfolgung JTL-Wawi 1.10 0
Neu ID Hook für Warenkrob User helfen Usern 0
Neu Platzhalter für GPSR werden mit angezeigt PrestaShop-Connector 1
Neu Workflow für voraussichtlichen Liefertag erstellen JTL-Workflows - Ideen, Lob und Kritik 6
Neu Workflow für voraussichtlichen Liefertag erstellen User helfen Usern - Fragen zu JTL-Wawi 1
Neu CustomWorkflow für Pattenkonto JTL-Workflows - Ideen, Lob und Kritik 1
Neu Adressetiketten für Briefe mit Etikettendrucker erstellen / Formatierungsproblem Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 4
Neu 🚀 Pilotkunden gesucht: HS Dynamic Pricing Plugin für JTL-Shop Plugins für JTL-Shop 0
Wichtig 💡Die Retourenplattform für Webshops – Expertise von unserem neuen Partner Returnless News, Events und Umfragen 0
Neu Kapazitäten frei für Routineaufgaben JTL Wawi Dienstleistung, Jobs und Ähnliches 0
Neu Trainingsmodus für JTL-POS gewünscht JTL-POS - Ideen, Lob und Kritik 0
Artikel teilweise nicht für Verkaufskanäle aktivierbar JTL-Wawi 1.10 0
Neu VCS lite: Arithmetischer Überlauffehler für tinyint-Datentyp, Wert = -1. Amazon-Anbindung - Fehler und Bugs 0
Monatsweise Warenbewegungen für alle Artikel exportieren JTL-Wawi 1.10 1
WF - automatisches Aktivieren / Deaktivieren für Verkaufskanal Shop JTL-Wawi 1.9 6
Artikel nicht automatisch für Verkaufskanal aktivieren JTL-Wawi 1.10 2
Neu Welcher Hoster ist für JTL-Shop 5 empfehlenswert? User helfen Usern 12
Buchhaltung vollautomatisiert für die Schweiz JTL-Wawi 1.10 10
Vote für debugging des Mobile Server Fehlers JTL-Wawi 1.11 1
Massenänderung "Lagerplatz" für Artikel bei WMS Lager JTL-Wawi 1.10 2
Neu Bestellobergrenze (999€) für Schweizer Kunden im Shop hinterlegen Betrieb / Pflege von JTL-Shop 1
Alternativtext für Artikelbilder per Ameise pro Plattform setzen JTL-Wawi 1.10 0
Neu Staffelpreise für Verpackungseinheiten Einrichtung von JTL-Shop4 4
Neu Kunden einen Retouren QR Code beim ausliefern mitschicken für Warenankauf ??? JTL-ShippingLabels - Fehler und Bugs 0
Neu Suche Freelancer für Aufsetzen JTL B2B Shop Dienstleistung, Jobs und Ähnliches 3
Gelöst Kartenleser für RKSV JTL-POS - Fragen zu Hardware 2
Neu Artikel nur für Admin sichtbar Allgemeine Fragen zu JTL-Shop 2
Neu Zusätzlicher Kundendisplay für Kassensystem iMin D4 Pro Einrichtung / Updates von JTL-POS 1
Neu Besteht Interesse an einer Versandschnittstelle für GEL-Express? Schnittstellen Import / Export 0
Neu Tailwind als Basis für JTL Shop 6 ? Templates für JTL-Shop 2
Neu Variablen für Kassenbon Einrichtung / Updates von JTL-POS 1

Ähnliche Themen