Neu E-Mail-Vorlagen: Eigene Felder aus dem Kunden in den Optionen nutzen

  • Wenn Ihr uns das erste Mal besucht, lest euch bitte zuerst die Foren-Regeln durch.

cash0581

Aktives Mitglied
22. September 2016
26
3
#1
Hallo,

ich versuche verzweifelt in den E-Mail-Optionen einen Benutzerdefinierten Empfänger anzulegen und dabei auf die Eigenen Felder im Kundenstamm zuzugreifen. Allerdings ist sind diese in den Variablen des Dot-Liquid-Editors nicht zu finden. Gibt es eine Möglichkeit irgendwie auf die Felder zugreifen zu können?

Vielen Dank.
 

cash0581

Aktives Mitglied
22. September 2016
26
3
#3
Hallo Rico,

natürlich schildere ich dir gern, was ich genau vorhabe. Ich habe im Kundenstamm ein Eigenes Feld angelegt, welches eine alternative E-Mailadresse (E-Mail Rechnungen) enthält. Diese E-Mailadresse würde ich gerne immer für den elektronischen Rechnungsversand verwenden, da wir einige Kunden mit abweichenden Rechnungsadressen haben. Den Befehl dazu wollte ich im Editor in den Mail-Vorlagen -> Mailoptionen (siehe-Screenshot) hinterlegen. Allerdings stehen die Kundeneigenen Felder hier nicht zur Auswahl.

Wäre super, wenn du mir sagen könntest, wie ich and dieses Feld komme? Vielen Dank im Voraus.
 

Anhänge

Rico Giesler

Administrator
Mitarbeiter
10. Mai 2017
10.485
974
#4
Ich sehe grad dass ihr die 1.4 nutzt. Hier könntet ihr mit Ansprechpartner arbeiten.
Also sinngemäß so:
If Ansprechparter = Empty
Rechnungsmailadresse
Else
Mailadresse von Ansprechpartner
 

cash0581

Aktives Mitglied
22. September 2016
26
3
#5
Super, vielen Dank für diesen Hinweis. Das klingt nach einer Lösung. Das bedeutet allerdings auch, dass ich auf die Eigenen Felder definitiv nicht zugreifen kann, richtig?
 

chmod

Aktives Mitglied
19. März 2012
76
3
#7
Hallo cash0581,
konntest du dein Vorhaben umsetzen? Ich bräuchte exakt die gleiche Problemlösung, bin aber nicht in der Lage, dem Ansatz von Rico zu folgen, d. h. die Formel funktionstüchtig zu erstellen. Falls deine Lösung funktioniert, würde ich mich sehr über ein Posten deiner Formel freuen (vielleicht auch nicht nur ich :) )
LG
chmod
 

cash0581

Aktives Mitglied
22. September 2016
26
3
#8
Hi chmod,

ich habe es umsetzen können. Ist allerdings noch nicht die perfekte Lösung, da man bei den Ansprechpartnern nur auf den ersten Datensatz zurückgreifen kann. Das bedeutet, sofern du bereits Ansprechpartner im Kundenstamm hinterlegt hast, greift das Ganze nicht. In diesem Fall müsstest du alle AP löschen und den alternativen Empfänger z.b. für die Buchhaltung als Ersten eintragen und danach alle Weiteren.

Jetzt aber zur Umsetzung.

1. Ansprechpartner im Kundenstamm anlegen. z.Bsp. "Buchhaltung"
2. In den Optionen der E-Mailvorlage beim Empfänger folgende Formel al Benutzerdefiniert hinterlegen. In meinem Fall greift die Formel auf das Abteilungsfeld in den Ansprechpartnern zu.

{% if Vorgang.Auftrag.Kunde.Ansprechpartner.ErstesObjekt.Abteilung == 'Buchhaltung' and Vorgang.Auftrag.Kunde.Ansprechpartner.ErstesObjekt.Abteilung != empty %}{{ Vorgang.Auftrag.Kunde.Ansprechpartner.ErstesObjekt.EMail }} {% else %}{{ Vorgang.Auftrag.Kunde.EMail }} {% endif %}

Sobald ein Ansprechpartner mit der Abteilung "Buchhaltung" angelegt ist, wird die Rechnung an diesen Kontakt versendet. Sonst immer an die normale Kunden E-Mail.

Viel Spaß damit
 

chmod

Aktives Mitglied
19. März 2012
76
3
#10
Hallo cash0581,
ich habe parallel zu deiner Antwort eben folgende Formel erarbeitet:

Code:
{% if Vorgang.Kunde.Ansprechpartner.ErstesObjekt.EMail == empty %}
  {{ Vorgang.Kunde.EMail }}
{% else %}
  {{ Vorgang.Kunde.Ansprechpartner.ErstesObjekt.EMail }}
{% endif %}
Das hat soweit zwar auf Anhieb funktioniert aber halt auch mit den von dir schon beschriebenen Nachteilen und Dingen, auf die man achten muss (erster Kontakt ...)

Ich werde nun mal deinen Lösungsansatz umsetzen und durchspielen und dann mit den Kollegen besprechen, welche wir zukünftig einsetzen wollen, sobald dann halt die 1.4 als stable freigegeben ist. Ganz lieben Dank aber für deine Ausführungen.

LG
chmod
 

chmod

Aktives Mitglied
19. März 2012
76
3
#11
Hallo Rico,
was genau meinst du könnte ich mit einer Schleife umgehen? Sorry, ihr Programmierer immer mit eurer Sprache ;)
Dass der Ansprechpartner an erster Stelle stehen muss bliebe aber wohl bestehen, oder?

LG
chmod
 

Rico Giesler

Administrator
Mitarbeiter
10. Mai 2017
10.485
974
#12
Mit umgehen meinte ich, dass ihr dann nicht auf den ersten Datensatz begrenzt wärt. (PS. Bin kein Programmierer, aber Danke für die Blumen) :)
 

chmod

Aktives Mitglied
19. März 2012
76
3
#13
Das hört sich jetzt sehr interessant an. Mal seh'n ob ich das umgesetzt bekomme, versuche ich gleich mal ...
 

chmod

Aktives Mitglied
19. März 2012
76
3
#14
Das könnte so funktionieren, oder?

Code:
{% for jtlAnsprechpartner in Vorgang.Kunde.Ansprechpartner -%}
{% if jtlAnsprechpartner.Abteilung == 'Buchhaltung' and jtlAnsprechpartner.EMail != empty %}
{{ jtlAnsprechpartner.EMail }}
{% else %}
{{ Vorgang.Auftrag.Kunde.EMail }}
{% endif %}
{% endfor -%}
In meinem ersten Versuch stimmt das Ergebnis mit dem Erwarteten überein. Kann das jetzt halt ohne zig Tests nicht abschätzen ob sich da noch ein Fallstrick dahinter verbirgt aber soweit so gut. Vielen Dank für den Ansatz, Rico :)

LG
chmod
 

Rico Giesler

Administrator
Mitarbeiter
10. Mai 2017
10.485
974
#15
Ja das sollte passen.
Kannst ja zur Not einfach mal einen Testkunden anlegen mit mehreren Ansprechpartnern die unterschiedliche Abteilungen haben.
Und dann schauen ob das Ergebnis stimmt.
Wüsste jetzt nicht warum es nicht gehen sollte.
 

chmod

Aktives Mitglied
19. März 2012
76
3
#16
So, einen weiteren Ansprechpartner mit anderer Abteilung dem Testkunden hinzugefügt welcher dann in der Liste den obersten Platz einnimmt und siehe da: die Rechnung wird an diesen versendet :(

Schade, der Rechnungsversand geht also doch an den ersten Kontakt, ohne dass dies nun in den Variablen so ersichtlich ist.

Wenn ich das richtig sehe müsste ich nun alle anderen Abteilungen in der Formel irgendwie ignorieren, dass es evtl. wieder gehen könnte, ganz egal wo der Ansprechpartner in der Liste platziert ist, richtig? Oder ginge das dann auch nicht?
 

chmod

Aktives Mitglied
19. März 2012
76
3
#17
Mir ist grad noch was anderes aufgefallen: Wenn ich einem Ansprechpartner eine neue Abteilung zuweise und diesen Kontakt dann abspeichere, den danach wieder öffne und die Abteilung löschen mag, dann wird das nicht umgesetzt, d. h. nach erneutem Speichern und Öffnen des Kunden ist der wieder der ursprünglichen Abteilung zugewiesen. Ich kann eine Abteilung zwar mit einer anderen überschreiben, nicht jedoch diese ganz raus löschen. Könnte das ein Bug sein oder gibt es da eine Überlegung dazu weshalb das so sein "muss", die ich grad nicht erkenne?
 

Rico Giesler

Administrator
Mitarbeiter
10. Mai 2017
10.485
974
#18
Ich glaube du müsstest hier mit einer SQL-Abfrage arbeiten die eine Verknüpfung (ein Join) mit der Abteilung herstellt.
Also:
JOIN {{ jtlAnsprechpartner.EMail }} WHERE {jtlAnsprechpartner.Abteilung == 'Buchhaltung' and jtlAnsprechpartner.EMail != empty %}

So ähnlich zumindest. :)

Das mit dem Löschen konnte ich nachstellen und habe dazu ein Ticket erstellt: https://issues.jtl-software.de/issues/WAWI-35802
 

chmod

Aktives Mitglied
19. März 2012
76
3
#19
jaja, so ähnlich :)

Habe es mit folgenden Zeilen versucht, nachdem ich die Syntax für "JOIN" im Onlinehandbuch versucht habe zu recherchieren:

Code:
JTL_DirectQuery ("SELECT jtlAnsprechpartner.Abteilung FROM jtlAnsprechpartner.Abteilung
JOIN jtlAnsprechpartner.EMail
jtlAnsprechpartner.Abteilung == 'Buchhaltung'
AND jtlAnsprechpartner.EMail != empty ")
Aber wie verwurstel ich das nun im Editor so, dass mit eine Vorschau angezeigt wird wie das mit meinem o. a. Code der Fall war? Ohne Vorschau wahrscheinlich auch keine Ausführung weil irgendwo 'n Fehler drin ist, vermute ich. An der Stelle mag ich einfach nicht ins Blaue schießen, nicht dass ich danach Phantomfehler in der ganzen DB auslöse und ganz andere Probleme habe, wenn auch nur Testsystem ...

LG
chmod
 

T4DT.GmbH

Offizieller Servicepartner
SPBanner
6. November 2018
135
22
Hannover
#20
Die Schleife hat ein paar kleine Probleme: Ist kein Ansprechpartner hinterlegt, bleibt das Feld leer. Gibt es in der Buchhaltung mehrere Ansprechpartner, werden alle Mail-Adressen hintereinander ausgegeben, somit bekommt keiner die Mail (weil ungültige Adresse). Das löst du in dem du in der Schleife immer dasselbe Feld überschreibst und am Ende, falls es immernoch leer ist, mit dem Kundendatensatz befüllst. Ganz am Ende gibst du dir den Wert aus. In etwa so:
Code:
{% assign mail ='' -%}
{% for jtlAnsprechpartner in Vorgang.Kunde.Ansprechpartner -%}
    {% if jtlAnsprechpartner.Abteilung == 'Buchhaltung' and jtlAnsprechpartner.EMail != empty -%}
        {% assign mail = jtlAnsprechpartner.EMail %}
    {% endif %}
{% endfor -%}
{% if mail == empty -%}
    {% assign mail = Vorgang.Kunde.EMail -%}
{%endif-%}
{{ mail }}
 
Zustimmungen: Rico Giesler