C.82. MacroExclusive()

Ruft ein zuvor definiertes Makro auf, aber nur eines zu einem gegebenen Zeitpunkt.
MacroExclusive(macroname[,Arg1[,Arg2[,...]]])
Führt – wie Macro() – ein im Context macro-macroname definiertes Makro aus (und nur das eine!), indem es zur s-Extension dieses Contextes springt und nach der Ausführung des Makros zurückkehrt. Wird das Makro, während es bereits läuft, an einer anderen Stelle des Dialplanes noch einmal aufgerufen, so muss diese Instanz warten, bis das erste Makro fertig abgearbeitet ist.
Die angerufene Extension, Context und Priorität sind innerhalb des Makros in ${MACRO_EXTEN}, ${MACRO_CONTEXT} und ${MACRO_PRIORITY} verfügbar. Die Parameter Arg1, Arg2 ... werden im Makro-Context zu ${ARG1}, ${ARG2} usw.
Macro() liefert -1 zurück, falls irgendein Schritt des Makros -1 zurückliefert, sonst 0. Falls bei Beendigung des Ablaufs ${MACRO_OFFSET} gesetzt ist, versucht die Anwendung, bei Priorität n+1+MACRO_OFFSET fortzufahren, falls ein solcher Schritt existiert, sonst bei n+1.
Falls die Goto()-Anwendung aus dem Makro heraus aufgerufen wird, wird das Makro enden und die Kontrolle an das Ziel von Goto() gehen.
; ein Makro definieren, das vom übergebenen Wert herunterzählt:
[macro-countdown]
exten => s,1,Set(COUNT=${ARG1})
exten => s,n,While($[ ${COUNT} > 0])
exten => s,n,SayNumber(${COUNT})
exten => s,n,Set(COUNT=$[ ${COUNT} - 1 ])
exten => s,n,EndWhile()

[default]
exten => 123,1,MacroExclusive(countdown,3)   ; das Makro "countdown" mit ARG1=3 aufrufen
exten => 124,1,MacroExclusive(countdown,5)   ; das Makro "countdown" mit ARG1=5 aufrufen
Asterisk-Versionen:
        |     |        | 1.4 |————————| 1.6 |————————
Interner Hilfetext zu dieser Applikation in Asterisk 1.4:
  -= Info about application 'MacroExclusive' =-

[Synopsis]
Exclusive Macro Implementation

[Description]
  MacroExclusive(macroname|arg1|arg2...):
Executes macro defined in the context 'macro-macroname'
Only one call at a time may run the macro.
(we'll wait if another call is busy executing in the Macro)
Arguments and return values as in application Macro()
Differenz des internen Hilfetexts von Asterisk 1.2 zu 1.4:
— in Asterisk 1.2 nicht vorhanden —
Differenz des internen Hilfetexts von Asterisk 1.4 zu 1.6:
--- in Asterisk 1.4
+++ in Asterisk 1.6
@@ -4,7 +4,7 @@
   Exclusive Macro Implementation

   [Description]
-    MacroExclusive(macroname|arg1|arg2...):
+    MacroExclusive(macroname,arg1,arg2...):
   Executes macro defined in the context 'macro-macroname'
   Only one call at a time may run the macro.
   (we'll wait if another call is busy executing in the Macro)