Eine von der Systembetreuung anschließbare Accounting-Exit-Routine wird für jeden Abrechnungssatz aufgerufen, bevor dieser an die Accounting-Schreibtask übergeben und in die Abrechnungsdatei geschrieben wird.
Die Exit-Routine kann den Abrechnungssatz akzeptieren, ändern, unterdrücken oder zusätzliche Abrechnungssätze erzeugen, die vor oder hinter dem aktuellen Satz in die Abrechnungsdatei eingefügt werden.
Folgende Informationen werden an die Exit-Routine übergeben:
R1 = A(Parameterbereich NASXIT) R12 = A(TPR Program Manager) R13 = A(Sicherungsbereich der rufenden Komponente) R14 = A(indirekter Rücksprung) R15 = A(Exit-Routine)
Die Rückkehrinformation an die rufende Komponente kann im Feld NASXRET des Parameterbereichs übergeben werden:
Abrechnungssatz modifizieren (Returncode X'00')
Die Adresse des Original-Abrechnungssatzes wird im Feld NASXRECA des Parameterbereichs an die Exit-Routine übergeben. Die Routine kann beliebige Veränderungen des Satzes vornehmen, der Satz darf jedoch höchstens 496 Bytes lang sein. Das Layout der System-Abrechnungssätze ist im Handbuch „Einführung in die Systembetreuung“ [7] beschrieben.
Abrechnungssatz unterdrücken (Returncode X'08')
Außer Setzen der Rückkehrinformation X'08' sind durch die Exit-Routine keine Aktionen erforderlich.
Abrechnungssatz einfügen (Returncode X'00')
Die einzufügenden Sätze müssen von der Exit-Routine vor dem Rücksprung ins System mit dem Makroaufruf $NAREC in die Abrechnungsdatei geschrieben werden. Die Satzkennungen kundenspezifischer Abrechnungs-Sätze sollten mit den Buchstaben X, Y oder Z beginnen, um Namenskonflikte mit den Satzkennungen des Systems zu vermeiden.
Abrechnungssatz anfügen (Returncode X'04')
Das System schreibt den Abrechnungssatz in die Abrechnungsdatei und gibt anschließend die Steuerung an die Exit-Routine zurück. Das Feld NASXRECA des Parameterbereichs enthält in diesem Fall keine Adresse. Nun können mit $NAREC weitere Abrechnungssätze angeschlossen werden. Beim erneuten Rücksprung in das System wird der Returncode nicht mehr ausgewertet, da ein dritter Aufruf nicht vorgesehen ist.
Schutz vor Rekursion
Die Accounting-Exit-Routine wird auch für Abrechnungssätze aufgerufen, die von der Routine selbst mit $NAREC geschrieben werden. Eine mögliche Rekursion muss innerhalb der Exit-Routine verhindert werden.
DSECT
Der Makro NASXIT erzeugt das Layout des Exit-Parameterbereichs als Dsect oder als Datenbereich.
Der Exit-Parameterbereich enthält den Standardheader (mit Returncode) und das FeldNASRECA für die Adresse des Abrechnungssatzes, der in die Accounting-Datei eingetragen werden soll.
Die Rückkehrinformation der Exit-Routine muss in das Feld NASXRET („General Return Code“) im Parameterbereich eingetragen werden.
NASXIT MF=D
MFCHK MF=D, C
SUPPORT=(C,D), C
PREFIX=N, C
MACID=ASX, C
DMACID=ASX, C
DNAME=ASXIT
NASXIT DSECT ,
*,##### PREFIX=N, MACID=ASX #####
#INTF INTNAME=$NASXIT,REFTYPE=REQUEST,INTCOMP=1
* PARAMETER LIST LAYOUT
NASXACC FHDR MF=(C,NASX),EQUATES=NO
NASXACC DS 0A
NASXFHE DS 0XL8 0 GENERAL PARAMETER AREA HEADER
*
NASXIFID DS 0A 0 INTERFACE IDENTIFIER
NASXFCTU DS AL2 0 FUNCTION UNIT NUMBER
* BIT 15 HEADER FLAG BIT,
* MUST BE RESET UNTIL FURTHER NOTICE
* BIT 14-12 UNUSED, MUST BE RESET
* BIT 11-0 REAL FUNCTION UNIT NUMBER
NASXFCT DS AL1 2 FUNCTION NUMBER
NASXFCTV DS AL1 3 FUNCTION INTERFACE VERSION NUMBER
*
NASXRET DS 0A 4 GENERAL RETURN CODE
NASXSRET DS 0AL2 4 SUB RETURN CODE
NASXSR2 DS AL1 4 SUB RETURN CODE 2
NASXSR1 DS AL1 5 SUB RETURN CODE 1
NASXMRET DS 0AL2 6 MAIN RETURN CODE
NASXMR2 DS AL1 6 MAIN RETURN CODE 2
NASXMR1 DS AL1 7 MAIN RETURN CODE 1
NASXFHL EQU 8 8 GENERAL OPERAND LIST HEADER LENGTH
*
*
* FOLLOWING RETURN CODES MAY BE SET :
*
* SC2 SC1 MAIN MEANING
* 00 00 0000 WRITE ACC RECORD AND DO NOT RECALL EXIT
* 00 00 0004 WRITE ACC RECORD AND RECALL EXIT
* 00 00 0008 DO NOT WRITE ACC RECORD
*
* EQUATES FOR SUBCODE1 :
*
NASXS1OK EQU X'00' NORMAL PROCESSING
*
* EQUATES FOR MAINCODE :
*
NASXMWR EQU X'00' WRITE ACC RECORD
NASXMWRR EQU X'04' WRITE ACC RECORD AND RECALL
NASXMNWR EQU X'08' DO NOT WRITE THE RECORD
*
NASXRECA DS A ACC RECORD ADDRESS
*
* EQUATE FOR LENGTH OF PARAMETERLIST :
*
NASX# EQU *-NASXACC