2.32 :recall()

Diese Methode kann beliebige, vordefinierte und benutzerdefinierte Methoden aufrufen. Dies ist z.B. dann notwendig, wenn die Methode, die aufgerufen werden soll, selbst berechnet wird oder in einer Variablen gespeichert ist.

Der Aufruf der Methode :recall() ruft indirekt die angegebene Methode auf und liefert als Rückgabewert den Rückgabewert der aufgerufenen Methode zurück. Die Anzahl der Parameter die bei der Verwendung von :recall() mit übergeben werden können, ist jedoch auf maximal 15 beschränkt. Darauf ist beim Entwurf von eigenen Methoden zu achten.

Definition

anyvalue :recall
(
      method Method  input
  { , anyvalue Par1  input }
      ...
  { , anyvalue Par15 input }
)

Parameter

method Method input
In diesem Parameter wird die aufzurufende Methode übergeben.
anyvalue Par1 input

anyvalue Par15 input
In diesen Parametern werden die Parameter der aufzurufenden Methode übergeben. Die angegebenen Parameter müssen in Anzahl und Datentypen den Parametern der aufzurufenden Methode entsprechen.

Rückgabewert

Rückgabewert der aufzurufenden Methode.

Erzwingen des rekursiven Aufrufs anderer Methoden

Die Methode :recall() kann dazu benutzt werden, einen rekursiven Aufruf anderer Methoden zu erzwingen, z.B. von :get() und :set(). Dies unterscheidet sie von der Methode :call().

Beispiel

dialog RECALL

record Rec
{
  integer Progress :=   0;
  integer Max := 100;

  :set() {
    case (Attribute)
    in .Progress:
      if Value < 0 then
        Value := 0;
      else
        if Value > this.Max then
          Value := this.Max;
        endif
      endif
      this:super();
    in .Max:
      this:super();
      if this.Max<this.Progress then
        // Die Konsistenzpruefung fuer .Progress soll noch einmal
        // durchgefuehrt werden. Dazu wird :set() rekursiv aufgerufen.
        this:recall(:set, .Progress, this.Max, false);
      endif
    endcase
  }
}
on dialog start
{
  Rec.Progress := 90;  // Soll .Progress = 90.
  Rec.Max := 50;       // .Progress muss mit angepasst werden.
                       // Soll .Progress = 50, .Max = 50.
}

Siehe auch

Methode :call()