here are situations when you are running an unattended job on your AS/400 and would like to be informed in case of a problem. A lot of expensive products are available in the market which can alert you by sending a message to your pager. For TUG News Magazine readers I am presenting a technical solution which will cost nothing and still your AS/400 can call a pager if there is a problem. It is assumed that IBM ES link is installed at your site.
The paging software uses three CL programs: PAGER, PAGON and PAGOFF. PAGER is the main program. It first submits the program PAGON to vary on the configuration objects. Then it allocates the device description PAGDEV. Display file QDSIGNON is overridden to the device. Then the program sends the file which dials out the pager number specified in the controller description and subsequently enters the predefined code digits. At the end, the device is de-allocated and program MSGOFF is called to reset the configuration objects. This is a very simple CL program. It can be called in your programs by monitoring those error messages where you want to page someone.
In order to implement this utility, create the following configuration objects and CL programs:
CRTLINSDLC LIND(PAGLIN) RSRCNAME(LIN011) CNN(*SWTPP) + AUTODIAL(*YES) DIALCMD(*V25BIS) + STNADR(01) TEXT('PAGER LINE') CRTCTLRWS CTLD(PAGCTL) TYPE(5394) MODEL(1) + LINKTYPE(*SDLC) ONLINE(*NO) + SWITCHED(*YES) SWTLINLST(PAGLIB) + EXCHID(05F00004) CNNNBR('SST9:nnnnnnn===9999') + STNADR(04) TEXT('PAGER CONTROLLER')
In the above command, "nnnnnnn" is the pager number; "===" is three seconds delay before keying in pager message which could be adjusted according to different pager requirements; and "9999" is the predefined message code which will appear on your pager. Pager number and message code can be changed in your CL program using CHGCTLD command to send different message codes to various pager holders.
CRTDEVDSP DEVD(PAGDEV) DEVCLS(*RMT) TYPE(5291) + MODEL(1) LOCADR(01) ONLINE(*YES) + CTL(PAGCTL) DROP(*NO) TEXT('PAGER DEVICE')
PGM VRYCFG CFGOBJ(PAGCTL) CFGTYPE(*CTL) STATUS(*OFF) MONMSG MSGID(CPF0000) VRYCFG CFGOBJ(PAGLIN) CFGTYPE(*LIN) STATUS(*OFF) MONMSG MSGID(CPF0000) RYCFG CFGOBJ(QESLINE) CFGTYPE(*LIN) STATUS(*OFF) MONMSG MSGID(CPF0000) VRYCFG CFGOBJ(PAGLIN) CFGTYPE(*CTL) STATUS(*ON) MONMSG MSGID(CPF0000) VRYCFG CFGOBJ(PAGCTL) CFGTYPE(*LIN) STATUS(*ON) MONMSG MSGID(CPF0000) ENDPGM
PGM VRYCFG CFGOBJ(PAGCTL) CFGTYPE(*CTL) STATUS(*OFF) MONMSG MSGID(CPF0000) VRYCFG CFGOBJ(PAGLIN) CFGTYPE(*LIN) STATUS(*OFF) MONMSG MSGID(CPF0000) VRYCFG CFGOBJ(QESLINE) CFGTYPE(*LIN) STATUS(*ON) MONMSG MSGID(CPF0000) ENDPGM
PGM DCLF FILE(QSYS/QDSIGNON) SBMJOB CMD(CALL PGM(PAGON)) JOB(PAGON) JOBQ(QINTER) DLYJOB DLY(30) ALCOBJ OBJ((PAGDEV *DEVD *EXCLRD)) WAIT(10) OVRDSPF FILE(QDSIGNON) DEV(PAGDEV) SNDF MONMSG MSGID(CPF4128) DLCOBJ OBJ((PAGDEV *DEVD *EXCLRD)) CALL PGM(PAGOFF) ENDPGMT < G