Neu Datenbankabfrage Auftrags-Emaildatum

Klebetoshi

Aktives Mitglied
15. Oktober 2015
61
8
Hallöchen,

mangels Kenntnisse bin ich an einer Datenbankanfrage gescheitert. Ich benötige diese als Erweiterte Eigenschaft für einen Workflow. Die entsprechende Workflow-Bedingung soll lauten "Auftrags-Emaildatum ist nicht leer". Als Variable gibt es die bekannte Spalte "E-Mail am" leider nicht. Demnach muss dieses Feld abgefragt werden.
Das Ziel ist es, dass der Workflow prüft, ob eine AB gemailt wurde und ob der Auftrag auf Vorkasse läuft, dann soll zeitversetzt eine Proforma-Rechnung hinterher geschickt werden.

Kann mir jemand helfen? :)
 

ongnamo

Sehr aktives Mitglied
31. März 2013
1.056
92
Hallo,

ich hätte jetzt auch diese bzw. ein vergleichbares Problem: Wie kann man abfragen, ob bei freigegebene Lieferantenbestellung die Email auch wirklich rausgegangen ist?

Wäre für jeden Tipp dankbar!
 

sebjo82

Sehr aktives Mitglied
3. Juni 2021
584
169
Hallöchen,

mangels Kenntnisse bin ich an einer Datenbankanfrage gescheitert. Ich benötige diese als Erweiterte Eigenschaft für einen Workflow. Die entsprechende Workflow-Bedingung soll lauten "Auftrags-Emaildatum ist nicht leer". Als Variable gibt es die bekannte Spalte "E-Mail am" leider nicht. Demnach muss dieses Feld abgefragt werden.
Das Ziel ist es, dass der Workflow prüft, ob eine AB gemailt wurde und ob der Auftrag auf Vorkasse läuft, dann soll zeitversetzt eine Proforma-Rechnung hinterher geschickt werden.

Kann mir jemand helfen? :)
Guck dir mal die Spalte dbo.tBestellung.dMailVersandt in der Datenbank an. Das sollte die Auftragsbestätigung per Mail sein
Code:
SELECT [kBestellung]
      ,[dErstellt]
      ,[dMailVersandt]
  FROM [eazybusiness].[dbo].[tBestellung]
  where [dbo].[tBestellung].dMailVersandt is not null
 

ongnamo

Sehr aktives Mitglied
31. März 2013
1.056
92
Ich nehme an, für die Lieferantenbestellung findet man analog das Emaildatum in einer DB-Tabelle, sonst könnte die Wawi das ja nicht anzeigen. Nur wie greife ich im Rahmen eines Workflows darauf zu? Vermutlich über die Erweiterten Eigenschaften, doch da enden meine Kenntnisse🤔
 

sebjo82

Sehr aktives Mitglied
3. Juni 2021
584
169
Jo, du kombinierst die SQL-Abfrage mit der Bestellnummer aus der List&Label Vorlage. Das sieht dann ca so aus:
Code:
JTL_DirectQuery("
SELECT dbo.tBestellung.dMailVersandt
FROM dbo.tBestellung
WHERE dbo.tBestellung.kBestellung = '"+Variable für interner Schlüssel der Auftragsnummer+"'
")

Ein Beispiel wie du eine SQL-Abfrage in den erweiterten Eigenschaften ( Workflow) ausführen kannst:
Code:
{% capture querySqlVorname -%}
SELECT
    tAdresse.cVorname,
    tkunde.kKunde,
    tkunde.cSperre
FROM tkunde
    INNER JOIN tAdresse
        ON tkunde.kKunde = tAdresse.kKunde
WHERE cSperre='Y'
    AND cVorname = '{{ Vorgang.Lieferung.Lieferadresse.Vorname }}'
{% endcapture -%}

Man beachte, dass die Variable hier anders eingebunden wird, als in List&Label Vorlagen:
nicht mit '"+ +"', sondern mit '{{ }}'

Ein kleiner Tipp: teste die Abfrage erst im SSMS bevor du diese in den erweiterten Eigenschaften implementierst. Sieht dann ca so aus:
1632744141765.png

Hier würde man dann nur noch versuchen die Auftragsnummer (interner Schlüssel) "2140" aus einer Variable zu bekommen
 
Zuletzt bearbeitet:

ongnamo

Sehr aktives Mitglied
31. März 2013
1.056
92
Hallo Sebjo82,

mein Ziel ist es, per Workflow eine Benachrichtigung an mich selbst zu mailen, wenn eine Lieferantenbestellung in Bearbeitung gesetzt wurde, ohne dass die Email an den Lieferanten rausging, das heißt, wenn im Email-Feld kein Wert steht.

Ich habe also dein SQL Beispiel auf die Lieferantenbestellung übertragen. Die Abfrage im SSMS ist kein Problem, jedoch bei der Einbettung in die mir unvertraute Dotliquid-Logik innerhalb der Erweitern Eigenschaften des WFs hapert es. Folgendes habe ich versucht:

{% assign result = 'SELECT dbo.tLieferantenBestellung.dGemailt FROM dbo.tLieferantenBestellung
WHERE dbo.tLieferantenBestellung.cEigeneBestellnummer = '{{ Vorgang.Belegnummer }}' ' | DirectQuery -%}

Diese Mimik habe ich aus der JTL Doku abgekupfert. https://guide.jtl-software.de/jtl-wawi/vorlagen/anwendungsbeispiele-direkter-datenbank-zugriff/

Aber ich bekomme irgendeinen regex-Fehler, mit dem ich nichts anfangen kann
1632767514346.png

Wenn es klappen würde, würde ich dann im Workflow den Namen der Erweiterten Eigenschaften ("Emaildatum") auf "ist leer" abfragen. Geht das überhaupt so oder muss ich das Ganze in ein if Statement einbetten und im Workflow letztlich auf true/false abfragen.

VG
Thomas
 

ongnamo

Sehr aktives Mitglied
31. März 2013
1.056
92
habe noch mit dem Code rumgespielt und irgendwie klappt es hiermit. Vielleicht nicht die eleganteste Lösung, aber immerhin:

{% capture result -%}
SELECT dbo.tLieferantenBestellung.dGemailt FROM dbo.tLieferantenBestellung WHERE dbo.tLieferantenBestellung.cEigeneBestellnummer = '{{ Vorgang.Belegnummer }}'
{% endcapture -%}
{% assign Emaildatum = result | DirectQueryScalar %}\
{% if Emaildatum != null %}
true\
{% else %}
false\
{% endif %}
 

sebjo82

Sehr aktives Mitglied
3. Juni 2021
584
169
Hallo Sebjo82,

mein Ziel ist es, per Workflow eine Benachrichtigung an mich selbst zu mailen, wenn eine Lieferantenbestellung in Bearbeitung gesetzt wurde, ohne dass die Email an den Lieferanten rausging, das heißt, wenn im Email-Feld kein Wert steht.

Ich habe also dein SQL Beispiel auf die Lieferantenbestellung übertragen. Die Abfrage im SSMS ist kein Problem, jedoch bei der Einbettung in die mir unvertraute Dotliquid-Logik innerhalb der Erweitern Eigenschaften des WFs hapert es. Folgendes habe ich versucht:

{% assign result = 'SELECT dbo.tLieferantenBestellung.dGemailt FROM dbo.tLieferantenBestellung
WHERE dbo.tLieferantenBestellung.cEigeneBestellnummer = '{{ Vorgang.Belegnummer }}' ' | DirectQuery -%}

Diese Mimik habe ich aus der JTL Doku abgekupfert. https://guide.jtl-software.de/jtl-wawi/vorlagen/anwendungsbeispiele-direkter-datenbank-zugriff/

Aber ich bekomme irgendeinen regex-Fehler, mit dem ich nichts anfangen kann
Den Anhang 71841 betrachten

Wenn es klappen würde, würde ich dann im Workflow den Namen der Erweiterten Eigenschaften ("Emaildatum") auf "ist leer" abfragen. Geht das überhaupt so oder muss ich das Ganze in ein if Statement einbetten und im Workflow letztlich auf true/false abfragen.

VG
Thomas
Das Problem ist wahrscheinlich ' ' ' ' gewesen. Du musst Quote-Marks abwechseln, d.h " ' ' " oder ' " " '
 

sebjo82

Sehr aktives Mitglied
3. Juni 2021
584
169
Du kannst in der SQL Abfrage auch schon auf NULL prüfen und dann einen bestimmten Wert ausgeben, falls 0. Damit kannst du dir die DotLiquid Logik sparen
https://docs.microsoft.com/de-de/sql/t-sql/functions/isnull-transact-sql?view=sql-server-ver15

Sollte dann so aussehen wahrscheinlich:
Code:
SELECT ISNULL(dbo.tLieferantenBestellung.dGemailt,'nichtGesendet')
FROM dbo.tLieferantenBestellung
WHERE dbo.tLieferantenBestellung.cEigeneBestellnummer = '{{ Vorgang.Belegnummer }}'

Dann setzt du im Workflow die Bedingung check if 'nichtGesendet' => Email nochmal senden (oder was auch immer du vorhattest)
 
Zuletzt bearbeitet: