IF/ELSE Abfrage über %OTOADDR Makro

  • Ich habe hier ein seltsames Problem und komme einfach nicht weiter, vielleicht kann mir jemand weiter helfen.

    Wenn an eine bestimmte Alias E-Mail Adresse geschrieben wird soll eine bestimmte Schnellvorlage ausgeführt werden, ansonsten soll eine Standard Antwort-Schnellvorlage ausgeführt werden.


    Die Abfrage funktioniert einwandfrei solange ich keine ELSE Definition hinzufüge. Ich vermute das es evtl. an der Postion (oder der Art) der Anführungszeichen liegt.

    Sobald ich die ELSE Bedingung für die Standard Schnellvorlage hinzufüge funktionieren die ersten drei Abfragen nicht mehr korrekt. Es wird die erste Schnellvorlage und zusätzlich die Standard Vorlage ausgeführt. Die letzte Abfrage mit der ELSE Definition funktioniert korrekt.

    In der Ritlabs Hilfe stehen als Beispiel noch zusätzlich Anführungszeichen in der letzten Abfrage mit der ELSE Definition; wenn ich diese hinzufüge funktioniert die Abfrage allerdings gar nicht mehr.

    Code: IF Abfrage ohne ELSE
    %IF:"%OTOADDR"="AAA@doamin.de":%QINCLUDE="Antwort-A"%-
    %IF:"%OTOADDR"="BBB@domain.de":%QINCLUDE="Antwort-B"%-
    %IF:"%OTOADDR"="CCC@domain.de":%QINCLUDE="Antwort-C"%-
    %IF:"%OTOADDR"="DDD@domain.de":%QINCLUDE="Antwort-D"%-
    Code
    %IF:"%OTOADDR"="AAA@domin.de":%QINCLUDE="Antwort-A"%-
    %IF:"%OTOADDR"="BBB@domin.de":%QINCLUDE="Antwort-B"%-
    %IF:"%OTOADDR"="CCC@domain.de":%QINCLUDE="Antwort-C"%-
    %IF:"%OTOADDR"="DDD@domain.de":%QINCLUDE="Antwort-D":%QINCLUDE="Antwort-default"%-
  • Wenn es nach der Hilfe geht, müssen die Werte für Then-Zweig und Else-Zweig in Anführungszeichen. Die alte Hilfe besagte nur, dass der Else-Zweit auch weider ein Makro sein kann.

    Ob das so noch stimmt, weiß ich nicht.

    Und wie The Bat! das einliest!? Die Doku zu Makros ist ja so extrem rudimentär.

    Bei mir ist das Debuggen von Makros ein Drama.

    Vielleicht weiß sanyok o.a. mehr.


    The Bat! Pro 11.x BETA (32bit) | Win 11 Pro x64 | GnuPG 2.4.x | XMP + Regula

    Wer mich Er oder der Drache nennt, bekommt von der Drachin Pratze und Feuer zu spüren.

    Einmal editiert, zuletzt von GwenDragon (20. Juli 2020 um 15:18)

  • Ich meine auch, dass hier die Anführungszeichen falsch gesetzt sind. Bei %IF müssen sie überall sein, also beim IF-Wert, beim THEN-Wert und beim ELSE-Wert. Die o.g. Vorlage müsste daher so aussehen:

    Code
    %IF:"%OTOADDR=AAA@domin.de":"%QINCLUDE=Antwort-A"%-
    %IF:"%OTOADDR=BBB@domin.de":"%QINCLUDE=Antwort-B"%-
    %IF:"%OTOADDR=CCC@domain.de":"%QINCLUDE=Antwort-C"%-
    %IF:"%OTOADDR=DDD@domain.de":"%QINCLUDE=Antwort-D":"%QINCLUDE=Antwort-default"%-

    Wenn's so nicht klappt, müsste man mit Apostrophen innerhalb der jeweiligen Werte nachhelfen. Diese müssen jedenfalls voneinander durch Anführungszeichen sowie Doppelpunkte getrennt sein.

    Edit:

    Oder mit mehr Anführungszeichen:

    Code
    %IF:"%OTOADDR"="AAA@domin.de":"%QINCLUDE"="Antwort-A"%-
    %IF:"%OTOADDR"="BBB@domin.de":"%QINCLUDE"="Antwort-B"%-
    %IF:"%OTOADDR"="CCC@domain.de":"%QINCLUDE"="Antwort-C"%-
    %IF:"%OTOADDR"="DDD@domain.de":"%QINCLUDE"="Antwort-D":"%QINCLUDE"="Antwort-default"%-
  • Die o.g. Vorlage müsste daher so aussehen:

    in der Form wird immer nur die Default Vorlage ausgeführt.


    Oder mit mehr Anführungszeichen:

    In der Form gibt TB! folgendes aus:

    Code
    Schnellvorlage "" konnte nicht gefunden werden===

    Edit: btw. die Formatvorlage ist in Nur-Text, und befindet sich direkt in der 'Antwort'-Vorlage der Kontoeigenschaften.


    PS.

    Ich meine auch, dass hier die Anführungszeichen falsch gesetzt sind.

    ohne den ELSE Wert funktionieren alle Schnellvorlagen korrekt auf die Abfragen.

  • In der Form gibt TB! folgendes aus:

    Komisch ist, dass bei der von der Tageszeit abhängigen Anredevorlage gerade alle Anführungszeichen gesetzt werden müssen, damit sie funktioniert. Gwen hat mal eine Vorlage hier und sogar im BT gepostet. Erst nachdem die Anführungszeichen geändert wurden, klappte es.

    Jedenfalls habe ich das jetzt selbst getestet und deine eigene Vorlage klappt bei mir, nachdem ich %OTOADDR in %TOADDR geändert habe. Sie soll also so aussehen:

    Code
    %IF:"%TOADDR"="AAA@domin.de":%QINCLUDE="Antwort-A"%-
    %IF:"%TOADDR"="BBB@domin.de":%QINCLUDE="Antwort-B"%-
    %IF:"%TOADDR"="CCC@domain.de":%QINCLUDE="Antwort-C"%-
    %IF:"%TOADDR"="DDD@domain.de":%QINCLUDE="Antwort-D":%QINCLUDE="Antwort-default"%-


    ohne den ELSE Wert funktionieren alle Schnellvorlagen korrekt auf die Abfragen.

    Im Prinzip ist ELSE, das auf einen Standartwert verweist, unnötig, denn man kann die Standardvorlage auch gleich als Antwortvorlage verwenden. Diese wird dann sowieso verwendet, wenn keine der IF-Bedingungen greift. So ein ELSE ist dann quasi doppeltgemoppelt.

  • und deine eigene Vorlage klappt bei mir, nachdem ich %OTOADDR in %TOADDR geändert habe. Sie soll also so aussehen:

    hier funktioniert es nicht, es wird immer die Standard-Vorlage benutzt.

    Ich habe die Abfragen auch mal ausgelagert und als TXT gespeichert - das gleiche Ergebnis.

    Hmmm, ob's an der v7.x liegt?

    Edit 21:22: gerade das ganze mit der v8.8 getestet, das gleiche Ergebnis, es wird immer die default Vorlage verwendet.


    denn man kann die Standardvorlage auch gleich als Antwortvorlage verwenden. Diese wird dann sowieso verwendet, wenn keine der IF-Bedingungen greift.

    Ich habe aber keine Stanfdardabfrage definiert, weil die Abfragen in der Standardvorlage im Konto gelistet sind und dort beim Antworten greifen sollen..

  • Hmmm, ob's an der v7.x liegt?

    Ich hab's mit v7.1.14 getestet.

    In der Hilfe steht jedenfalls, dass sowohl der THEN- als auch der ELSE-Wert komplett in Anführungszeichen stehen müssen. Diese Vorlage mit einer einzigen IF-Bedingung funktioniert daher ohne Probleme:

    Code
    %IF:"%TOADDR"="DDD@domain.de":"%QINCLUDE='Antwort-D'":"%QINCLUDE='Antwort-default'"%-

    Probleme entstehen erst, wenn man weitere IF-Bedingungen einfügt. Diese werden zwar korrekt ausgeführt, aber zusammen mit dem ELSE-Wert, obwohl dort kein ELSE-Wert steht. Im o.g. Beispiel wird also die Vorlage "Antwort-default" bei den ersten beiden IFs zusätzlich mit eingefügt, nicht jedoch bei dem dritten IF.

    Es hilft offensichtlich nicht, wenn man den ELSE-Wert auch zu den ersten beiden hinzufügt. Dann wird die Standardvorlage sogar zweimal eingefügt.

    Entweder ist ELSE also gar nicht für mehrere IF-Bedingungen gedacht oder man muss diese irgendwie separieren, vielleicht durch weitere Anführungszeichen.


    Ich habe aber keine Stanfdardabfrage definiert

    Wieso kopierst du nicht die Schnellvorlage "Antwort-default" zusammen mit den o.g. IF-Bedingungen in die normale Antwortvorlage des Mailkontos? Dann wäre ELSE entbehrlich, weil diese Antwortvorlage immer automatisch eingreifen wird, wenn keine der IF-Bedingungen erfüllt ist.

  • Ich glaube, ich hab's. Diese Vorlage müsste jetzt funktionieren:

    Code
    %IF:"%TOADDR"="AAA@domain.de":"%QINCLUDE='Antwort-A'":%-
    %IF:"%TOADDR"="BBB@domain.de":"%QINCLUDE='Antwort-B'":%-
    %IF:"%TOADDR"="CCC@domain.de":"%QINCLUDE='Antwort-C'":%-
    %IF:"%TOADDR"="DDD@domain.de":"%QINCLUDE='Antwort-D'":"%QINCLUDE='Antwort-default'"%-

    Es fehlten also nicht nur die Anführungszeichen für die THEN- und ELSE-Werte, sondern auch die Doppelpunkte am Ende jeder IF-Bedingung. Bei mir klappt es jetzt jedenfalls. ELSE wird nur ausgeführt, wenn keine der vier IF-Bedingungen erfüllt ist.

  • Wieso kopierst du nicht die Schnellvorlage "Antwort-default" zusammen mit den o.g. IF-Bedingungen in die normale Antwortvorlage des Mailkontos?

    Das hatte ich getestet, die Abfrage wurde allerdings nicht beendet wenn der Wert gefunden wurde. Die korrekte Vorlage wurde zwar ausgeführt, doch anschließend wurde die Default-Vorlage zusätzlich abgearbeitet und eingefügt. Das Problem sollte vermutlich mit dem zusätzlichen ELSE auch hier behoben sein.

    Ich glaube, ich hab's. Diese Vorlage müsste jetzt funktionieren:

    In der Form funktioniert sie bei mir nicht. Wenn ich TOADDR schreibe, wird immer die Default-Vorlage ausgeführt.

    Ich habe sie noch einmal umgeändert, und mit OTOADDR funktioniert sie nun endlich.

    Danke für deine Hilfe. :thumbup:

    Somit ist also das Beispiel in der Hilfe von Ritlabs, bezüglich dieses Makros falsch beschrieben.

  • Somit ist also das Beispiel in der Hilfe von Ritlabs, bezüglich dieses Makros falsch beschrieben.

    Dann melde das bitte an den Support, dass die das korrigieren auf der Hilfe-Seite!


    The Bat! Pro 11.x BETA (32bit) | Win 11 Pro x64 | GnuPG 2.4.x | XMP + Regula

    Wer mich Er oder der Drache nennt, bekommt von der Drachin Pratze und Feuer zu spüren.

  • Somit ist also das Beispiel in der Hilfe von Ritlabs, bezüglich dieses Makros falsch beschrieben.

    Gerade das Beispiel aus der Online-Hilfe ist doch richtig. Man hätte es genauer unter die Lupe nehmen sollen. Zunächst steht dort in der linken Spalte, dass die THEN- und ELSE-Werte in Anführungszeichen gesetzt werden müssen, was hier fehlte. Und in dem Beispiel rechts sieht man zusätzlich, wie zwei IF-Bedingungen miteinander verknüpft werden, wobei eine davon noch einen ELSE-Wert hat, also wie in der vorliegenden Vorlage:

    Code
    %IF:"%TIME"<"12:00":"Morgen":%- 
    "%IF:'%TIME'>'17:00':'Abend':'Tag'"
  • Bedeutet das verschachtelte IF-THEN-ELSE-Ketten nun mehrfach in Anführungszeichen bzw. ähnliche Trenner gesetzt werden müssen?

    Sowas ist ja falsch (auch wenn es über Jahre funktionierte):

    Code
    %IF:"%TIME='hh:mm:ss'">="00:00:00":%IF:"%TIME='hh:mm:ss'"<="04:59:59":"Gute Nacht"%-
    %IF:"%TIME='hh:mm:ss'">="05:00:00":%IF:"%TIME='hh:mm:ss'"<="08:59:59":"Guten Morgen"%-
    %IF:"%TIME='hh:mm:ss'">="09:00:00":%IF:"%TIME='hh:mm:ss'"<="18:59:59":"Guten Tag"%-
    %IF:"%TIME='hh:mm:ss'">="19:00:00":%IF:"%TIME='hh:mm:ss'"<="23:59:59":"Guten Abend"%-

    Weil ja jeder THEN- und ELSE-Teil wiederum gequotet gehört.


    The Bat! Pro 11.x BETA (32bit) | Win 11 Pro x64 | GnuPG 2.4.x | XMP + Regula

    Wer mich Er oder der Drache nennt, bekommt von der Drachin Pratze und Feuer zu spüren.

  • Bedeutet das verschachtelte IF-THEN-ELSE-Ketten nun mehrfach in Anführungszeichen bzw. ähnliche Trenner gesetzt werden müssen?

    THEN- und ELSE-Werte müssen komplett in Anführungszeichen gesetzt werden, also in etwa auf Deutsch:

    Code
    WENN:"Ausdruck"="Wert":"DANN hier alles in Anführungszeichen":"SONST hier alles in Anführungszeichen"

    Es wurde im Beispiel von de-bugger kompliziert, weil dort Makros mit Werten statt nur Werte wie im Online-Beispiel verwendet wurden, also quasi Werte innerhalb von Werten. Diese mussten daher zusätzlich durch Apostrophe separiert werden, sonst hat TB! immer gemeldet, dass der jeweilige Schnellvorlagenname nicht gefunden wurde.

    Und der ELSE-Wert griff bei allen IF-Bedingungen ein, weil die Dopelpunkte am Ende der ersten drei fehlten, wodurch diese voneinander getrennt werden.

    Weil ja jeder THEN- und ELSE-Teil wiederum gequotet gehört.

    In deinem Beispiel ist aber kein ELSE-Wert enthalten, sondern nur THEN-Werte. Alle vier Tageszeiten sind durch IF-Bedingungen umfasst. Wenn die Uhrzeit x ist, dann soll man x sagen usw. Das "Sonst muss man y sagen" gibt's hier gar nicht.

  • Ich dachte der nächste %IF-Strang wäre der ELSE-Wert, so jedenfalls würde mir das als Programmierein einleuchten.

    Also ich kapiere immer noch nicht ganz diese seltsame Makro-Syntax in The Bat!


    The Bat! Pro 11.x BETA (32bit) | Win 11 Pro x64 | GnuPG 2.4.x | XMP + Regula

    Wer mich Er oder der Drache nennt, bekommt von der Drachin Pratze und Feuer zu spüren.

  • Ich dachte der nächste %IF-Strang wäre der ELSE-Wert,

    Nein, das sind in jeder Zeile einfach nur zwei IF-Bedingungen, da ja auch zweimal %IF steht, also WENN die Uhrzeit mehr als x und WENN die Uhrzeit weniger als y ist, DANN die Anrede #1 verwenden. Das ELSE gibt's hier nicht.

    In einer Programmiersprache ist es genauso. Da kann man viele IFs einbauen.

    Mit dem ELSE müsste es in etwa so aussehen:

    Code
    %IF:"%TIME='hh:mm:ss'">="09:00:00":%IF:"%TIME='hh:mm:ss'"<="18:59:59":"Guten Tag":"Grüßditsch!"%-

    Also noch einen zusätzlichen Doppelpunkt und einen ELSE-Wert in Anführungszeichen.

  • Du ich kann ja programmieren, aber die Doku ist so schlecht über Jahrzehnte bei The Bat!, um zu erkennen welche Syntax erlaubt ist. Und ein Debugging fehlt auch seit langem.

    Moment, heißt das, man kann den Else-Teil doch weglassen? In der Hilfe ist das zu %IF nicht so logisch.
    Und ich ging nicht davon aus, dass The Bat!-Makros so ähnlich wie in einer Programmierprache zu schreiben sind.

    Also ist das erlaubt!?

    %IF:"%FROMNAME"="GwenDragon":"Drache!!!! Feuer!!"


    The Bat! Pro 11.x BETA (32bit) | Win 11 Pro x64 | GnuPG 2.4.x | XMP + Regula

    Wer mich Er oder der Drache nennt, bekommt von der Drachin Pratze und Feuer zu spüren.

    2 Mal editiert, zuletzt von GwenDragon (22. Juli 2020 um 18:10)

  • Ich werf' auch mal meine Mütze in den Ring:

    ich habe mir mal LISP angeschaut und beigebracht, deshalb bevorzuge ich das hier bei den TB-Makros:

    [nur if]:

    Code
    %IF("%FROMNAME"="GwenDragon", "Drache!!!! Feuer!!") 

    bzw.

    [if/else]:

    Code
    %IF("%FROMNAME"="GwenDragon","Drache!!!! Feuer!!", "Meer Wasser")

    Wer die Excel-Funktionen (Formeln) bzw. Libreoffice-Calc-Funktionen (Formeln) kennt, fühlt sich da zu Hause.

    Das Hochkomma kann man nutzen, um Text, der Anführungszeichen enthält, in Anführungszeichen auszugeben, da dreimal Anführungszeichen nicht funktionieren.

    "Just my two Cents."

    Jörg Schiermeier
    Informatiker, Bielefeld

    The Bat! professional v9.x (32bit NAU) mit XMP-, Regula- und Shell-Plugin • wine v9.x • devuan linux (excalibur/ceres)

  • Moment, heißt das, man kann den Else-Teil doch weglassen?

    Ja. In der Anredevorlage ist er ja weg. Es kommt eben darauf an, was man erreichen will. Wenn man z.B. will, dass bei einer bestimmten Bedingung etwas passiert, sonst aber gar nichts passieren soll, dann braucht man auch keinen ELSE-Wert. Normalerweise wird dann einfach die Standardvorlage weiter verwendet. Den ELSE-Wert braucht man nur dann, wenn man will, dass wenn die Bedingung nicht erfüllt ist, ebenfalls etwas passieren soll, aber halt etwas Anderes. Dann muss man dieses Andere natürlich extra definieren.

    Also ist das erlaubt!?

    %IF:"%FROMNAME"="GwenDragon":"Drache!!!! Feuer!!"

    Ja. Der THEN-Wert wird in den Nachrichtentext eingefügt, wenn die IF-Bedingung erfüllt ist. Da es keinen ELSE-Wert gibt, wird nichts in den Nachrichtentext eingefügt, wenn die IF-Bedingung nicht erfüllt ist.