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