ZZUtils
- ZZRESTRT
ZZRESTRT is a skeleton of a restartable batch Natural program.
ZZRESTRT is in the source module section of ZZUtils,
a collection of Natural utilities. Look for more information in my
Natural Tips & Techniques section - Tip
6
Natural/ADABAS Restart Logic
************************************************************************
* Program : ZZRESTRT
* System : ZZUTILs
* Function: Skeleton Program - Demonstrates restartability
* Author : Ralph G. Zbrog
* Written : 01/01/90
* Maintenance log :
************************************************************************
* Date || Name
|| Summary of Changes
************************************************************************
* ||
||
************************************************************************
*
DEFINE DATA
LOCAL
/* Constants
1 #C
2 BLANK(A1)
CONST<' '>
*
LOCAL
/* ET data
1 #ET(A35)
1 REDEFINE #ET
2 PROGRAM(A8)
2 CONTROL(N7)
/* Key value
2 ISN(P8)
2 FIELD(N7)
/* Some identifying value
2 FLAG(L)
/* Some significant value
2 SEQ(N7)
/* Uniquely identify WORK rec
1 #RESTART
2 CONTROL(N7)
/* Key value
2 ISN(P8)
/* For non-unique key
1 #TRACE(L)
INIT<FALSE>
END-DEFINE
*/
/* Page eject
*
* Restartability Code
*
IF *DATA > 0
/* Trigger to revoke RESTART
THEN
INPUT(AD=O IP=OFF)
*PROGRAM
/* Clear the ET data
'REFRESHED'
60T *DATU
*TIME(AL=8)
END TRANSACTION #C.BLANK
CALLNAT 'ZZNABEND'
/* Terminate the job
END-IF
*
GET TRANSACTION DATA #ET
*
DECIDE FOR FIRST CONDITION
WHEN #ET.PROGRAM = #C.BLANK
/* First pass through the program
INPUT(AD=O IP=OFF)
*PROGRAM
'EXECUTED'
60T *DATU
*TIME(AL=8)
ASSIGN #ET.PROGRAM = *PROGRAM
RESET #ET.CONTROL
ASSIGN #ET.FIELD = value
WHEN #ET.PROGRAM = *PROGRAM
/* This is a RESTART
INPUT(AD=O IP=OFF)
*PROGRAM
'RESTARTED'
60T *DATU
*TIME(AL=8)
//
'CONTROL:' #ET.CONTROL
//
' FIELD:' #ET.FIELD
ASSIGN #RESTART.CONTROL = #ET.CONTROL
ASSIGN #RESTART.ISN
= #ET.ISN
WHEN NONE
/* This is a problem
INPUT(AD=O IP=OFF)
*PROGRAM
'TERMINATED'
60T *DATU
*TIME(AL=8)
//
'INCONSISTENT RESTART DATA'
/
'ET DATA:' #ET(EM=X(8)ªX(7)ªX(5)ªX(7)ªX)
CALLNAT 'ZZNABEND'
/* Terminate the job
END-DECIDE
*/
/* Page eject
* ...
/* Normal initialization
*
RBAT.
READ BATCH BY xxx FROM #RESTART.CONTROL
* AT START OF DATA
/* Ignore last processed record
* REJECT IF BATCH.CONTROL = #RESTART.CONTROL
/* Assumes unique
* END-START
/* key values
REJECT IF BATCH.CONTROL = #RESTART.CONTROL
/* Ignore processed
AND *ISN(RBAT.)
<= #RESTART.ISN /* duplicate
keys
*
* ...
/* Normal processing
*
ADD 1 TO #ET.SEQ
WRITE WORK 1 data
#ET.SEQ
IF *COUNTER(RBAT.) = 50
/* ET threshold
THEN
RESET *COUNTER(RBAT.)
ASSIGN #ET.CONTROL = BATCH.CONTROL
ASSIGN #ET.ISN
= *ISN(RBAT.)
ASSIGN #ET.FIELD = BATCH.FIELD
ASSIGN #ET.FLAG
= BATCH.FLAG
IF #TRACE
/* Optional
THEN
INPUT(AD=O
IP=OFF)
*PROGRAM
'EXECUTING ET'
60T *DATU
*TIME(AL=8)
// 'CONTROL:' #ET.CONTROL
/ ' ISN:' #ET.ISN
/ ' FIELD:' #ET.FIELD
/ ' FLAG:' #ET.FLAG(EM=TRUE)
/ ' SEQ:' #ET.SEQ
END-IF
END TRANSACTION #ET
END-IF
END-READ
*
*
/* End-of-job processing
WRITE WORK 1 #CTL
/* Control record
'9999999'
INPUT(AD=O IP=OFF)
*PROGRAM
'ENDED'
60T *DATU
*TIME(AL=8)
// 'CONTROL:' #ET.CONTROL
/ ' FIELD:' #ET.FIELD
/ ' FLAG:'
#ET.FLAG(EM=TRUE)
END TRANSACTION #C.BLANK
END
Return to top.
Return to Ralph G. Zbrog's home page.
Last updated July 14, 1997, by Ralph
G. Zbrog.