![[z/OS]](ngzos.gif)
通过 IBM MQ 编写 IMS 事务程序
通过 IBM® MQ 处理 IMS 事务所需的编码取决于 IMS 事务所需的消息格式及其可返回的响应范围。 但是,当应用程序处理 IMS 屏幕格式化信息时,需要考虑以下几点。
从 3270 屏幕启动 IMS 事务时,消息通过 IMS 消息格式服务传递。 这会从事务所见的数据流中除去所有终端依赖性。 通过 OTMA 启动事务时,不会涉及 MFS。 如果在 MFS 中实现应用程序逻辑,那么必须在新应用程序中重新创建。
在某些 IMS 事务中,最终用户应用程序可以修改某些 3270 屏幕行为,例如,突出显示输入了无效数据的字段。 通过向需要由程序修改的每个屏幕字段的 IMS 消息添加双字节属性字段来传达此类型的信息。
因此,如果您正在编码应用程序以模拟 3270,那么在构建或接收消息时需要考虑这些字段。
- 按下哪个键(例如,Enter 和 PF1)
- 将消息传递到应用程序时光标所在位置
- 属性字段是否已由 IMS 应用程序设置
- 高、正常或零强度
- 颜色
- IMS 是否期望下次按 Enter 键时返回该字段
- IMS 应用程序是否在任何字段中使用了空字符 X'3F' )。
如果 IMS 消息仅包含字符数据 (LLZZ 数据段除外) ,并且您正在使用 MQIIH 结构,请将 MQMD 格式设置为 MQFMT_IMS ,将 MQIIH 格式设置为 MQFMT_IMS_VAR_STRING。
如果 IMS 消息仅包含字符数据 (LLZZ 数据段除外) ,并且您 未 使用 MQIIH 结构,请将 MQMD 格式设置为 MQFMT_IMS_VAR_STRING ,并确保 IMS 应用程序在应答时指定 MODname MQFMT_IMS_VAR_STRING。 如果出现问题(例如,用户无权使用事务)并且 IMS 发送了一条错误消息,那么此消息的 MODname 格式为 DFSMOx,其中 x 是 1 到 5 范围内的数字。 这将放入 MQMD.Format 中。
如果 IMS 消息包含二进制,压缩或浮点数据 (LLZZ 数据段除外) ,请对您自己的数据转换例程进行编码。 有关 IMS 屏幕格式化的信息,请参阅 IMS/ESA® Application Programming: Transaction Manager 。
编写 IBM MQ 应用程序以调用 IMS 会话式事务
将此信息用作编写 IBM MQ 应用程序以调用 IMS 会话式事务时的注意事项指南。
- 在应用程序消息中包含 MQIIH 结构。
- 将 MQIIH 中的
CommitMode设置为 MQICM_SEND_THEN_COMMIT。 - 要调用新对话,请将 MQIIH 中的
TranState设置为 MQITS_NOT_IN_CONVERSATION。 - 要调用对话的第二个步骤和后续步骤,请将
TranState设置为 MQITS_IN_CONVERSATION,并将TranInstanceId设置为该对话的上一步中所返回的此字段的值。 - 如果丢失从 IMS发送的原始消息,那么 IMS 中没有简单的方法来查找
TranInstanceId的值。 - 应用程序必须检查来自 IMS 的消息的
TranState,以检查 IMS 事务是否已终止对话。 - 您可以使用 /EXIT 来结束对话。 您还必须将
TranInstanceId括起来,将TranState设置为 MQITS_IN_CONVERSATION ,并使用正在其上执行对话的 IBM MQ 队列。 - 您不能使用 /HOLD 和 /REL 来保持和发布对话。
- 如果重新启动 IMS ,那么将终止通过 IBM MQ - IMS 网桥调用的对话。
编写包含 IMS 命令的程序
应用程序可以构建格式为 LLZZ命令的 IBM MQ 消息,而不是事务,其中 command 的格式为 /DIS TRAN PART 或 /DIS POOL ALL。
可以通过此方式发出大多数 IMS 命令; 请参阅 IMS V11 Communications and Connections 以获取详细信息。 在文本格式的 IBM MQ 应答消息中接收到命令输出,这将发送到 3270 终端以进行显示。
OTMA 已实现特殊形式的 IMS 显示事务命令,该命令返回输出的架构形式。 确切格式在 IMS V11 Communications and Connections中定义。 要从 IBM MQ 消息调用此表单,请像以前一样构建消息数据 (例如 /DIS TRAN PART) ,并将 MQIIH 中的 TranState 字段设置为 MQITS_ARCHITECTED。 IMS 将处理该命令,并以架构格式返回应答。 架构响应包含能够在文本格式输出中找到的所有信息,以及一部分附加信息:事务是定义为可恢复还是定义为不可恢复。
触发
IBM MQ - IMS 网桥不支持触发器消息。
如果定义了使用具有 XCF 参数的存储类的启动队列,那么在消息到达网桥时,会拒绝将这些消息放入该队列。