You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AS400 CLLE开发:统计活动子系统并邮件文本输出及命令输出获取

AS400 CLLE 实现活动子系统统计邮件发送与命令输出捕获

一、统计活动子系统数量并发送邮件

实现思路

利用IBM官方系统视图QSYS2.SUBSYSTEM_INFO直接查询活动状态的子系统,统计数量后通过SNDDST命令发送纯文本邮件。

示例CLLE代码

PGM
/* 定义变量:活动子系统计数、邮件文本 */
DCL VAR(&ACTCOUNT) TYPE(*INT) LEN(5) VALUE(0)
DCL VAR(&MSGTEXT) TYPE(*CHAR) LEN(100)

/* SQL统计活动子系统数量,结果存入变量 */
RUNSQL SQL('SELECT COUNT(*) INTO :&ACTCOUNT FROM QSYS2.SUBSYSTEM_INFO WHERE SUBSYSTEM_STATUS = ''ACTIVE''') COMMIT(*NONE)

/* 构造邮件内容 */
CHGVAR VAR(&MSGTEXT) VALUE('当前系统活动子系统数量:' || %CHAR(&ACTCOUNT))

/* 发送邮件:内部用户用TOUSR,外部邮件用TOINTNET */
SNDDST TYPE(*LMSG) TOINTNET(('admin@example.com')) DSTD('活动子系统统计') MSG(&MSGTEXT)
ENDPGM

关键说明

  • QSYS2.SUBSYSTEM_INFO是官方维护的系统视图,包含子系统状态、名称、所属库等完整信息,比直接读取底层文件更稳定可靠。
  • 发送外部邮件需提前配置系统SMTP:用CHGSMTPA命令设置SMTP服务器地址,同时确保执行用户的配置文件中已指定邮件地址(CHGUSRPRF MAILD(xxx@xxx.com))。
  • 若发送给内部系统用户,将TOINTNET参数替换为TOUSR(('USERID'))即可。

二、CLLE中捕获系统命令输出(替代*PRINT)

针对不同系统命令,可选择以下几种实用方案:

1. 利用命令自带OUTPUT(*OUTFILE)参数(推荐)

大部分IBM系统命令支持直接输出到物理文件,以WRKSBS为例:

PGM
/* 定义输出文件路径 */
DCL VAR(&OUTFILE) TYPE(*CHAR) LEN(20) VALUE('MYLIB/SBS_OUTPUT')

/* 复制WRKSBS的系统输出模板文件 */
CRTDUPOBJ OBJ(QADSSBS) FROMLIB(QSYS) OBJTYPE(*FILE) TOLIB(MYLIB) NEWOBJ(SBS_OUTPUT)

/* 执行WRKSBS并输出到指定文件 */
WRKSBS OUTPUT(*OUTFILE) OUTFILE(&OUTFILE)

/* 后续处理:用SQL查询文件内容,或用CL/RPG读取记录 */
RUNSQL SQL('SELECT SUBSYSTEM_NAME, SUBSYSTEM_STATUS FROM MYLIB/SBS_OUTPUT') COMMIT(*NONE)

/* 可选:清理临时输出文件 */
DLTF FILE(MYLIB/SBS_OUTPUT)
ENDPGM

说明:QADSSBS是WRKSBS命令的系统默认输出模板,复制后可直接作为命令输出目标文件,其结构与WRKSBS界面展示的内容完全一致。

2. 用QSH捕获无*OUTFILE参数的命令输出

对于不支持文件输出的命令,可借助QSH将命令输出写入IFS临时文件,再读取处理:

PGM
DCL VAR(&CMD) TYPE(*CHAR) LEN(200)

/* 执行WRKSBS并过滤活动子系统,输出到IFS临时文件 */
CHGVAR VAR(&CMD) VALUE('WRKSBS | grep ''ACTIVE'' > /tmp/active_sbs.txt')
QSH CMD(&CMD)

/* 用SQL读取IFS文件内容到物理表 */
RUNSQL SQL('CREATE TABLE MYLIB/ACTIVE_SBS AS (SELECT * FROM TABLE(QSYS2.IFS_READ_FILE(''/tmp/active_sbs.txt''))) WITH DATA') COMMIT(*NONE)

/* 清理IFS临时文件 */
QSH CMD('rm /tmp/active_sbs.txt')
ENDPGM

说明:需确保执行用户拥有IFS读写权限,QSYS2.IFS_READ_FILE函数用于读取IFS文本文件的内容并转化为SQL可处理的格式。

3. 用SQL替代系统命令(高效方案)

若命令对应的信息可通过系统视图查询,直接用SQL获取数据比捕获命令输出更高效。比如WRKSBS展示的所有信息,都可以通过QSYS2.SUBSYSTEM_INFO视图查询,无需执行WRKSBS命令。

内容的提问来源于stack exchange,提问作者Tejal Porwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 17:02:38