There are two types of IAI dictionaries on the Test CV's: (1) the 'plain vanilla' dictionary on IDMS20 and (2) the 'IAI' dictionaries on IDMS20 and IDMS30. Because of the unique way in which each of these dictionary types is accessed, load modules for dialogs, maps, and tables are loaded from different places, as explained below.
The VAN dictionary is on IDMS20. It is associated with LOADLIB 103.
When the programmer signs on to IDMS20, he executes a van clist which has the following 3 commands:
- DCUF SET DICTNAME VAN
- DCUF SET DBNAME VAN
- DCUF SET LOADLIST VANLOAD
The VANLOAD loadlist tells IDMS to load COBOL programs from the V0103 DD card:
- //V0103 DD DSN=DPC.TWIN.VAN.LOADLIB.DC,DISP=SHR
These 3 commands tell the CV which source dictionary to access and which version numbers of load modules to execute. The order of search in this case is:
- The 'van' dictionary load area, for version '103'. (It will not find the module here, because the dialogs, etc. ,are always generated as version 1, not '103'. )
- The primary dictionary load area, for version '103'. (It will not find the module here, because none of the IAI modules are in the primary dictionary. )
- The 'van' dictionary load area, for version 1. (It will find dialogs, tables, and subschemas here. )
- The V0103 PDS loadlib for ANY version of the program. (It will find the module here only if it is searching for a COBOL program. None of the dialogs, maps, or tables are punched to the PDS from a vanilla dictionary. )
- The CDMSLIB concatenated PDS loadlibs, for version 1. (It should never get this far, but if it does, it will pick up the module from the first one it finds, searching through all the PDS's in the list. )
When you recompile a DC COBOL program using these dictionaries, you must issue the following command in order for the CV to find the next program:
- DCMT VARY PRO xxxxxxxx 103 NEW COPY IMM where 'xxxxxxxx' is the name of the program.
The version number tells the CV to go to the V0103 PDS loadlib to find the new copy of the program.
When you regenerate a dialog, map, or subschema, you should not have to issue the 'NEW COPY' command. It is done automatically by the system. Tables must be new-copied in the following manner:
- DCMT VARY PRO xxxxxxxx DICTNAME VAN NEW COPY IMM
If the table is linked with the map load module, the map must then be regenerated.
The order of search for load modules is modified and is as follows:
- The CDMSLIB PDS loadlib concatenation for version 1. (It will find all modules here, because all dialogs, maps, tables, and subschemas are punched to this loadlib. DC COBOL programs are all compiled into this loadlib. Since this dictionary's loadlib is first in the list, its load modules will always be found first.
)
- The primary dictionary load area, for version 1. (Only SQL will be found here. )
- You must be sure to punch all modified modules into the associated PDS loadlib. Use dialog PUNCH to do this.It will issue all necessary 'NEW COPY' commands as well as punch the module to the loadlib. Or: make all changes on one day, but test them the next day after the nightly job has run that punches all modified modules into the appropriate PDS loadlib.
Generally, the only things loaded by the CV for a batch program
are the subschema and called subroutines. Subroutines are loaded
from the PDS loadlib indicated in the job's STEPLIB card. The
programmer indicates from what dictionary the subschema should
be loaded with a control card in the SYSIDMS file:
- 'DICTNAME=ppp', where 'ppp' is the dictionary name.
The CV will load the subschema from the 'ppp ' dictionary load
area. Try to avoid using the IAI-supplied dictionary name, such
as 'IDZDDDML', because there may be more than one of these dictionaries
around, but on separate CV's.
A problem arises when the main batch program calls a subroutine
that uses a different subschema AND the dictionary name is not
passed to the called subroutine. This is the normal case for IAI
code.In this situation, the CV tries to load the subroutine's
subschema from the primary IDD load area (where it is not found),
then from the CDMSLIB concatenation in the CV startup deck. Whichever
subschema it finds first in that list, it will load.
The CDMSLIB concatenations differ for each CV and may differ
in time for the same CV. To view the current CDMSLIB concatenation
for a specific CV, browse one of the following:
- IDMS.PROCLIB(IDMS20)
- IDMS.PROCLIB(IDMS30)
- IDMS.PROCLIB(IDMS40)
If you seem to be accessing the wrong database, be sure to check
the following:
- The subschema name in the program compilation(s). Check the
called subroutine's subschema name too.
- The dictionary indicated in the SYSIDMS file.
- If there is a called subroutine with a different subschema,
check the CDMSLIB concatenation list to find which loadlib the
subschema is being loaded from. If not the one you intended, you
have 3 choices:
- Modify the programs to pass the DBNAME to the called program.
- Create a subschema with a unique name for the called program.
- If it's a retrieval-only program, run in local mode where
you have absolute control over the STEPLIB concatenation list
and subschemas are all loaded from the PDS loadlib, not the IDD
load area.
- The SYSCTL statment to make sure you're going to the right CV.