During the Christmas holidays, between various lunches with relatives, an outing, and, of course, some rest, I had the opportunity to rework the Code4i FS extension a bit. It was very challenging in that it allowed me to learn a new language, TypeScript, and to learn about new aspects and SQL services of the IBM i operating system that I was completely unaware of before.
For those unfamiliar with it, this extension allows you to use and, in some cases, even manage additional objects beyond those traditionally supported by the standard extension. The aim is to improve the user experience for programmers (but not only them) by providing a single interface from which to work and get feedback, avoiding the need to switch frantically between applications. In addition, it is intended as a tool to help those who are just starting out and therefore have less experience, as the GUI greatly simplifies things.
New supported object types are 20, here you can find a list with the major features:
Data Queue
- Send Message: Keyed/non-keyed support, UTF8 format, length validation, key validation
- Clear Queue: Removes all messages with confirmation
- View: Messages (standard & UTF8), queue info, sender details, timestamps
Data Area
- Change Value: All types (*CHAR, *DEC, *LGL), substring modification (start/length), type-based validation, range checking
- View: Current value, type, length, decimal positions, text description
Binding Directory
- Add Entry: *MODULE/*SRVPGM support, *IMMED/*DEFER activation, path validation (library/object format)
- Remove Entry: Individual entry removal with confirmation
- View: Entries list, exported procedures from bound service programs
File
- Query File: Opens SQL editor with pre-filled SELECT statement
- View: File/table/view/index info, statistics, members, dependent objects, supports PF/LF/VIEW/INDEX
Job Queue
- Hold/Release/Clear: Queue-level operations with status validation
- Hold/Release/End Jobs: Individual job management with confirmation
- View: Queue status, jobs list with details (status, submitter, timestamps)
Journal
- Generate Receiver: Creates new journal receiver (CHGJRN JRNRCV(*GEN))
- Display Entries: Opens SQL editor with DISPLAY_JOURNAL table function query
- View: Journal configuration, receiver chain with statistics, sequence numbers, timestamps
Message Queue
- Clear Queue: Removes all messages with confirmation (CLRMSGQ)
- View: Messages with ID, first/second level text, severity, sender job/user, timestamps
Output Queue
- Hold/Release/Clear: Queue management operations (HLDOUTQ/RLSOUTQ/CLROUTQ)
- Manage Writer: Auto start/stop based on current state (STRRMTWTR/STRPRTWTR/ENDWTR)
- Delete Old Spools: Age-based deletion with day input (SYSTOOLS.DELETE_OLD_SPOOLED_FILES)
- Generate PDF: Download individual spool as PDF (SYSTOOLS.GENERATE_PDF)
- Delete Spool: Remove individual spooled file (DLTSPLF)
- View: Queue status, spooled files list with details (name, user, job, pages, size)
Save File
- Download: Export SAVF to local file (copy to stream file, then download)
- Upload: Import local file to SAVF (upload, then copy from stream file)
- Clear: Remove all objects from SAVF (CLRSAVF)
- Save: Save objects/libraries to SAVF with comprehensive options (SAVOBJ/SAVLIB)
- Restore: Restore from SAVF with comprehensive options (RSTOBJ/RSTLIB)
- View: SAVF info, objects list, file members, spooled files, IFS objects (multi-panel)
Subsystem
- Start: Start subsystem with confirmation (STRSBS)
- End: End subsystem with option selection *IMMED/*CNTRLD (ENDSBS)
- End Jobs: End individual jobs in subsystem (ENDJOB)
- View: Subsystem status, pools, autostart jobs, workstation entries, routing entries, prestart jobs, job queue entries, active jobs
User Space
- Change Value: Modify user space data with start position and value input (QSYS2.CHANGE_USER_SPACE)
- View: Size, extendable flag, initial value, domain, data (text and binary/hex)
Class (Read-Only)
- View: Run priority, time slice, resource limits (CPU time, temporary storage, threads), default wait time, purge eligibility, usage statistics
- Note: Uses QWCRCLSI API via SQL stored procedure (auto-created on first use)
Command (Read-Only)
- View: Processing program, validity checking program, prompt override program, message/help files, execution environment settings (interactive/batch/REXX), threading attributes, CCSID
DDM File (Read-Only)
- View: Remote location info (system name/address, port), access method, remote file name/library, connection settings
- Note: Parses DSPDDMF output, handles multi-line field values
Job Description (Read-Only)
- View: Job queue, output queue, library list, accounting code, routing data, message logging, job switches, hold on job queue
Journal Receiver (Read-Only)
- View: Status, size, sequence numbers (first/last), attach/detach/save timestamps, linked receivers (previous/next), remote journal configuration, filter settings
Message File (Read-Only)
- View: All messages with ID, first/second level text, severity, reply type, default reply, valid reply values/ranges
Module (Read-Only)
- View: Basic info (creation date, source file, compiler options), size details (code, debug data, static storage), procedures list, imports/exports, referenced system objects, copyright strings
- Note: Uses DSPMOD with multiple DETAIL options (*BASIC, *SIZE, *IMPORT, *EXPORT, *PROCLIST, *REFSYSOBJ, *COPYRIGHT)
Program/Service Program (Read-Only)
- View: Program info, bound modules with source details, bound service programs with signatures, exported procedures (SRVPGM only), SQL settings, optimization details, activation group
Query Definition
- Translate to SQL: Converts Query/400 definitions to SQL format using RTVQMQRY command
- View: SQL translation of query definition with proper table notation (LIB.FILE instead of LIB/FILE)
- Note: Uses temporary source file and alias for extraction, automatically cleans up temporary objects
I would like to point out that this is not the final version; it is currently being reviewed by the Code4i team as the extension is part of that ecosystem. It is therefore possible that it may undergo further changes.
However, it would be interesting for other users to be able to test it now in ALPHA so that any bugs can be checked and corrected, as well as to gather feedback on new features. So, if you want to be a tester, write a comment and I’ll get back to you with instructions.
Andrea
Sure, I can look at it.
Would love to try it out
I’d like to give it a try.
Of course. I’d like to give it a try.
I’d like to give it a try.
Hi Riccardo,
You can get the latest version from GitHub, I’ll remain available for any info