Skip to main content
An online program runs as CICS tasks. A person types a transaction ID, the program sends a map, and each key they press starts the next task with the COMMAREA the last one returned. In Harwell, the region is declared in 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 in BMS/. 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 with TRANSID, 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

The result shows each map the tasks sent as the terminal shows it, 24 rows of 80 characters, after the task log. The second screen’s row 5 reads 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.
The last line of the text reads oracle: passed, or names the field that differs.

Files and SQL

A program reads and writes VSAM files declared in fct, 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.
Give the person 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.