AEL && notation

daemonb

Neuer User
Mitglied seit
12 Nov 2006
Beiträge
48
Punkte für Reaktionen
0
Punkte
0
Hallo liebe Gemeinde,

ich habe gerade folgendes Problem, ich wollte in ael eine Schleife mit einem && schreiben, gibt es denn nur ||???

if(${var} && ${var} != ${CALLERID(num)})

Geht das denn garnicht?

Danke

DaemonB
 
Okay, meine Notation von Oben funktioniert, allerdings Wenn ${var} nicht gesetzt wird, bekomme ich folgenden Fehler:

[Apr 18 14:42:00] WARNING[17855]: ast_expr2.fl:398 ast_yyerror: ast_yyerror(): syntax error: syntax error, unexpected '&', expecting $end; Input:
&& != 66
^
[Apr 18 14:42:00] WARNING[17855]: ast_expr2.fl:402 ast_yyerror: If you have questions, please refer to doc/channelvariables.txt in the asterisk source.

Eigentlich müsste er die Schleife doch schon beenden, sobald die erste Notation nicht zutrifft. Wäre ja mühselig zwei Schleifen zu erstellen.
 
und warum nicht ?
Code:
if(${var} != ${CALLERID(num)})
 
gibt es den if befehl so selber ueberhaubt?
Also im dem Buch habe ich nichts darueber gefunden ....
nur halt gotoif....

Also dann



exten => 123,1,GotoIf(${var} != ${CALLERID(num)}?ok:nein)
exten => 123,10(ok),
exten => 123,20(nein),

und warum so lange verstehe das nicht ganz genau reicht das nicht einfach theoretisch
if(${var}= ${CALLERID(num)})?
 
Fredjam schrieb:
gibt es den if befehl so selber ueberhaubt?

Bei AEL v2 schon

@daemonb Kannst du vielleicht mal etwas ausführlicher beschreiben was du machen willst? (event. mit Schleife)

Btw. mit Hilfe von aelparse kann man sich auch den extensions.conf Syntax seines AEL codes ausgeben lassen.
 
if(${var} != ${CALLERID(num)})

${var} ist ein eingetragener Forward, welcher aus der Datenbank kommt, ist dieser gesetzt, ist die Variable gefüllt, ist dieser nicht gesetzt ist die Variable leer und ich bekomme eine Fehlermeldung.

Die ungefähr so lautet AELparse error

!= 44

Macht durchaus sinn, da die Variable ja leer ist.

Ich kenne es von php nur so

if(${var} && ${var} != ${CALLERID(num)})

so würde zunächst überprüft werden ob die Variable existiert, wenn nicht passiert nichts, ansonsten würde er noch die und Bedingung überprüfen. Dies scheint bei AEL allerdings nicht zu geschehen.

Achja: Nutze Asterisk 1.4.2
 
Nur mal so als Hilfe für diejenigen die AEL nicht verwenden:
Aus AELv2 (s. AEL Loop Beispiel auf voip-info, Link s. oben/Sig)
Code:
    1 => {
         for (x=0; ${x} < 3; x=${x} + 1) {
              Verbose(x is ${x} !);
              if( ${x} == 2 && ${y} == 17)
                   break;
              if(${x} == 2 && ${y} == 16)
                   continue;
         }
    }
(Hinweis continue; /*keep going */ aus dem org. Bsp. geht bei mir nicht, ich musste den Kommentar entfernen)

wird
Code:
exten => 1,1,Set(x=$[0])
exten => 1,2,GotoIf($[${x} < 3]?3:12)
exten => 1,3,Verbose(x is ${x} !)
exten => 1,4,GotoIf($[${x} == 2 && ${y} == 17]?5:6)
exten => 1,5,Goto(12)
exten => 1,6,NoOp(Finish if-for-loops-1-2)
exten => 1,7,GotoIf($[${x} == 2 && ${y} == 16]?8:9)
exten => 1,8,Goto(2)
exten => 1,9,NoOp(Finish if-for-loops-1-3)
exten => 1,10,Set(x=$[${x} + 1])
exten => 1,11,Goto(2)
exten => 1,12,NoOp(Finish for-loops-1)


Um eine Variable zu Testen s. AEL Hints and Bugs


The safest way to check for a null strings is to say $[ "${x}" = "" ] The old way would do as shell scripts often do (but shouldn't, as that will yield the same problems as here), and append something on both sides, like this: $[ ${x}foo = foo ]. The trouble with the old way, is that, if x contains any spaces, then problems occur, usually syntax errors. It is better practice and safer to wrap all such tests with double quotes! Also, there are now some functions that can be used in a variable referenece, ISNULL(), and LEN(), that can be used to test for an empty string: ${ISNULL(${x})} or $[ ${LEN(${x}) = 0 ].
 
Okay hat mir schon ein wenig geholfen, das Grundproblem ist natürlich geblieben:


if(${LEN(${FORWARD})} > 0 && ${LEN(${caller})} > 0 && ${FORWARD} != ${caller} )

[Apr 19 13:57:49] WARNING[20533]: ast_expr2.fl:398 ast_yyerror: ast_yyerror(): syntax error: syntax error, unexpected '!=', expecting '-' or '!' or '(' or '<token>'; Input:
0 > 0 && 2 > 0 && != 66

Fehler hat durchaus seine Berechtigung, finde es nur doof Schleifen so verschachteln zu müssen. Hat noch jemand eine Idee?
 
AEl verwendet zwar den C/C++ Syntax, aber der Ausdruck wird direkt in Asterisk verwendet (also so als ob er in der extensions.conf steht).
Asterisk kann das eventuell (?) nicht.

S. doc/channelvariables.txt für eine genauere Beschreibung.

BTW:
Vielleicht hilft das jemanden um weiterzuhelfen:
Das obige Bspw wird übersetzt in
Code:
GotoIf($[${LEN(${FORWARD})} > 0 && ${LEN(${caller})} > 0 && ${FORWARD} != ${caller} ]?3:4)
Und das Problem ist, das zwar die Variablen FORWARD und caller überprüft werden, allerdings nicht wie in C/C++ von links nach rechts, sondern immer der gesamte Ausdruck.



BTW II:
Wenn egal wäre ob die Variablen existieren oder nicht, müsste auch das gehen:
Code:
if("${FORWARD}" != "${caller}" )
 
und wenn du noch einen wert voran stelltst? Also z.B. so:
Code:
if(0${var} != 0${CALLERID(num)})

Habe ich allerding auch noch nicht getestet
 
Geht nicht, habe aber auch herausgefunden, dass meine idee so nicht umzusetzen geht, da ich die sachen sowieso einzeln abfragen muss....

danke

DaemonB
 
Kostenlos!

Statistik des Forums

Themen
247,830
Beiträge
2,274,418
Mitglieder
376,821
Neuestes Mitglied
ub666