Neu DotLiquid: Variable zu Integer umwandeln und addieren

Mander

Aktives Mitglied
25. Oktober 2016
42
1
Hallo Forum,

das ist wohl eine absolute Anfängerfrage, man möge mir die Unwissenheit verzeihen, aber ich finde einfach keine Antwort in der Suche.

Und zwar möchte ich gerne einen Workflow erstellen, der die Kundennummer mit der Zahl 2000 addiert und dann als Debitorennummer abspeichert.

Folgende Angaben habe ich im Editor unter "Werte setzen" gemacht:
{{ Vorgang.Kundennummer | Plus: 2000 }}

Problem: der Wert 2000 wird einfach per Verkettung an den Wert der Kundennummer gehängt. Wenn der Kunde beispielsweise die Kundennummer 20 hat, erhalte ich den Wert 202000.

Ich bin mir jetzt nicht sicher, was die Ursache ist, aber kann es sein, dass die Variable {{ Vorgang.Kundennummer }} wie ein String behandelt wird und erst in einen Integer-Wert umgewandelt werden muss?

Könnt Ihr mir bitte auf die Sprünge helfen? Bin noch absolut grün hinter den Ohren, was DotLiquid angeht.

Beste Grüße!
 

NETZdinge.de

Sehr aktives Mitglied
7. April 2010
2.285
339
Ja, die Kundennummer ist ein String...

Für die Umwandlung musst du mal im Guide schauen... der ist dafür allerdings seit der Umstellung Schrott... vorher war alles schön auf einer Seite und man konnte über die Browsersuche einfach suchen... jetzt ist es alles kategorisiert und man muss schon wissen wonach man sucht und die richtige Kategorie kennen... #verschlimmbessert
 

Mander

Aktives Mitglied
25. Oktober 2016
42
1
Danke für die Antwort!

Ok, vielleicht weiß ja jemand anderes, wie es geht. Habe jetzt eine halbe Stunde im Guide gesucht und nichts gefunden.
 

gutberle

Sehr aktives Mitglied
29. März 2011
1.292
396
Hi @Mander,

Grundsätzliches zuerst: Ja, die Kundennummer ist in der Datenbank als varchar(30) angelegt, soll heißen als String. Der erste Schritt wäre also eine Typwandlung in ein Integer und das macht man in Liquid/ DotLiquid, indem man den String (der eine Zahl enthält) z.B. mit 1 multipliziert, also {{ NumerischerString | Times: 1 }}. Umgekehrt, also von Interger oder Float in String geht es mit einem beliebigen Filter, der nur für Strings gilt, wie z.B. {{ IntegerWert | Trim }}.

Nach Adam Riese und Eva Zwerg hättest Du damit alles beieinander, um Dein Ziel zu erreichen, aber die Realität sieht anders aus und ist mit endloser Frustration gepflastert, weil schlicht nicht ersichtlich ist oder wird, was man noch alles tun muß, um das Ganze zum Funktionieren zu bringen. Die DotLiquid Filter sind nicht wirklich kaskadierbar, die Fehlermeldungen obskur, wichtige Filter fehlen, etc. ... :confused:

Ich gebe deshalb eigentlich immer irgendwann auf und mache das Ganze in SQL direkt auf Datenbank-Basis und das sähe hier so aus ...
Code:
{% capture query -%}
SELECT cKundenNr+2000 FROM tkunde WHERE kKunde={{ Vorgang.InterneKundennummer }}
{% endcapture -%}
{% assign DebitorenNummer = query | DirectQueryScalar -%}
{{ DebitorenNummer }}

Das funktioniert übrigens auf SQL Basis sehr viel fehlertoleranter, denn dort ist die Kundennummer ja eigentlich ein String. Sobald der String aber nur eine Zahl enthält, kann man direkt mathematische Operationen damit durchführen.

Und falls hier jemand mitliest, bei dem das nicht der Fall ist und die Kundennummer auch Buchstaben enthält, wie z.B. "KD10001", dann ändert sich die Abfrage auch nur minimal und sieht dann so aus ...
Code:
{% capture query -%}
SELECT SUBSTRING(cKundenNr,3,5)+2000 FROM tkunde WHERE kKunde{{ Vorgang.InterneKundennummer }}
{% endcapture -%}
{% assign DebitorenNummer = query | DirectQueryScalar -%}
{{ DebitorenNummer }}

Das würde hier, also bei "KD10001" die ersten zwei Zeichen abschneiden (ab dem Dritten für Fünf...) und das wäre dann wieder "automagisch" eine Zahl und die Addition funktioniert sofort, also z.B. ohne explizite Typwandlung ... :)

Gruß,
Ingmar
 

TRainer1975

Aktives Mitglied
23. März 2019
6
1
Hallo zusammen,
wir haben folgende Problematik. Kunden wurden aus zwei Altsystemen übernommen, die Neukunden bekommen jetzt eine Kundennummer beginnend mit 10000.

Unser Hauptproblem ist die Debitorennummer, diese lautet bei uns immer 0, weil sie nicht gesetzt ist. In den Nummernkreis können wir die Debitorennummer nicht aufnehmen.
Die Idee war, die Debitorennummer automatisch per Workflow setzen zu lassen. Beginnen soll sie bei 10000 und dann immer fortlaufend einen hochzählen.

Hat uns hierzu jemand eine Lösung. Uns fehlt nur die richtige Angabe für den Zähler. Die Zahl beschränkt auf fünf Stellen, beginnend bei 10000 und dann hochzählen.

Viele Grüße

Tobias
 

Thomas

Sehr aktives Mitglied
15. Juli 2010
215
48
per Ameise exportieren. In Tabellenkalkulation Debit-Nummer entsprechend anlegen und per Ameise zurück importieren.
 

TRainer1975

Aktives Mitglied
23. März 2019
6
1
Das habe ich verstanden, aber welches eindeutige Merkmal gebe ich mit, damit beim Import auch dem Richtigen Kunden die richtige Debitorennummer zugeordnet wird?
 

TRainer1975

Aktives Mitglied
23. März 2019
6
1
Hi Jürgen,

an die habe ich auch gedacht. Meine Befürchtung ist, dass mir dann über die Ameise die Standardwerte gesetzt werden, was natürlich das absolute Chaos wäre.
Ich finde in keiner Beschreibung ob sich der Import auf die angegebenen Felder beschränkt, oder ob dann die Standardwerte gesetzt werden.

Gruß
Tobias
 

Jogi1962

Gut bekanntes Mitglied
24. März 2012
255
15
NRW
Hallo Tobias,

eigentlich importiert die Ameise nur das was du ihr eingibst.
Mache vorher eine Datenbanksicherung. Wenn was schief laufen sollte kannst du die zurück importieren.
Ist bei mir aber noch nie was passiert. Ich würde die Kundendaten

-Kundennummer
-Interner Schlüssel
-Debitorennummer
-Erstellt am

exportieren. Dann kannst du die Liste in Excel nach Datum (erstellt am) sortieren, die Debitorennummer vergeben und wieder importieren.

Wenn du natürlich noch verschiedene Kundengrupen, Kategorien, Sprachen usw. hast, würde ich diese sicherheitshalber mit exportieren und nachher wieder importieren.
Die Wawi nimmt die Standarwerte nur, wenn du keine Werte vorgibst, z.B. wenn du keine Kundengruppe angibst setzt die Wawi als Kundengruppe Endkunden.
 

TRainer1975

Aktives Mitglied
23. März 2019
6
1
Hallo Jürgen,

ich bin jetzt mal das Risiko eingegangen und habe:

- Kundennummer
- Interner Schlüssel
- Debitorennummer

exportiert. Bin dann über Excel gegangen und habe die Spalte "Kundennummer neu" hinzugefügt und die Spalte Debitorennummer dann mit der Kundennummer neu aktualisiert.
Die Kundennummer neu habe ich so angepasst, wie wir sie brauchen.

Ich habe dann nur vorhandene Kunden aktualisieren gewählt und als Kennzeichen auf den Internen Schlüssel geschalten.

Zum Glück hat alles funktioniert, die Standardwerte wurden nicht gesetzt. Danke für Deine Hilfe.

VG
Tobias
 

lesestoff

Gut bekanntes Mitglied
16. November 2009
174
1
Hi @Mander,

Grundsätzliches zuerst: Ja, die Kundennummer ist in der Datenbank als varchar(30) angelegt, soll heißen als String. Der erste Schritt wäre also eine Typwandlung in ein Integer und das macht man in Liquid/ DotLiquid, indem man den String (der eine Zahl enthält) z.B. mit 1 multipliziert, also {{ NumerischerString | Times: 1 }}. Umgekehrt, also von Interger oder Float in String geht es mit einem beliebigen Filter, der nur für Strings gilt, wie z.B. {{ IntegerWert | Trim }}.

Nach Adam Riese und Eva Zwerg hättest Du damit alles beieinander, um Dein Ziel zu erreichen, aber die Realität sieht anders aus und ist mit endloser Frustration gepflastert, weil schlicht nicht ersichtlich ist oder wird, was man noch alles tun muß, um das Ganze zum Funktionieren zu bringen. Die DotLiquid Filter sind nicht wirklich kaskadierbar, die Fehlermeldungen obskur, wichtige Filter fehlen, etc. ... :confused:

Ich gebe deshalb eigentlich immer irgendwann auf und mache das Ganze in SQL direkt auf Datenbank-Basis und das sähe hier so aus ...
Code:
{% capture query -%}
SELECT cKundenNr+2000 FROM tkunde WHERE kKunde={{ Vorgang.InterneKundennummer }}
{% endcapture -%}
{% assign DebitorenNummer = query | DirectQueryScalar -%}
{{ DebitorenNummer }}

Das funktioniert übrigens auf SQL Basis sehr viel fehlertoleranter, denn dort ist die Kundennummer ja eigentlich ein String. Sobald der String aber nur eine Zahl enthält, kann man direkt mathematische Operationen damit durchführen.

Und falls hier jemand mitliest, bei dem das nicht der Fall ist und die Kundennummer auch Buchstaben enthält, wie z.B. "KD10001", dann ändert sich die Abfrage auch nur minimal und sieht dann so aus ...
Code:
{% capture query -%}
SELECT SUBSTRING(cKundenNr,3,5)+2000 FROM tkunde WHERE kKunde{{ Vorgang.InterneKundennummer }}
{% endcapture -%}
{% assign DebitorenNummer = query | DirectQueryScalar -%}
{{ DebitorenNummer }}

Das würde hier, also bei "KD10001" die ersten zwei Zeichen abschneiden (ab dem Dritten für Fünf...) und das wäre dann wieder "automagisch" eine Zahl und die Addition funktioniert sofort, also z.B. ohne explizite Typwandlung ... :)

Gruß,
Ingmar
Ich weiss dass dieses Thema schon richtig alt ist, Aber ich bräuchte diese Funktion allerdings mit der addition von 20000.
Der Hintergrundprozess sagt er führt durch aber es geschieht keine änderung. Ich versuche diese Funktion als Workflow "Ausführen" zu nutzen.
Kann mir einer Weiterhelfen?
LG
Angelo
 

lesestoff

Gut bekanntes Mitglied
16. November 2009
174
1
Ich weiss dass dieses Thema schon richtig alt ist, Aber ich bräuchte diese Funktion allerdings mit der addition von 20000.
Der Hintergrundprozess sagt er führt durch aber es geschieht keine änderung. Ich versuche diese Funktion als Workflow "Ausführen" zu nutzen.
Kann mir einer Weiterhelfen?
LG
Angelo
Ach ja: in der Vorschau mit den Kundendaten wird die Debitorennummer korrekt berechnet.
 

lesestoff

Gut bekanntes Mitglied
16. November 2009
174
1
Hat keiner eine Idee? habe es gerade nochmal in der simulation durchgespielt, angeblich wird der Wert verändert, aber im Live-test bleibt die 0 in der Debitorennummer.