EXEC TAA CALL [<servicetyp> SERVICE] <servicename> [IN <Anwendung>][.<operation>] [WITH [<byValOrRef>] <parameter1> [= <objekt1>] [<byValOrRef>] [AND [<byValOrRef>]<parameter2> [= <objekt2>] [<byValOrRef>] ... ] END-EXEC
<byValOrRef> : BY VALUE | BY REFERENCE | BYVAL | BYREF
Die ByValue-Funktionalität ist nicht auf allen Plattformen unterstützt.
Andere TAA-Bausteine, oder „Services“, werden mit der Anweisung „EXEC TAA CALL“ aufgerufen.
Bei der Zuweisung der Parameter steht links vom Gleichheitszeichen der Name des Parameterobjektes aus dem zu rufenden Baustein und rechts vom Gleichheitszeichen ein im aufrufenden Baustein bekanntes Objekt, also entweder ein lokales Objekt, ein globales Objekt, oder ein Parameterobjekt:
Wenn der Name des übergebenen Objekts gleich ist wie der Name des Parameterobjekts in dem aufgerufenen Modul, genügt es, diesen einmal anzugeben, d.h. Gleichheitszeichen und Name dahinter entfallen.
Ist keine Zuweisung angegeben, und auch kein gleichnamiges Objekt vorhanden, wird ein automatisch erzeugtes lokales Objekt eingesetzt[a].
Zusätzlich kann pro Parameterzuweisung angegeben werden, ob eine direkte Referenz auf das Objekt übergeben werden soll (BYREF, oder BY REFERENCE), oder ob nur der Inhalt des Objekts übergeben werden soll (BYVAL, oder BY VALUE). Bei Übergabe des Inhalts wird dem aufgerufenen Modul eine Kopie des Objekts übergeben; Änderungen, die das aufgerufene Modul in dem Objekt durchführt, werden in dem beim Aufrufer vorhanden Objekt nicht wirksam. Default ist BY REFERENCE. Die Angabe kann am Anfang oder Ende der Parameterzuweisung stehen, darf aber pro Parameterzuweisung nur einmal erfolgen.
Die Angabe des Bausteintyps und der Anwendung sind optional. Da das System aber fehlende Angaben selbst auffinden muss, führen derartige Einsparungen u.U. zu längeren Kompilierungszeiten.
Nach Ausführung des Call ist der Zustand des ausgeführten Bausteins abfragbar als
TC-STATE-<zustand> OF <modulname>
z.B.
IF TC-STATE-ABBRUCH OF ABC-BERECHNUNG THEN ...
Bei der Generierung des CALL werden für als Parameter zugewiesenen Objekte bestimmte Objektoperationen automatisch erzeugt, und zwar:
Vor Ausführung des Call:
Rolle (aufg. Modul) | Objektart (akt. Modul) | Klasse (akt. Modul) | Rolle (akt. Modul) | Operation (akt. Modul) |
---|---|---|---|---|
REF MOD DEL | Parm Global | REC | MOD CRE DEL | PUT |
REF MOD DEL | Lokal | REC | - | PUT |
alle | alle | LST | - | keine |
Bei Rückkehr ins aufrufende Modul:
Objektart | Klasse | Rolle | Operation |
---|---|---|---|
alle zugewiesenen Objekte | REC | - | GET |
alle zugewiesenen Objekte | LST | - | keine |
Global | REC | alle außer NOP | GET |
Global | LST | alle außer NOP | GET CURRENT (abhängig vom Registry-Setting AutoGetFirst) |
Beispiel:
EXEC TAA CALL EFUN SERVICE PROVISIONSBERECHNUNG IN LEVERT.PRUEFEN WITH KVERTRG = L-VERT AND VNEHMER = VNEHMER END-EXEC
oder, kürzer:
EXEC TAA CALL PROVISIONSBERECHNUNG.PRUEFEN WITH KVERTRG = L-VERT AND VNEHMER END-EXEC
IDENTIFICATION DIVISION. EXEC TAA IDENTIFY NFUN SERVICE MYMODL IN TEST END-EXEC. DATA DIVISION. WORKING-STORAGE SECTION. EXEC TAA DECLARE L-OBJ1 WITH TYPE INKAS AND CLASS REC END-EXEC. LINKAGE SECTION. PROCEDURE DIVISION. EXEC TAA REGISTER END-EXEC. * AUFRUF Interaktion - lange Schreibweise: EXEC TAA INTR SERVICE IMX3 IN TEST.ERFASSEN WITH PRISIKO=PRISIKO AND PVERTRG=PVERTRG AND BYVAL PVINKAS=L-OBJ1 END-EXEC. * Weitere Verarbeitung je nach Status des Services: IF TC-STATE-ERFASST OF IMX3 ........ ..... * Aufruf Funktion - kurze Schreibweise: EXEC TAA CALL SERVICE GESAMTPLAUSIBILITAETEN.PRUEFEN WITH PRISIKO AND PVERTRG BY VALUE AND PVINKAS=L-OBJ1 END-EXEC.