In Diskussion RegEx im Workflo negieren

FOC Solutions

Offizieller Servicepartner
SPBanner
5. Juli 2024
118
76
Moin in die Runde,

ich baue gerade einen Workflow der die Nachkommastellen beim nettoVK kontrollieren soll. Mein RegEx funktioniert in den üblichen RegEx, nur nicht in den Workflows:

^\d{1,8}([\.,]\d{2})?$

Die Negierung schein JTL irgendwie anders zu sein, nur wie?
 

FOC Solutions

Offizieller Servicepartner
SPBanner
5. Juli 2024
118
76
variable anlegen mit match regex (typ boolean)
dann var == false prüfen
Das habe so getan:

{% assign VKnetto = Vorgang.Allgemein.PreiseEinheiten.VK-Netto | Matches: ^\d{1,8}([\.,]\d{2})?$
{% if VKnetto == true %} true {% else %} false {% endif %}

In einer erweiterten Eigenschaft, um letztendlich ein PopUp aufgehen zu lassen wenn der nettoVK mehr als zwei Nachkommastellen hat.

Habe ich einen Denkfehler?
 

sebjo82

Sehr aktives Mitglied
3. Juni 2021
569
164
Das habe so getan:

{% assign VKnetto = Vorgang.Allgemein.PreiseEinheiten.VK-Netto | Matches: ^\d{1,8}([\.,]\d{2})?$
{% if VKnetto == true %} true {% else %} false {% endif %}

In einer erweiterten Eigenschaft, um letztendlich ein PopUp aufgehen zu lassen wenn der nettoVK mehr als zwei Nachkommastellen hat.

Habe ich einen Denkfehler?
regex muss in ''
und es fehlt -%} am ende
 
  • Gefällt mir
Reaktionen: FOC Solutions

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.496
442
Hehehe - ich wusste gar nicht, das Liquid einen regex Filter hat .... man lernt nie aus ;)

ich hätts deshalb so gemacht:
Code:
{% assign anzahl = 183.351 | split: "." | last | size %}
{% if anzahl > 2 %}
   Diese Zahl hat mehr als zwei Dezimalstellen!
{% endif %}
 
  • Gefällt mir
Reaktionen: FOC Solutions

FOC Solutions

Offizieller Servicepartner
SPBanner
5. Juli 2024
118
76
Hehehe - ich wusste gar nicht, das Liquid einen regex Filter hat .... man lernt nie aus ;)

ich hätts deshalb so gemacht:
Code:
{% assign anzahl = 183.351 | split: "." | last | size %}
{% if anzahl > 2 %}
   Diese Zahl hat mehr als zwei Dezimalstellen!
{% endif %}
Das funktioniert leider nicht,

Code:
{% assign anzahl = Vorgang.Allgemein.PreiseEinheiten.VK-Netto | split: "." | last | size %}
{% if anzahl > 2 %}
   1
{% endif %}

wirft als Ergebnis leider immer 1 aus, egal ob der Split mit "." oder ",", egal wie viele Nachkommastellen der Artikel hat.
 

FOC Solutions

Offizieller Servicepartner
SPBanner
5. Juli 2024
118
76
Nachkommastellen.jpg


Am schönsten wäre es so, nur scheint der RegEx von JTL nicht richtig verarbeitet zu werden. In den üblichen RegEx Editoren funktioniert er aber.
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
7.095
1.856
Berlin
Also deine Erstgenannte Lösung bei der du sagst das sie nicht geht, funktioniert schon, aber kann es sein das du da ein Problem hast weil es kein String sondern eine Zahl ist?

Ich glaube es gibt in dotliquid keine wirkliche Lösung um eine Zahl in einen string zu verwandeln, daher habe ich das als Beispiel mit einem Trick zum String umgewandelt

JavaScript:
{% assign s = 25,3423213 -%}
{% assign e = 25,34  -%}
{% capture out -%}{{ e }}{% endcapture -%}
{% assign VKnetto = out | Matches: "^\d{1,8}([\.\,]\d{2})?$" -%}
{% if VKnetto == true %} true {% else %} false {% endif %}

die Variablen e und s ersetzen hier deine Variable.
Je nachdem ob du hier {{ e }} oder {{ s }} hast, gibt er dir true oder false zurück
 
  • Gefällt mir
Reaktionen: FOC Solutions

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.496
442
Das funktioniert leider nicht,

Code:
{% assign anzahl = Vorgang.Allgemein.PreiseEinheiten.VK-Netto | split: "." | last | size %}
{% if anzahl > 2 %}
   1
{% endif %}

wirft als Ergebnis leider immer 1 aus, egal ob der Split mit "." oder ",", egal wie viele Nachkommastellen der Artikel hat.
Das liegt daran, dass du den split direkt auf das Datenbankfeld anwendest.
Die meisten (wenn nicht alle) Preise werden in JTL als Festkommazahl decimal(25,13) gespeichert. Das heißt, das was in dem Feld steht hat immer 13 Ziffern rechts vom Dezimaltrennzeichen (deshalb heißt das Festkommazahl - im Gegensatz zur Fließkommazahl).

Wenn du in der Wawi 1,2 eingibst, steht in der Datenbank 1.2000000000000
und selbst wenn in der DB 1,234567890123 stehen würde, die ermittelte Anzahl der Nachkommastellen wäre in deinem obigen Code immer 13 und damit größer als 2 und folglich gibt dir der Code immer eine Eins aus.

Aber du hast ja mit der Regex bereits eine für deinen Anwendungsfall funktionierende Lösung gefunden :)
..ich wollte dir auch nicht einen anderen Weg aufschwatzen. Ich hatte mich beim Lesen deines Beitrages einfach nur gefragt, wie ICH das eigentlich machen würde, da ich halt immer wenn möglich einen großen Bogen um RegEx mache.

Aber eigentlich würde ich sowas sowieso nicht mit Liquid machen. Ich lass alle Berechnungen und Co immer gerne von der Datenbank machen und gebe mit Liquid dann nur noch das Ergebnis aus.
 
  • Gefällt mir
Reaktionen: FOC Solutions

FOC Solutions

Offizieller Servicepartner
SPBanner
5. Juli 2024
118
76
Das liegt daran, dass du den split direkt auf das Datenbankfeld anwendest.
Die meisten (wenn nicht alle) Preise werden in JTL als Festkommazahl decimal(25,13) gespeichert. Das heißt, das was in dem Feld steht hat immer 13 Ziffern rechts vom Dezimaltrennzeichen (deshalb heißt das Festkommazahl - im Gegensatz zur Fließkommazahl).

Wenn du in der Wawi 1,2 eingibst, steht in der Datenbank 1.2000000000000
und selbst wenn in der DB 1,234567890123 stehen würde, die ermittelte Anzahl der Nachkommastellen wäre in deinem obigen Code immer 13 und damit größer als 2 und folglich gibt dir der Code immer eine Eins aus.

Aber du hast ja mit der Regex bereits eine für deinen Anwendungsfall funktionierende Lösung gefunden :)
..ich wollte dir auch nicht einen anderen Weg aufschwatzen. Ich hatte mich beim Lesen deines Beitrages einfach nur gefragt, wie ICH das eigentlich machen würde, da ich halt immer wenn möglich einen großen Bogen um RegEx mache.

Aber eigentlich würde ich sowas sowieso nicht mit Liquid machen. Ich lass alle Berechnungen und Co immer gerne von der Datenbank machen und gebe mit Liquid dann nur noch das Ergebnis aus.
Ich bin mal wieder an dem Thema dran.

Über RegEx wird es so vermutlich nicht funktionieren aber Dein erster Ansatz könnte vielleicht so funktionieren:

{% assign anzahl = Vorgang.Allgemein.PreiseEinheiten.VK-Netto | split: "," | last %}
{% if anzahl contains = '0000000000' -%}
1
{% endif %}

Nur bekomme ich dann diese Fehlermeldung:
Liquid error: Der Wert darf nicht NULL sein.
Parametername: input

Da stehe ich gerade auf dem Schlauch, wo liegt der Fehler? Zahl vs. String?
 

FOC Solutions

Offizieller Servicepartner
SPBanner
5. Juli 2024
118
76
Wichtig ist, das du da in dem capture keine Leerzeichen hast.

{% assign e = Vorgang.Allgemein.PreiseEinheiten.VK-Netto -%}
{% capture out -%}{{ e }}{% endcapture -%}
{% assign VKnetto = out | Matches: "\d{1,8}([\.\,]\d{2})?$" -%}
{% if VKnetto == true %} true {% else %} false {% endif %}

Das Ergebnis ist bei allen Artikeln true, egal wie ob der nettoVK 25,34 (in der DB ja 25,340000000000) oder 25,33875234 eingetragen hat.
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
7.095
1.856
Berlin
Aber mein Beispiel direkt hattest du geprüft mit s und mit e ?
also interessant ist ja jetzt ob die Variable 25,34 oder 25,340000000000 ist, hast du dir das mal ausgeben lassen was da wirklich drin steht?
 

FOC Solutions

Offizieller Servicepartner
SPBanner
5. Juli 2024
118
76
Aber mein Beispiel direkt hattest du geprüft mit s und mit e ?
also interessant ist ja jetzt ob die Variable 25,34 oder 25,340000000000 ist, hast du dir das mal ausgeben lassen was da wirklich drin steht?
Fehler gefunden :)

So funktioniert es:
{% assign s = Vorgang.Allgemein.PreiseEinheiten.VK-Netto -%}
{% capture out -%}{{ s }}{% endcapture -%}
{% assign VKnetto = out | Matches: "^\d{1,8}([\.\,]\d{2})?$" -%}
{% if VKnetto == true %} true {% else %} false {% endif %}


Bei der ganzen Testerei ist mir das "^" abhanden gekommen

Ich danke Euch allen

@css-umsetzung Ich gebe Dir auf der Connect ein Bier aus 🍻
 
Ähnliche Themen
Titel Forum Antworten Datum
URL aus Text extrahieren, Dotliquid, Regex JTL-Wawi 1.9 13

Ähnliche Themen