Makros 'verketten' aber mit Rückgabewerten?

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

diamondialis
*
Beiträge: 19
Registriert: Mo, 19.12.2011 22:24

Makros 'verketten' aber mit Rückgabewerten?

Beitrag von diamondialis »

Hallo und guten Abend!

Diesmal beschäftige ich mich mit der Verkettung von Makros.

Beispiel:

Code: Alles auswählen

Sub SR_NEB_New
  Call SR_NEB_Ctrl
  Call SR_NEB_SaveProc
  Call SR_NEB_Save
  Call SR_NE_Dia
End Sub
In Makro "SR_NEB_New" sollen also 4 Makros hintereinander ausgeführt werden, die alle verschiedene Sektionen eines zusammenhängenden Prozesses behandeln.

Jetzt ist aber meine Frage, wie ich den Ausgang/das Ergebniss eines Makro-Abschnittes ausgeben/Prüfen kann...

Beispiel:
Makro "SR_NEB_Ctrl" kontrolliert, ob im geöffneten Dialog alle Felder ausgefüllt sind.
Sind alle Felder ausgefüllt, soll anschließend Makro "SR_NEB_SaveProc" den Speicher-Prozess des Datensatzes einleiten.
etc...

Jetzt kann es aber natürlich sein, dass in "SR_NEB_Ctrl" eben ein Dialog-Feld nicht ausgefüllt ist.
Deswegen brache ich eine Möglichkeit, wie ich in der Kette aus "SR_NEB_New" eine WennDann-Funktion einbauen kann, die, wenn SR_NEB_Ctrl" z.B. in einer Variable einen vordefinierten Wert "false" ausgibt, die Kette abbricht, also die Sub beendet:

Code: Alles auswählen

Sub SR_NEB_New
  Call SR_NEB_Ctrl
  If "Variable aus "SR_NEB_Ctrl" = false then
    End Sub
  End If
  Call SR_NEB_SaveProc
  Call SR_NEB_Save
  Call SR_NE_Dia
End Sub
Aber wie bewerkstellige ich das am geschicktesten? oder welche Alternativen gibt es dazu?
Kann ich aus der untergeordneten Sub die aufrufende Sub beenden? Also aus "SR_NEB_Ctrl" die Sub "SR_NEB_New" beenden, bevor "SR_NEB_SaveProc" aufgerufen wird?

Vielen Dank für eure Hilfe!

LG,
dia
juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

Re: Makros 'verketten' aber mit Rückgabewerten?

Beitrag von juetho »

Ganz einfach: indem du die einzelnen Routinen nicht als SUB, sondern als FUNCTION AS <Datentyp> deklarierst und entsprechend aufrufst (nach folgendem Muster):

Code: Alles auswählen

FUNCTION routine1 AS INTEGER
  rem mach was
  routine1 = -1
END FUNCTION

SUB routine2
  iResult = routine1()
END SUB
Gruß Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Antworten