misi01 Advanced
Joined: 02 Dec 2002 Posts: 629 Topics: 176 Location: Stockholm, Sweden
|
Posted: Wed Apr 05, 2023 9:34 am Post subject: FILE Manager, batch and Rexx |
|
|
I'll put this here so theoretically, other people can find this and not have to bang their heads against the wall as much as I did.
Basically (and I've appended along these lines before), I want to be able to run a batch FMI job for regression testing so that I can test creating records/segments in a IMS database and then, very simply, delete them all and test again. First of all, my JCL
Code: |
//S030 EXEC PGM=FMN1IMSB
//*
//STEPLIB DD DSN=SYS1.SFMNMOD1,DISP=SHR
//*
//* THIS FILE CONTAINS THE FILE MANAGER COMMANDS WE WANT TO RUN.
//* RECORDS STARTING WITH -- IN POS 1-2 ARE CONSIDERED COMMENTS AND
//* IGNORED
//* NOTE THAT THE DD-NAME MUST BE FMIBATCH
//*
//FMIBATCH DD DISP=SHR,DSN=&SYSUID..PROJ.DATA(DFFNYOFF)
//*
//FMNREPT DD SYSOUT=*,RECFM=FBA,LRECL=133
//*
//FMNPRINT DD SYSOUT=*,RECFM=FBA,LRECL=133
//*
//FMNRPRC DD SYSOUT=*,RECFM=FBA,LRECL=133
//*
//FMIMSIN DD *
ÅÅFILEM SET HEADERPG=NO,PAGESIZE=60
ÅÅFILEM IEB REGNTYPE=DLI,
ÅÅFILEM PSBTYPE=DYNAMIC,
ÅÅFILEM DBDDSN=xxxx.IMS.DBDLIB,
ÅÅFILEM DBDMEM=DFFNYOFF,
ÅÅFILEM IMSID=xxxx,
ÅÅFILEM CRITERIA=N,
ÅÅFILEM VIEW=N,
ÅÅFILEM IMSOBA=80,
ÅÅFILEM IMSNBA=50,
ÅÅFILEM CHKPFREQ=1, <---- without this, you might well see discrepancies in the results here and when you review the
database using FMI 3270 after this job has run to completion
ÅÅFILEM PROC=FMITEST
/*
//FMNEXEC DD DSN=&SYSUID..TEST.CLIST,DISP=SHR
|
then my Rexx code
Code: |
/* Rexx **************************************************************
This batch File Manager script can be used to perform various
steps on any DL/1 database
An example of this as JCL from my previous SEB stint can be found in
e:\shb\misi01.fman.jcl
*********************************************************************/
rname = 'FMITEST'
/* say 'Running 'rname ; trace a */
signal on novalue name sub_novalue
/* NB NB NB NB
You don't seem to be able to allocate any files within the Rexx
script, but you CAN allocate them in the JCL and use EXECIO to
read them, HOWEVER, the address MUST be MVS and NOT TSO
*/
address MVS "execio * diskr fmibatch (stem fmibatch. finis"
say 'EXECIO rc 'rc' fmibatch.0 'fmibatch.0
do i = 1 to fmibatch.0
cmd = subword(fmibatch.i, 1, 1)
temp = subword(fmibatch.i, 2)
select
when left(cmd, 2) = '--' then
say 'Commented line on line 'i
when cmd = 'GETIMS' then
do
say 'calling GETIMS with 'temp
filerc = GETIMS(temp)
rc = show_ims_results()
if filerc = 'EOF' then
say 'Segment not found using GETIMS'
end
when cmd = 'DELIMS' then
do
say 'calling GETIMS with 'temp
filerc = GETIMS(temp)
rc = show_ims_results()
if filerc = 'EOF' then
say 'GETIMS failed with EOF - segment not found'
else
do
temp1 = word(temp, 1)
say 'calling DELIMS with 'temp1
filerc = DELIMS(temp1)
rc = show_ims_results()
say 'calling SAVEIMS'
filerc = SAVEIMS()
rc = show_ims_results()
end
end
otherwise
say 'Unexpected FM IMS command 'cmd', line 'i
end
end
return 0
/********************************************************************
********************************************************************/
show_ims_results:
say 'filerc = 'filerc
say 'Inrec ***'inrec
say 'C2X Inrec ***'c2x(inrec)
say 'FMCONKEY ***'FMCONKEY
say 'FMSEGNM ***'FMSEGNM
return 0
/**********************************************************************
**********************************************************************/
sub_novalue:
say 'In sub_novalue in 'rname ; trace ?a
zedsmsg = ""
zedlmsg = rname" - Variable" ,
condition("Description") "undefined in line" sigl":"
say zedlmsg
exit 8
|
and finally, the actual FMI Rexx "instructions"
Quote: |
--
-- 1ST SEGMENT SHOWN VIA FMI 3270 AND TABL
-- The strange characters after the CKEY= value is the packed representation of the root key
DELIMS SEGMENT=SFOFFID WHERE CKEY=mØ Ø}*
|
Be aware that you could receive errors like the system (RACF/ACF2) saying the IMSID is not available. In reality, it could well be that you don't have access authority to run/use RESOURCE NAME: FILEM.FUNCTION.IEB.xxxx where xxxx is the same value as that in the IMSID field.
Talk to your security people. (Mine found the problem via an SMF record).
Quote: |
RFAC-FILEM.FUNCTION.IEB.xxxx *VIO RFAC-FILEM
ÖD5451000S6843F 1X6AUXX V5452485 SB44 ACF9CAUT NO-RULE - DIRECTRY READ
23.073 14/03 13.25 Sxxxxx Sxxxx SIMPSON MICHAEL 0 0 20 0 16
SAF RESOURCE CLASS FACILITY
RESOURCE NAME: FILEM.FUNCTION.IEB.xxxx
|
_________________ Michael |
|