设计浏览样本

Browse 样本应用程序使用单个程序模块;在支持的各编程语言中都会提供一个程序模块。

通过程序逻辑的流程为:
  1. 打开打印数据集并打印报告的标题行。 检查队列管理器和队列的名称是否已从运行 JCL 进行传递。 如果两个名称均已传递,那么打印包含名称的报告行。 如果未传递,那么打印错误消息,关闭打印数据集并停止处理。

    程序测试从 JCL 传递的参数的方式取决于编写程序所用的语言; 有关更多信息,请参阅 依赖于语言的设计注意事项

  2. 使用 MQCONN 调用连接到队列管理器。 如果此调用不成功,那么打印完成代码和原因码,关闭打印数据集并停止处理。
  3. 使用带有 MQOO_BROWSE 选项的 MQOPEN 调用打开队列。 在输入此调用时,程序将使用步骤 2中返回的连接句柄。 对于对象描述符结构 (MQOD) ,它使用除队列名称 (在步骤 1 中传递) 以外的所有字段的缺省值。 如果此调用不成功,那么打印完成代码和原因码,关闭打印数据集并停止处理。
  4. 使用 MQGET 调用浏览队列上的第一条消息。 在此调用的输入中,程序指定:
    • 来自步骤 23 的连接和队列句柄
    • 所有字段都设置为其初始值的 MQMD 结构
    • 两个选项:
      • MQGMO_BROWSE_FIRST
      • MQGMO_ACCEPT_TRUNCATED_MSG
    • 大小为 80 字节的缓冲区,用于存放从消息复制的数据

    MQGMO_ACCEPT_TRUNCATED_MSG 选项允许调用完成,即使消息长度超过调用中指定的 80 字节缓冲区也如此。 如果消息长度超过缓冲区,那么消息会截断以适合缓冲区大小,并且完成代码和原因码设置为显示此大小。 已设计样本,以便消息截断为 80 个字符,以使报告易读。 缓冲区大小由 DEFINE 语句设置,因此在需要的情况下可以轻松对其进行更改。

  5. 执行以下循环,直至 MQGET 调用失败:
    1. 打印显示以下内容的报告行:
      • 消息的序列号(这是浏览操作的计数)。
      • 消息的实际长度(不是已截断的长度)。 该值在 MQGET 调用的 DataLength 字段中返回。
      • 消息数据的前 80 个字节。
    2. 将 MQMD 结构的 MsqIdCorrelId 字段重置为空值
    3. 使用带有以下两个选项的 MQGET 调用浏览下一条消息:
      • MQGMO_BROWSE_NEXT
      • MQGMO_ACCEPT_TRUNCATED_MSG
  6. 如果 MQGET 调用失败,请测试原因码以查看调用是否失败,因为浏览光标已到达队列结尾。 在此情况下,打印 报告结束 消息并转至步骤 7 ; 否则,打印完成代码和原因码,关闭打印数据集,停止处理。
  7. 使用带有步骤 3中返回的对象句柄的 MQCLOSE 调用来关闭队列。
  8. 使用带有步骤 2中返回的连接句柄的 MQDISC 调用与队列管理器断开连接。
  9. 关闭打印数据集并停止处理。