使用 QCMDEXC 通过 DB2 存储过程调用 QEZSNDMG

Using QCMDEXC to call QEZSNDMG via DB2 stored procedure

在一个业余项目上工作,我使用一组视图来识别一组 iSeries 物理文件中的记录争用。

一旦确定,我想做的是提取锁定记录的用户配置文件,然后将中断消息作为信息性中断消息发送到他们的终端。

我找到的是 QEZSNDMG API。足够简单以交互方式使用,但我正在尝试将一个命令与 QCMDEXC API 结合使用以发出对 QEZSNDMG 的调用并提醒用户他们正在锁定记录。

查看 IBM documentation of the QEZSNDMG API,我看到有两组选项参数,但没有任何要求(这对我来说似乎很奇怪,但改天再说)。但我继续收到错误 "Parameters passed on CALL do not match those required."

以下是我到目前为止从命令行尝试过的一些示例:

  1. CALL PGM(QEZSNDMG) PARM('*INFO' '*BREAK' 'TEST' '4' 'DOUGLAS' '1' '1' '-4')
  2. CALL PGM(QEZSNDMG) PARM('*INFO' '*BREAK' 'TEST' '4' 'DOUGLAS')
  3. CALL PGM(QEZSNDMG) PARM('*INFO' '*BREAK' 'TEST' '4' 'DOUGLAS' '1')

注意:如果可能的话,我想避免使用 CL 或 RPG 程序,但我知道使用我在发帖前找到的许多示例之一可能会导致这种情况。只想在走那条路之前用尽这个选项。

更新 登录后,我使用 WRKMSGQ 查看分配给我的站的消息队列。有两个:QSYS/DOUGLAS 和 QUSRSYS/DOUGLAS。然后我发出了 SNDBRKMSG 对我的工作站没有影响(IE,消息没有中断我的会话):

我意识到如果我在 TOMSG 参数中提供工作站会话名称它会起作用:

我一直在寻找使用 SNDBRKMSG。

一些正确方向的推动使我意识到工作站会话 ID 位于字段 JOB_NAME(工作 number/username/workstation)的 QSYS2.RCD_LOCK 内。

提取工作站 ID 使我能够为 QCMDEXC 创建格式正确的 SNDBRKMSG 命令,并提醒用户他们正在锁定另一个进程所需的记录。