Anderen Service anfordern: CALL

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

Beispiel: Service anfordern

sample.cbl
    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.

a) ab TAA Version 7.08