The generic unit SYSALLDA, which (according to IBM) "contains all direct access devices defined to the system", is used for allocating disk data sets in JCL cataloged procedures and jobs presented here.
The heart of JCL is the capability to create and use "cataloged procedures" thus permitting certain level of modular design.
By adding lately the capability to call one cataloged procedure from another (better late, than never) IBM gave capability to use a modular design for JCL.
Also many other JCL restrictions were cancelled by IBM and cosequently the procedures presented here were changing to make use of their new less restrictive environment.
The structural approach comes at a price (negligible in the modern mainframe world) — a tendency to end up with more job steps (and hence System Initiator calls that would be required otherwise. However, the benefits of structural design for JCL far overweight (according to my experience) this overhead. After all "Computers should work, humans should think" (IBM principle) — structural approch shifts "work" from "human" to "computer", thus giving "human" more time for creative activities.
Required parameters in JCL cataloged procedures are listed in PROC statement to provide adequate documentation but are commented out to get an obvious JCL error in case they they won't be specified.
//DEVVLADL JOB CLASS=D,MSGCLASS=H,NOTIFY=&SYSUID TYPRUN=SCAN D is development (or test) job input class H is held message class
I have a habit of putting at the end of JOB parameters' list " TYPRUN=SCAN". This provides quick and easy way to switch between job scanning mmented out to get an obvious JCL error in case they they won't be specified.
Whenever it is possible and appropriate &SYSUID system variable is used as a top-level Data Set Name (DSN) qualifier. &SYSUID contains for each system user his/her TSO identifier which is a default DSN prefix for most ISPF services.
Two sets of libraies are used for development: PGMR — Programmer tools and USER — User (client) projects. I find this separation to be convenient since on most part programmer tools get accumulated and refined over time and as such should be carried along from one client to another. User projects on the other hand are client-specific and those libraries are to be startted from scratch on a new client site. It's a good idea however, to have their names standardized when it is possible to minimize necessary adjustments of cataloged procedures' defaults.
All printed outputs are directed to SYSOUT=* output class. "*" tells Job Scheduler to use MSGCLASS value for each SYSOUT=*. This gives a programmer an effective way to control printed output of an entire job by manipulating MSGCLASS parameter (which is normally set to a held ouput class so that printouts can be browsed via SDSF (or similar Spool display system) and selectively directed to print destinations when necessary.