/*********************************************************************/
/* (c) Noordeloos Informatica Support, 2022 */
/*-------------------------------------------------------------------*/
/* Program ID - LOCKMSG */
/* Description - Produce a message on a locked record */
/* Author - Rob Noordeloos */
/* Date generated - August 15th, 2022 */
/*-------------------------------------------------------------------*/
/* Validate Parameter : usrprf(*owner) */
/* */
/*********************************************************************/
pgm (&status)
/*-------------------------------------------------------------------*/
/* Declarations */
/*-------------------------------------------------------------------*/
dcl &status *char len(333)
dcl &code *char len(5)
dcl &msg *char len(80)
dcl &jobtype *char len(1)
dcl &job *char len(10)
dcl &job2 *char len(10)
dcl &user *char len(10)
dcl &nbr *char len(6)
dcl &sepcnt *dec len(3 0)
dcl &x *dec len(3 0)
dcl &y *dec len(3 0)
dcl &msgrpy *char len(1)
dcl &msgkey *char len(4)
/*-------------------------------------------------------------------*/
/* If it is not a record lock condition, send back an escape message */
/*-------------------------------------------------------------------*/
chgvar &code %sst(&status 209 5)
if (&code *ne '01218') +
msgf(qcpfmsg) +
msgtype(*escape) +
msgdta('Input operation failed for a reason +
other than a locked record')
chgvar &msg %sst(&status 91 80)
rtvjoba job(&job) +
user(&user) +
nbr(&nbr) +
type(&jobtype)
/*-------------------------------------------------------------------*/
/* If it is an interactive job, send to end user with a 3 way option.*/
/*-------------------------------------------------------------------*/
if (&jobtype *eq '1') do
sndusrmsg msgid(TAA1001) +
msgf(taatool/taamsgf) +
msgtype(*info)
sndusrmsg msg(&msg) +
values(r j s) +
msgrpy(&msgrpy)
/*-------------------------------------------------------------------*/
/* Check user input */
/*-------------------------------------------------------------------*/
if (&msgrpy *eq 'r') +
return
if (&msgrpy *eq 'j') do
/*-------------------------------------------------------------------*/
/* Send to job with lock */
/* Extract the job name from the msg text */
/*-------------------------------------------------------------------*/
chgvar &y 22
/*-------------------------------------------------------------------*/
/* Start pos in &msg of job name X/X/X */
/* Loop until 2nd slash (/) is found */
/*-------------------------------------------------------------------*/
seploop: chgvar &y (&y + 1)
if (%sst(&msg &y 1) *ne '/') +
goto seploop
/*-------------------------------------------------------------------*/
/* Slash found */
/*-------------------------------------------------------------------*/
chgvar &sepcnt (&sepcnt + 1)
if (&sepcnt *ne 2) +
goto seploop
/*-------------------------------------------------------------------*/
/* Extract the name (assume 10 char) */
/*-------------------------------------------------------------------*/
namloop: chgvar &y (&y + 1)
chgvar &x (&x + 1)
*--------------------------------------------------------------------*/
* Message text ends with a period */
*--------------------------------------------------------------------*/
if (%sst(&msg &y 1) *ne '.') do
chgvar %sst(&job2 &x 1) %sst(&msg &y 1)
if (&x *ne 10) +
goto namloop
enddo
*--------------------------------------------------------------------*/
* Send message to user who has the lock */
*--------------------------------------------------------------------*/
sndbrkmsg msg('From ' *cat &user *tcat '- You have a +
record locked that I need. Please end your +
transaction.') +
tomsgq(&job2)
/*-------------------------------------------------------------------*/
/* Message failed */
/*-------------------------------------------------------------------*/
monmsg msgid(cpf2469) exec(do)
sndusrmsg msg('Message could not be sent.Job may be a +
batch job. Press Enter.') +
msgtype(*info)
enddo
enddo
/*-------------------------------------------------------------------*/
/* Send to System operator */
/*-------------------------------------------------------------------*/
if (&msgrpy *eq 's') do
sndusrmsg msg(&msg) +
msgtype(*info) +
tomsgq(qsysopr)
sndusrmsg msg('Interactive job ' *cat &nbr *tcat '/' +
*cat &user *tcat '/' *cat &job *tcat ' at +
rcd lock wait. See previous message.') +
msgtype(*info) +
tomsgq(qsysopr)
enddo
enddo
/*-------------------------------------------------------------------*/
/* If batch is locked, send msg to System Operator */
/*-------------------------------------------------------------------*/
if (&jobtype *ne '1') do
sndusrmsg msg(&msg) +
msgtype(*info) +
tomsgq(qsysopr)
sndpgmmsg msg('Batch job ' *cat &nbr *tcat '/' *cat +
&user *tcat '/' *cat &job *tcat ' at rcd +
lock wait. See prev. Reply(G).') +
tomsgq(qsysopr) +
msgtype(*inq) +
keyvar(&msgkey)
/*-------------------------------------------------------------------*/
/* Wait up to 120 seconds for reply */
/*-------------------------------------------------------------------*/
rcvmsg msgtype(*rpy) +
msgkey(&msgkey) +
wait(120)
enddo
/*-------------------------------------------------------------------*/
/* End of Program */
/*-------------------------------------------------------------------*/
endpgm
|