%P= — CALL-Optionen

%P=

C
CC
I
L
LS
S
SC
SQ
U
UT
V

Jedes %P=-Kommando gilt nur für den nächsten Aufruf und die CALL-Optionen werden ohne Bedingung nach Rückkehr von dem Aufruf zurückgesetzt.

Deshalb wird empfohlen, das %P=-Kommando unmittelbar vor dem betreffenden CALL-Statement abzusetzen.

Anmerkung:
Um die CALL-Optionen dauerhaft zu setzen, können Sie den Profilparameter PGP bzw. das Parametermakro NTPGP benutzen.

Wenn Sie die Natural CICS-Schnittstelle benutzen, können Sie mit den Kommandos %P=S(C), %P=V, %P=C(C), %P=U und %P=UT spezielle Optionen setzen, die nur dann gelten, wenn unter CICS ein Natural-Programm (über ein CALL-Statement) ein Nicht-Natural-Programm aufruft. In allen anderen Umgebungen werden diese Kommandos ignoriert.

Wenn Sie die Natural IMS TM-Schnittstelle benutzen, können Sie mit dem Kommando %P=I spezielle Optionen setzen, die gelten, wenn ein Natural-Programm (über ein CALL-Statement) ein Nicht-Natural-Programm aufruft. In allen anderen Umgebungen wird dieses Kommando ignoriert.

Zu Einzelheiten über den Aufruf von Nicht-Natural-Programmen siehe CALL-Statement in der Statements-Dokumentation.

Die folgenden Kommando-Optionen sind im folgenden beschrieben:


%P=C — Übergabe von Parameterwerten statt Adresse

Dieses Kommando gilt nur, wenn die Natural CICS-Schnittstelle benutzt wird.

Ruft ein Natural-Programm unter CICS ein Nicht-Natural-Programm auf, wird normalerweise die Adresse der CALL-Statement-Parameteradressenliste in der COMMAREA übergeben. Wenn Sie statt der Adresse der Parameteradressenliste die Parameterwerte selbst in der COMMAREA übergeben möchten, führen Sie vor dem Aufruf das Terminalkommando %P=C aus.

Dadurch ist zum Beispiel DPL für aufgerufene CICS-Programme möglich: der Aufruf eines CICS-Programms, das sich in einer anderen CICS-Region befindet, ist nur mit %P=C möglich; denn da die "aufgerufene" Region nicht auf Adressen in der "aufrufenden" Region zugreifen kann, müssen stattdessen die Parameterwerte übergeben werden.

Wenn %P=C verwendet wird, werden keine Parameter in der TWA übergeben, sondern nur Parameterwerte in der CICS COMMAREA. Alle Parameter der CALL-Parameterliste werden unmittelbar aufeinanderfolgend kopiert, unabhängig von ihrer Ausrichtung. Die sich daraus ergebende COMMAREA-Länge entspricht der Summe der einzelnen Parameterlängen (was bei Bestimmung der Anzahl der zu übergebenden Array-Ausprägungen zu berücksichtigen ist). Bei der Rückkehr vom aufgerufenen Programm werden die Parameter zurückkopiert.

Wenn sich überlappende Felder übergeben werden oder dasselbe Feld mehrmals übergeben wird, sollten diese Felder für das aufgerufene Programm schreibgeschützt werden; andernfalls kann es bei der Rückgabe von Parameterwerten an das aufrufende Programm zu unvorhersehbaren Ergebnissen kommen.

Bei %P=C gilt die Einschränkung, dass Gruppen-Arrays nicht übergeben werden können:

01 #GROUP (2)
   02 #FIELD1 (A1)
   02 #FIELD2 (P7)

Übergeben Sie sie entweder als einzelne Arrays:

01 #GROUP
   02 #FIELD1 (A1/2)
   02 #FIELD2 (P7/2)

Oder redefinieren Sie sie:

01 #GROUP
01 REDEFINE #GROUP
   02 #ARRAY (A1/10)

und geben den Array-Namen im CALL-Statement an.

Anmerkungen:

  1. Wenn Sie für einen Aufruf sowohl %P=S als auch %P=C ausführen, wird %P=C ignoriert.
  2. CICS COMMAREAs sind auf 32 KB begrenzt.
  3. Wenn der NCIPARM-Parameter CNTCALL auf YES oder wenn CNTCALL im Macro NTCICSP auf ON (abhängig von der Version des installierten Natural CICS Interface) gesetzt, ist, wird ein CICS-Container statt einer COMMAREA übergeben, wenn die Datenlänge des Parameterwertes 32 KB überschreitet.
  4. Vermeiden Sie Speicherüberschreitungen in CICS, indem Sie sicherstellen, dass ein aufgerufenes Programm prüft, ob die Länge des zu übergebenden Datenbereichs wirklich zur internen Datenstruktur passt. Dies erreicht man, indem man EIBCALEN gegen die COMMAREA-Länge prüft: IF LENGTH OF DFHCOMMAREA GREATER THAN EIBCALEN … (in COBOL) oder IF SIZE (DFHCOMMAREA) > EIBCALEN … (in PL/1).

%P=CC — Parameterwerte in einem CICS-Container übergeben

Dieses Kommando gilt nur, wenn die Natural CICS-Schnittstelle benutzt wird.

Für diese Funktionalität ist der CICS Transaction Server for z/OS ab Version 3.1 erforderlich.

Der Unterschied zwischen %P=C und %P=CC ist der, dass die Parameterwerte sofort in einem CICS-Container übergeben werden. Alle Einschränkungen gelten noch, außer der Längenbegrenzung von 32 KB.

%P=I — Übergabe von PCB-Adressen an Aufgerufenen

Dieses Kommando gilt nur, wenn die Natural IMS TM-Schnittstelle benutzt wird.

%P=I zeigt Natural an, dass PCB-Adressen an das 3GL-Programm im folgenden CALL-Statement übergeben werden sollen. Da es nicht möglich ist, die Adresse einer PCB von Natural an das 3GL-Programm direkt zu übergeben, wird eine spezielle Konvention benutzt, um Natural anzuzeigen, dass an das 3GL-Programm übergebene Parameter entweder die Position oder den Namen einer PCB enthalten können. Für Felder, die diese Konvention erfüllen, übergibt Natural die Adresse der PCB an das aufgerufene 3GL-Programm anstatt der Adresse des angegebenen Parameters.

Nur skalare Felder des Formats A8 oder A12 werden auf eine PCB-Spezifikation abgeprüft. Die Felder, die eine PCB-Spezifikation enthalten, müssen die folgenden Konventionen erfüllen:

  • Ein A8-Feld muss die Zeichenkette 'PCB=nnnn' enthalten, wobei nnnn eine vierstellige Ziffer ist, die die Position der PCB in der PSB-Adressenliste darstellt.

  • Ein A12-Feld muss die Zeichenkette 'PCB=name' enthalten, wobei name der acht Zeichen umfassende Name für eine PCB ist, der mit dem NTIMSPT-Makro im Verlauf der Installation der Natural IMS TM-Schnittstelle definiert wurde.

Beispiel:

Nach Ausführung von %P=I werden für das Statement

CALL 'MY3GL' USING 'PCB=MYPCB ' 'PCB=0004' PARAM

die folgenden Parameter an das 3GL-Programm MY3GL übergeben:

  • Adresse der PCB mit dem Namen MYPCB, wie mit dem Makro NTIMSPT angegeben,

  • Adresse der vierten PCB in der PSB-Adressenliste,

  • Adresse des Natural-Feldes PARAM.

Die folgenden Returncodes werden von der Systemfunktion RET zurückgegeben, wenn die PCB-Spezifikation ungültig ist:

Return Code Erläuterung
-4 Der angegebene Wert nnnn für das Format ‘PCB=nnnn ist nicht numerisch.
-8 Der angegebene PCB-Name wurde nicht mit dem Makro NTIMSPT definiert.
-12 Die angegebene PCB mit der Position nnnn ist in der PSB-Adressenliste nicht vorhanden.

%P=L — Aufruf des dynamischem Hauptprogramms LE

Dieses Kommando gilt nur, wenn bei der Installation von Natural die Option zur Unterstützung von IBM Language Environment (LE)-Aufrufkonventionen gesetzt wurde.

Dieses Kommando bewirkt, dass nach dem Aufruf eines dynamischen Hauptprogramms LE die Kontrolle wieder an Natural zurückgegeben wird.

Wenn ein dynamisches Hauptprogramm LE aufgerufen wird, wird standardmäßig die Kontrolle nach Ausführung des aufgerufenen Programms nicht an Natural zurückgegeben. Damit nach der Ausführung des aufgerufenen Programms die Kontrolle an Natural zurückgegeben wird, müssen Sie vor dem Programmaufruf %P=L verwenden.

Informationen zur Unterstützung von LE-Aufrufkonventionen finden Sie im Abschnitt LE Subprograms in der Operations-Dokumentation.

Anmerkung:
Unter CICS sind %P=L und %P=LS gleichwertig, da LE-Hauptprogramme nicht unterstützt werden.

%P=LS — Aufruf von LE-Subroutine

Dieses Kommando gilt nur, wenn bei der Installation von Natural die Option zur Unterstützung von IBM Language Environment (LE)-Aufrufkonventionen gesetzt wurde.

Dieses Kommando bewirkt, dass ein dynamisches oder statisches Nicht-Natural-Programm mittels LE-Aufrufkonventionen aufgerufen wird, d.h. über Standard-Linkage-Konventionen mit dem Register 12, das die Adresse der LE CAA enthält.

Informationen zur Unterstützung von LE-Aufrufkonventionen finden Sie im Abschnitt LE Subprograms in der Operations-Dokumentation.

%P=S — Standard-Linkage für Aufruf

Dieses Kommando gilt nur, wenn die Natural CICS-Schnittstelle benutzt wird.

Wenn ein Natural-Programm unter CICS ein Nicht-Natural-Programm aufruft, geschieht der Aufruf normalerweise über eine EXEC CICS LINK-Anforderung.

Wenn für den Aufruf stattdessen Standard Linkage verwendet werden soll, geben Sie das Terminalkommando %P=S ein. Voraussetzung ist, dass das aufgerufene Programm den Standard-Linkage-Konventionen mit Standard-Registerverwendung entspricht.

%P=SC — Standard-Linkage-Aufruf mit Simulation von EXEC CICS LINK

Dieses Kommando gilt nur, wenn die Natural CICS-Schnittstelle benutzt wird.

Wenn ein Natural-Programm normalerweise ein Nicht-Natural-Programm unter CICS aufruft, erfolgt der Aufruf über eine EXEC CICS LINK-Anforderung.

Wenn dieses Terminalkommando benutzt wird, ruft die Natural CICS-Schnittstelle das Nicht-Natural-Programm mittels Standard-Linkage-Konventionen auf, aber mit der Übergabe von Parametern, wie dies ein CICS LINK durchführt, d.h. Register 1 zeigt auf eine Parameter-Liste mit Adressen von CICS EIB und einer CICS COMMAREA.

Anmerkungen:

  1. %P=SC kann mit %P=C kombiniert werden.
  2. Ein über Standard Linkage aufgerufenes Programm darf nicht über EXEC CICS RETURN zum aufrufenden Programm zurückkehren. Assembler-Programme müssen über einen DFHEIRET-Macro-Aufruf zurückkehren. COBOL-Programme müssen über ein GOBACK-Statement zurückkehren.

%P=SQ - Standard Linkage for Call of Quasi-Reentrant Subprograms

Dieses Kommando gilt nur, wenn die Natural CICS-Schnittstelle benutzt wird und wenn die bei Ihnen installierte Natural CICS Interface-Version dieses Kommando unterstützt.

Dieses Kommando gilt nicht, wenn ein aufgerufenes Nicht-Natural-Subprogramm in Natural mit dem Profilparameter CSTATIC oder RCA definiert ist.

%P=SQ entspricht funktional dem Terminalkommando %P=S.

Wenn Natural mit dem CICS-Attribut CONCURRENCY(REQUIRED) definiert ist und die CICS OTE-Umgebung ( Open Transaction Environment) benutzt, müssen alle mittels Standard-Linkage-Konventionen aufgerufenen Subprogramme voll eintrittsvariant (reentrant) sein.

Wenn ein Nicht-Natural-Subprogramm aufgerufen wird, das quasi-eintrittsvariant, aber nicht thread-sicher und voll eintrittsvariant ist, während Natural in einem offenen TCB läuft, sorgt die Einstellung %P=SQ dafür, dass das aufgerufene Programm unter dem CICS QR TCB ausgeführt wird. Natural setzt dann das CICS-Kommando EXEC CICS LINK PROGRAM('NCILINKQ') ab, um den QR TCB umzuschalten und das Programm NCILINKQ auszuführen, das das Subprogramm mittels Standard-Linkage-Konventionen aufruft.

%P=U — Separate Arbeitseinheit für aufgerufenes Programm

Dieses Kommando gilt nur, wenn die Natural CICS-Schnittstelle benutzt wird.

Dieses Kommando gibt an, dass ein über DPL aufgerufenes CICS-Programm seine eigene Arbeitseinheit hat, die bei der Rückkehr zu Natural bestätigt wird, d.h. vom aufgerufenen Programm vorgenommene Änderungen an wiederherstellbaren Ressourcen werden bestätigt oder wieder eingespeichert, unabhängig von Änderungen an wiederherstellbaren Ressourcen, die Natural vorgenommen hat. In der Sprache von CICS ausgedrückt: Dieses Kommando bewirkt ein EXEC CICS LINK mit der SYNCONRETURN-Option.

%P=UT — Separate Arbeitseinheit für aufgerufenes Programm, Transaktions-Backout tolerieren

Dieses Kommando hat fast dieselbe Bedeutung wie das Kommando %P=U, jedoch mit einer Ausnahme:

Bei %P=U führen bei der Rückkehr von dem aufgerufenen Programm alle CICS-Bedingungen, außer NORMAL, zu einer Natural-Fehlermeldung NAT0920, wobei der Reason Code der Response Code des EXEC CICS LINK-Befehls ist.

Bei %P=UT führt ein CICS ROLLEDBACK Response Code nicht zu einem Fehler, sondern wird toleriert und wie eine NORMAL-Bedingung behandelt.

%P=V — Ausspeichern bei Aufruf

Dieses Kommando gilt nur in Natural-Umgebungen, in denen sich mehrere Sessions Threads in derselben Region teilen, beispielsweise Natural CICS-Schnittstelle oder Batch-Server-Umgebungen unter z/OS, z/VSE und BS2000.

Wenn ein Natural-Programm ein Nicht-Natural-Programm aufruft und das aufgerufene Programm im Dialog einen Terminal-I/O ausführt, ist der Natural-Thread normalerweise solange blockiert, bis der Benutzer eine Eingabe gemacht hat.

Mit %P=V können Sie vermeiden, dass der Natural-Thread blockiert ist: wenn Sie dieses Terminalkommando angeben, werden die vom Natural-Programm an das aufgerufene Programm übergebenen Parameterdaten aus dem Thread herauskopiert, und der Thread wird vor dem Aufruf ausgespeichert. Der Thread steht dann für andere Benutzer zur Verfügung. Wenn das aufgerufene Programm die Kontrolle wieder an das aufrufende Natural-Programm zurückgibt, wird der Thread wieder eingespeichert, der (modifizierte) Datenbereich wird in den Thread kopiert, und Natural setzt die Verarbeitung fort.

Anmerkung:
Nur die im CALL-Statement angegebenen Parameter werden aus dem Thread heraus- und wieder hineinkopiert.