Neu Dotliquid: slice Funktion integrieren um Anfang und Ende einer Zahl auszuschneiden

  • Temporäre Senkung der Mehrwertsteuer Hier findet ihr gesammelt alle Informationen, Videos und Fragen inkl. Antworten: https://forum.jtl-software.de/threads/mehrwertsteuer-senkung-vom-01-07-31-12-2020-offizieller-diskussionthread-video.129542/

gutberle

Sehr aktives Mitglied
29. März 2011
1.272
345
Hi @Xantiva,

das hatten wir schon einige Male hier im Forum, z.B. hier und wir Beide hatten in einer Teamwork-Aktion ;) das hier ff. als Lösung vorgeschlagen. Das funktioniert natürlich immer noch und ist eigentlich ein guter und praktikabler Workaround solange es slice noch nicht gibt.

Ich denke, dass dieser Vorschlag hier am Besten im Umfrage-Thread von @Rico Giesler zu fehlenden Workflow Aktionen aufgehoben wäre. Da stehen auch schon andere eher DotLiquid bezogene Dinge, denn die Erweiterten Eigenschaften und damit auch DotLiquid sind ja ein wichtiger Bestandteil der Workflows.

Gruß,
Ingmar
 
  • Gefällt mir
Reaktionen: Xantiva

Xantiva

Sehr aktives Mitglied
28. August 2016
1.410
219
Düsseldorf
Was Du alles im Kopf hast :D

Code:
{% assign result = 'SELECT SUBSTRING(CAST(NEWID() AS CHAR(36)),1,8)' | DirectQueryScalar -%}
Aber wie soll ich in das SQL meine Variable rein bekommen?
Code:
{% assign result1 = 'SELECT SUBSTRING("Test",1,100)' | DirectQueryScalar -%}
Das erzeugt einen ...
Fehler im Befehl: Ungültiger Spaltenname "Test".

Aber mein akuter Druck ist auch weg, da ich ein anderes Exportformat implementiert habe, wo ich das nicht benötige.
 

gutberle

Sehr aktives Mitglied
29. März 2011
1.272
345
Der Fehler kommt daher, dass die einfachen DotLiquid SQL-Queries keine Mischung aus Text und Variablen erlauben, weshalb "Test" als Text übergeben wird und weil Text in SQL in einfachen Anführungszeichen stehen muss, hält SQL das für den Namen einer Tabellenspalte, die es dann nicht gibt, usw.

Um einen String für die SQL Query zusammenzustellen, der aus Text und aus Variablen besteht, muss man einen {% capture query %} Block bemühen und das sieht dann so aus ...
Code:
{% capture query -%}
SELECT SUBSTRING('{{ Vorgang.Sonstiges.Hinweis }}',1,20)
{% endcapture -%}
{% assign Slice = query | DirectQueryScalar -%}
{{ Slice }}
... und als Beispiel habe ich hier mal einen Auftrags-Hinweis (aka "Sonstiges") genommen, aber jede, auch eigene Variablen gehen. Und natürlich kannst Du dann zwecks Übersichtlichkeit auch "mit Gewalt" in einer einzigen Zeile schreiben ... :cool:
 
  • Gefällt mir
Reaktionen: Xantiva

gutberle

Sehr aktives Mitglied
29. März 2011
1.272
345
... und hier mal der gleiche Effekt in nur einer einzigen Zeile und ohne unnötigem Krams, wie das {% assign %} ...
Code:
{% capture query -%}SELECT SUBSTRING('{{ Vorgang.Sonstiges.Hinweis }}',1,20){% endcapture -%}{{ query | DirectQueryScalar }}
Damit ist das Ganze wirklich handlich und es wird klar, warum ich das als guten Workaround ansehe. Man muss dann nur noch die Variable gegen die eigene austauschen, ggfls. die Slice Parameter anpassen, das fühlt sich eigentlich wie ein Slice(von,für) an ...