run.json and the person’s keys are its screens. No JCL is needed. Needs harwell:runs:write.
1. The map
BMS macro source goes inBMS/. Harwell assembles it on every run into the physical map and the symbolic map copybook, named after the mapset, so COPY GRTSET finds it. Do not write the symbolic map copybook yourself.
BMS/GRTSET.bms:
2. The program
A pseudo-conversational program: the first task sends the map and returns withTRANSID, and the next key starts it again with a COMMAREA.
Progs/GREET.cbl:
3. The region and the screens
run.json:
The first screen has no fields because the program sends its map before it receives one. Every program in the unit is in the PPT, so
LINK and XCTL reach any of them.
4. Run it
HELLO ADA. The structured result carries the same under cics: the maps sent, each field’s value and attribute, the cursor, and the COMMAREA each task returned.
5. Check the screens
ORACLE/screens.json states the maps you expect, one entry per map sent, in order. null skips one.
oracle: passed, or names the field that differs.
Files and SQL
A program reads and writes VSAM files declared infct, seeded from CATALOG/ like any data set. EXEC SQL in an online program runs as in batch; seed tables in DB/seed.sql. A task’s writes are committed when it ends or at SYNCPOINT, and backed out by SYNCPOINT ROLLBACK or an abend.
A condition the program does not handle abends the task with CICS’s code: AEIM for NOTFND, AEI9 for MAPFAIL, AEI0 for PGMIDERR. See Errors.
Hand it to a person
open_terminal opens a browser page where a person sits at the screen and drives the transaction by hand.
url. The link is the only credential: anyone holding it can use the screen until it expires. By default the unit’s own screens replay first, so the person continues from where they end. Pass replay: false to open on an empty screen.
Each key the person presses is one task. They mark each turn right or wrong, add notes, and close. Then read what they did (needs harwell:runs:read):
Write
screens and oracle back into the unit, and the next run_unit replays and checks what the person did.