检索,存储和复用文档

应用程序创建的文档仅在创建这些文档的 CICS 任务的长度内存在。 要复用文档,应用程序需要检索副本并保存该副本。

关于此任务

此命令序列显示应用程序如何使用 EXEC CICS DOCUMENT 命令来创建文档,检索文档,将其存储在临时存储器队列上,以及将其作为文档在同一应用程序或其他应用程序中复用。

Java 应用程序可以检索由其他编程语言编写的应用程序创建的文档,并使用 JCICS 类处理这些文档。 有关类文档,请参阅 JCICS Javadoc 参考

过程

  1. 在应用程序中,定义并初始化以下变量:
    • 用于保存文档令牌的 16 字节字段 ATOKEN。
    • 用于保存检索到的文档的 20 字节缓冲区 DOCBUF。
    • 一个名为 FWORDLEN 的全字二进制字段,用于保存检索到的数据的长度。
    • 称为 HWORDLEN 的半字二进制字段,用于保存临时存储器 WRITE 命令的长度。
  2. 使用 DOCUMENT CREATE 命令创建初始文档:
    EXEC CICS DOCUMENT CREATE
    DOCTOKEN(ATOKEN)
    TEXT('A sample document.')
    LENGTH(18)
    为了帮助应用程序计算保存检索文档所需的缓冲区大小,更改文档大小的文档命令 (DOCUMENT CREATE 和 DOCUMENT INSERT 命令) 有一个 DOCSIZE 选项可用。 当发出 RETRIEVE 命令时,此值是在其原始代码页 (包括控制信息) 中包含文档副本所需的缓冲区的最大大小。 但是,当 CHARACTERSET 选项指定比原始 EBCDIC 数据 (例如, UTF-8) 需要更多字节的编码时,最大大小可能不足以存储转换后的文档。 您可以在分配缓冲区之前确定实际文档长度,方法是使用虚拟缓冲区和 0 的 MAXLENGTH 发送 DOCUMENT RETRIEVE ,然后处理 LENGERR 条件并使用返回的 LENGTH 值。
  3. 在同一任务中,发出 DOCUMENT RETRIEVE 命令以在应用程序自己的缓冲区中获取文档的副本。
    EXEC CICS DOCUMENT RETRIEVE
    DOCTOKEN(ATOKEN)
    INTO(DOCBUF)
    LENGTH(FWORDLEN)
    MAXLENGTH(20)
    缺省情况下,检索文档时,传递到应用程序缓冲区的数据将存储在包含重建文档的精确副本所必需的控制信息的表单中。 CICS 将标记插入到文档内容中,以标识书签并对不需要代码页转换的块进行定界。 因此,从检索到的副本创建的文档与原始文档完全相同。 如果不需要重新创建原始文档,那么可以按如下所示修改 DOCUMENT RETRIEVE 命令:
    1. 要请求没有控制信息的副本,请指定 DATAONLY 选项。
      使用此选项时, CICS 会省略所有嵌入的标记。 检索到的文档不包含书签,并且没有标记来对不需要代码页转换的块进行定界。
    2. 要将整个副本转换为单个客户机代码页,请指定 CHARACTERSET 选项。
  4. 将文档存储在临时存储器队列中:
    EXEC CICS WRITEQ TS
    QUEUE('AQUEUE')
    FROM(DOCBUF)
    LENGTH(HWORDLEN)
  5. 在相同或其他应用程序中,将存储的数据读取到应用程序的缓冲区中:
    EXEC CICS READQ TS
    QUEUE('AQUEUE')
    INTO(DOCBUF)
    LENGTH(HWORDLEN)
  6. 使用带有 FROM 选项的 DOCUMENT CREATE 命令可使用数据缓冲区 (即检索到的文档) 的内容来创建新文档:
    EXEC CICS DOCUMENT CREATE
    DOCTOKEN(ATOKEN)
    FROM(DOCBUF)
    LENGTH(FWORDLEN)

下一步操作

您还可以使用 DOCUMENT RETRIEVE 和 DOCUMENT INSERT 命令将整个文档插入到现有文档中。 必须首先在应用程序中定义并初始化以下变量:
  • 包含要检索的文档的文档令牌的 16 字节字段 RTOKEN
  • 具有足够长度的缓冲区 DOCBUF ,用于保存检索到的文档
  • 名为 REREEVLEN 的全字二进制字段,用于保存检索到的数据的长度
  • 一个名为 MAXLEN 的全字二进制字段,用于保存缓冲区可接收的最大数据量,即 DOCBUF 的长度
  • 包含要插入到其中的文档的文档令牌的 16 字节字段 ITOKEN
以下命令序列显示了由 RTOKEN 指示的文档被插入到由 ITOKEN 指示的另一个文档中:
 EXEC CICS DOCUMENT RETRIEVE
DOCTOKEN(RTOKEN)
INTO(DOCBUF)
LENGTH(RETRIEVLEN)
MAXLENGTH(MAXLEN)

EXEC CICS DOCUMENT INSERT
DOCTOKEN(ITOKEN)
FROM(DOCBUF)
LENGTH(RETRIEVLEN)

检索到的文档插入在 DOCUMENT INSERT 命令中指定的文档的末尾,检索到的文档的所有控制信息都将出现在第二个文档中。 DOCUMENT INSERT 命令的 LENGTH 参数必须等于从 DOCUMENT RETRIEVE 命令返回到字段重试的值。