Let's go over specific examples where activation group issues can cause SETLL
, READ
, or CHAIN
to behave unexpectedly or cause file access errors in ILE RPG programs on IBM i.
๐ฏ Common Activation Group Issues Affecting SETLL
, READ
, CHAIN
Symptom | Likely Cause |
---|---|
READ returns wrong data or fails |
Shared open data path (ODP) from previous call |
CHAIN doesn't find a record |
File is open in another activation group |
SETLL + READ skips records |
Stale file cursor from earlier call |
RNX1216 (file open or level check) |
File already open in another activation group |
๐งพ Example 1: SETLL Skipping Records Due to Reused Activation Group
Setup:
-
Program
ORDERPGM
readsORDERPF
by key (CUSTID
) -
Compiled with
ACTGRP('ORDERS')
setll custID ORDERPF;
read ORDERPF;
Problem:
You run the program once, then again in the same job. The second run:
-
Reuses the activation group
-
The ODP (Open Data Path) from the first run is still active
-
Cursor is not at the beginning →
SETLL
doesn't reposition properly
Result:
-
READ
returns unexpected records or nothing at all
โ Fixes:
-
Recompile
ORDERPGM
with:ctl-opt actgrp(*new);
Ensures fresh activation group and ODP on each run.
-
Or manually close the file at the end of the program:
close ORDERPF;
๐งพ Example 2: CHAIN Fails After File Definition Changes
Setup:
-
Program
CUSTOMERPGM
doesCHAIN
toCUSTOMERPF
-
Program was compiled before the file changed
-
Runs in a named activation group
Problem:
You recompile CUSTOMERPF
, but not CUSTOMERPGM
. When the program is called again:
-
It runs in the existing activation group
-
Tries to use the old file format ID
-
Fails with:
RNX1216 โ Level check error occurred on file CUSTOMERPF
โ Fixes:
-
Always recompile programs that use changed files
-
Use
*NEW
or callRCLACTGRP
to force new file load:RCLACTGRP ACTGRP(CUSTOMERGRP)
๐งพ Example 3: Multiple Programs Use Same File in Conflicting Groups
Setup:
-
Program A:
actgrp('SALES')
→ opensORDERS
-
Program B:
actgrp('REPORTS')
→ also opensORDERS
Problem:
If ORDERS
is opened with different share/open rules, or fields differ, IBM i may:
-
Conflict on record format level ID
-
Fail with errors like:
RNX1217 โ Program not found or not loaded RNX1216 โ File already open or level check
โ Fixes:
-
Use shared activation group if programs must share files:
ctl-opt actgrp('ORDERS');
-
Or ensure complete isolation with
*NEW
๐ Summary Table
Symptom | Cause | Solution |
---|---|---|
READ skips records |
Reused ODP in shared actgrp | Use *NEW , or CLOSE file |
CHAIN fails after file change |
Format mismatch | Recompile, use RCLACTGRP |
File open error | File opened in different group | Use consistent activation group |
Wrong data returned | Leftover file cursor | Reset ODP or actgrp |