Andreas Tenzer
Hallo zusammen,
ich habe gestern einen großen Update-Sprung von 1.157 auf 1.161 gemacht.
Meines Wissens, sollte es ab 1.159 bei verschachtelten Kommandos (vor allem für mich wichtig: if-Kommando) möglich sein, die ursprünglich geforderten geschweiften Klammern ${test}$ normal durch eckige Klammern $[test]$ abzubilden.
Dies funktioniert aber leider (noch) nicht. Auch der neue if-Kommando-Konfigurator macht noch geschweifre Klammern.
Wie ist nun die Sachlage?
An welchen Stellen brauche ich zwingend noch die geschweiften Klammern? Wo nicht mehr? Ab wann werden diese voraussichtlich nicht mehr benötigt?
Lieben Dank für die Info, ein schönes Wochenende und viele Grüße aus Augsburg
Andreas Tenzer
Andreas Tenzer
Anmerkung:
Bei manchen Konstellationen scheint es zu funktionieren! Bei manchen dann aber wieder nicht.
Spannendes Beispiel:
$[if x ABR _ sel _ NN JNNN NNNN _ K _ zs_contains 'Test' 'Testantwort' $[_Rückfallwert]$]$ löst korrekt auf!
Wenn man aber einen Textbaustein mit diesem Inhalt hat (zum Beispiel $[test]$) und diesen direkt aufruft, dann wird der Rückfallwert nicht aufgelöst. Dies funktioniert dann nur wie gewohnt über die alte Syntax ${\uRückfallwert}$.
Komisch!
Steven Bürger
Prinzipiell sind beide Notationen für Sub-Platzhalter möglich, sie unterscheiden sich jedoch in der Ausführung.
Sub-Platzhalter mit den eckigen Klammern werden immer von innen nach außen ersetzt, also der innerste Platzhalter zuerst. Das hat den Vorteil, dass im Kommandonamen und den Parametern erstmal keine Leerzeichen und ähnliches kodiert werden müssen und die Ersetzung innerhalb von beliebigen anderen Platzhaltern möglich ist. Allerdings kann es Probleme geben, wenn das Ergebnis eines inneren Platzhalters Leerzeichen enthält.
Beispiel: Sie führen einen Platzhalter abc aus und wollen bei einem bestimmten Wert den Textbaustein sub_1 ausführen ansonsten einen Text ausgeben
$[if abc zs_equals Test $[sub_1]$ Rückfalltext]$
Hier wird nun von innen nach außen ersetzt, d.h. sub_1 wird zuerst ausgeführt.
Nehmen wir mal an, der Textbaustein sub_1 gibt einen Text mit Leerzeichen zurück, z.B. "Hallo Welt", dann steht nach der Ersetzung von sub_1:
$[if abc zs_equals Test Hallo Welt Rückfalltext]$
Wenn ihr Platzhalter abc nun tatsächlich den Wert "Test" liefert wird nun nicht der ganze Text von sub_1 ausgegeben, sondern nur der Text bis zum ersten Leerzeichen. Und es kommt noch schlimmer - durch das Leerzeichen im Ergebnis geht nun die Syntax dahinter kaputt, da nun "Welt" als zweiter Vergleichswert interpretiert wird und "Rückfalltext" nicht mehr als Rückfallwert, sondern als Ausgabewert, wenn abc das Ergebnis "Welt" liefert.
Dieses Problem könnten Sie jetzt zwar durch die Hochkomma-Syntax vermeiden, aber die Ersetzung von innen hat noch andere Nachteile. Wenn der Textbaustein sub_1 eine Frage enthält, so wird das Fenster für die Frage immer aufgehen, unabhängig davon, ob das if-Kommando sub_1 überhaupt ausgibt, da ja $[sub_1]$ in jedem Fall ersetzt wird.
Daher ist es sicherer, mit der Notation mit geschweiften Klammern zu arbeiten, wenn möglich (z.B. innerhalb des if-Kommandos). Hier wird der Platzhalter erst dann ausgeführt, wenn es wirklich nötig ist. Nachteil ist, dass gewisse Ersetzungen innerhalb es Platzhalters nötig sind, aber das übernimmt beim if-Kommando beispielsweise der Konfigurator. Das Beispiel von oben würde in dieser Notation so aussehen:
$[if abc zs_equals Test ${sub\u1}$ Rückfalltext]$
( der Unterstrich muss durch \u ersetzt werden )
Andreas Tenzer
Sehr geehrter Herr Bürger,
tausend Dank für diese super wertvollen Infos!
Fazit für mich: bei verschachtelten Kommandos dann doch lieber weiterhin konsequent mit geschweiften Klammern arbeiten.
Noch 2 Fragen:
- gibt aus Ihrer Sicht außer den teils komplizierten Ersetzungen zum Beispiel eines Unterstrichs noch weitere Konstellationen, bei denen die geschweiften Klammern Probleme machen könnten?
- was hat es genau mit den runden Klammern auf sich? Folgen diese noch einer anderen Logik?
Steven Bürger
zu den Fragen:
- Bisher ist mir da noch nichts bekannt. Ich empfehle bei if-Kommandos den Konfigurator zu nutzen, da dieser die Ersetzungen übernimmt. Da der noch recht neu ist, könnten natürlich noch bugs drin schlummern. Wenn also damit was nicht funktioniert, geben Sie gern bescheid!
- Die runden Klammern waren gewissermaßen der Vorgänger der geschweiften Klammern. Wenn ich mich richtig erinnere, haben die runden Klammern jedoch auch eine Bedeutung in Custom-Karteieinträgen, wodurch diese Syntax dort teilweise nicht verwendet werden konnte.
Andreas Tenzer
Herzlichen Dank!
Dann bleibe ich geschweift ;-) (bzw. beim Editor, lieben Dank auch nochmal auch nochmal für diesen!)
Sebastian Mai
Hallo,
darf ich mich einreihen in das Thema? Ich habe ein bisschen mit den KI-Tools experimentiert (siehe Handbuch).
Dabei ist ein CKE herausgekommen mit dem folgenden if-Kommando:
$[if $[palter]$ zs_less_then '50' '$[if $[finalPct]$ zs_less_then '3' 'Niedrig bis moderat' '$[if $[finalPct]$ zs_less_then '8' 'Hoch' 'Sehr hoch']$']$' '$[if $[palter]$ zs_less_then '70' '$[if $[finalPct]$ zs_less_then '5' 'Niedrig bis moderat' '$[if $[finalPct]$ zs_less_then '10' 'Hoch' 'Sehr hoch']$']$' '$[if $[finalPct]$ zs_less_then '8' 'Niedrig bis moderat' '$[if $[finalPct]$ zs_less_then '15' 'Hoch' 'Sehr hoch']$']$']$']$
Ansich alles gut aber in der Anwendung kommt heraus: z.b. "Sehr\\uhoch" manchmal auf "Niedrig_bis_moderat".
Ich habe versucht die inneren Klammern durch geschweifte Klammern zu ersetzen aber da kommt nix gutes bei raus. hat da jemand eine Idee? ;-)
Vorab herzlichen Dank und liebe Grüße
Sebastian Mai
Rainer Gunstmann
Sie haben innerhalb des ersten if Kommandos als "Alternativwert" weitere if Kommandos, also verschachtelte if Kommandos.
Bei meinen Versuchen dazu hatte ich auch immer Probleme mit der Ersetzung von Leerzeichen in Unterstriche oder \u, die ich mit allen Klammeroptionen nicht gelöst bekam. Ich habe dann einfach ein Textmakros für die verschachtelten if Kommandos erstellt. Das funktioniert bei mir und ist auch einfacher zu lesen / zu debuggen...
Sebastian Mai
Hallo,
können Sie mir sagen wie Sie das gemacht haben? ich hab den gesamten Block in einen Textbaustein gepackt. das Funktioniert allerdings nicht. Oder haben Sie jedes Item also z.B '$[if $[finalPct]$ zs_less_then '3' 'Niedrig bis moderat' in einen Textbaustein gepackt?
Vielen Dank schonmal für die prompte Antwort :-)
lg
Sebastian Mai
Sascha Kummer
Neben Herrn Gunstmanns Lösung habe ich diese Verschachtelung innerhalb des CKE so gelöst:
Ein nicht sichtbares (nicht editierbares) Feld (z.B. mit Variable: code) enthält:
$[if $[palter]$ zs_less_then 50 a 70 b c]$$[if $[finalPct]$ zs_less_then 3 3 5 5 8 8 10 10 15 15 99]$
Jetzt können Sie 'code' auswerten z.B.
$[if $[code]$ zs_equals a3 'Niedrig bis moderat' a8 'Hoch' a10 'Sehr hoch' a15 'Sehr hoch' a99'Sehr hoch' b5 'Niedrig bis moderat']$
usw., bei b5 habe ich aufgehört. So hätten Sie alle Bedingungen in einem CKE nur mit einer Zwischenauswertung.
VG