编写提供 Atom 条目数据的程序

您可以编写服务例程以从 CICS® 程序可访问的任何数据 (例如, Db2® 数据库中的记录,文件中的记录或 COMMAREA) 提供 Atom 订阅源。 下列指示信息将介绍如何编写用于响应针对 Atom 订阅源的 HTTP GET 请求的程序。

关于此任务

Web 客户机可以请求订阅源中的大量 Atom 条目,也可以请求某个特定的条目。 CICS 接收来自 Web 客户机的请求,并根据每个客户机请求的相关信息链接到该程序。 对于客户机请求的每个 Atom 条目,CICS 都会链接到该程序一次,并且该程序每次都会返回一个条目。

该程序使用从资源(如数据库或文件)的记录中抽取的数据提供 Atom 条目,这些资源会保存针对该订阅源 Atom 条目的数据。 有关此过程的概述,请参阅 来自 CICS的 Atom 订阅源的数据处理

CICS 使用容器接口与服务例程进行通信。 使用 EXEC CICS GET CONTAINER 和 EXEC CICS PUT CONTAINER 命令与容器进行交互。 C® 语言示例服务例程 DFH$W2S1 向您展示了如何使用容器来响应 HTTP GET 请求。 COBOL 样本服务例程 DFH0W2F1 还显示了如何使用容器,但要知道由于 DFH0W2F1 样本会响应 HTTP PUT、POST、DELETE 请求以及 GET 请求,因此它更为复杂。

由于 Web 客户机请求是 HTTP 请求,因此您还可以使用 CICS Web API 命令(例如 WEB READ HTTPHEADER 和 WEB READ QUERYPARM 命令)与其进行交互。 如果您知道如何使用这些命令,那么可以在服务例程中使用它们,以从 Web 客户机请求中直接获取信息,包括 CICS 在 DFHATOMPARMS 容器中未提供的任何信息。

如果您可以为包含 Atom 条目数据的资源创建一个 XML 绑定,那么就可以将信息(有关包含 Atom 条目数据的资源记录中的字段名称和长度)从 CICS 传递到 DFHATOMPARMS 容器中的程序。 您的程序可以使用该信息查找资源记录中的元数据字段。 通过使用这些资源处理参数,您可以创建可处理多个资源的类属服务例程。 但是,您不一定得使用资源处理参数;如果您希望使用它们,那么可以直接将有关资源结构的信息以代码形式编写到程序中。

要响应 GET 请求,您的服务例程必须执行下列这些任务:

过程

  1. 使用 EXEC CICS GET CONTAINER 命令检索 DFHATOMPARMS 容器中的数据。
    CICS 使用该容器向服务例程提供有关请求的信息。
    样本服务例程 DFH$W2S1 显示如何读取 DFHATOMPARMS 中的参数。
    DFHATOMPARMS 容器 具有 CICS 在此容器中传递的参数的完整文档。
  2. 检查 ATMP_HTTPMETH 参数的值以验证请求方法是否为 GET。
    CICS 返回错误或对除 GET、POST、PUT 和 DELETE 以外的方法做出适当的响应。 有关响应针对 Atom 集合的 HTTP PUT , POST 或 DELETE 请求的指示信息,请参阅 处理服务例程中的 Atom 集合编辑请求
  3. 使用 DFHATOMPARMS 容器中 ATMP_ATOMTYPEATMP_SELECTOR 参数的值来标识资源中包含程序必须返回到 CICS的 Atom 条目数据的记录。
    ATMP_SELECTOR 参数可能包含标识特殊 Atom 条目的选择器值。 Atom 条目的选择器值 说明了选择器值可以是什么,以及 CICS 和服务例程如何使用该值。
    1. 如果 ATMP_SELECTOR 为空并且 ATMP_ATOMTYPE 具有值 "feed" ,那么客户机未指定特定 Atom 条目,因此请在资源中找到保存添加到订阅源的最新 Atom 条目的记录。
      例如,如果 Atom 条目数据保存在数据库中,那么会使用添加到该数据库的最新记录。
    2. 如果 ATMP_SELECTOR 包含选择器值并且 ATMP_ATOMTYPE 具有值 "feed" ,请在由选择器值标识的资源中找到记录。
      这个值组合可能表明 CICS 需要来自订阅源的第二个或后续 Atom 条目才能完成客户机请求,并且 CICS 正使用服务例程在上一个迭代中提供的选择器值来请求这些 Atom 条目中的一个。 当客户机请求包含特定范围的 Atom 条目(如部分列表)的订阅源文档时,该值组合还用于请求中的第一个 Atom 条目。
    3. 如果 ATMP_SELECTOR 包含选择器值并且 ATMP_ATOMTYPE 具有值 "entry" ,请在由选择器值标识的资源中找到记录。
      这个值组合指示客户机正请求订阅源中某个已知的 Atom 条目。
  4. 如果您具有包含 Atom 条目数据的资源的 XML 绑定,并且想要使用资源处理参数来传递有关资源中的字段的信息,请对服务例程进行编码,以使用 ATMP_TITLE_FLD 参数的值以及以 _FLD 结尾的其他参数来标识包含 Atom 条目元素的数据的每个字段的名称和长度。
    为使用资源数据的 Atom feed 设置 Atom 配置文件时,需要在 Atom 配置文件的 <cics:fieldnames> 元素中指定这些字段的名称, CICS 将使用资源处理参数把它们传递给服务例程。
    DFHATOMPARMS 容器 记录资源处理参数。
  5. 使用 PUT CONTAINER 命令,按照您从资源确定的记录中的描述,创建一个具有 DATATYPE(CHAR) 属性、包含 Atom 条目内容、名为 DFHATOMCONTENT 的容器。
    该容器是必需的。 样本服务例程 DFH$W2S1 显示了如何更新容器, DFHATOMCONTENT 容器 说明了要放入容器中的内容。
  6. 如果从资源中标识的记录包含为 Atom 条目提供元数据的任何字段 (例如标题) ,请遵循 返回容器中的 Atom 条目元数据中的步骤,使用可选容器将此元数据返回到 CICS。
  7. 如果您从资源中标识的记录包含为创建或更新数据时的点提供日期和时间戳记的任何字段,请在 DFHATOMPARMS 容器中作为 ATMP_PUBLISHEDATMP_UPDATED 参数的新值返回这些字段。
    样本服务例程 DFH$W2S1 显示如何返回这些参数的新值。
    有关这些日期和时间戳记的格式的信息,请参阅 Atom 条目的日期和时间戳记
  8. 如果 DFHATOMPARMS 容器中的 ATMP_SELECTOR 参数在服务例程的输入上为空,表示 Web 客户机未请求特定 Atom 条目,请将空值替换为您要返回的现有条目的合适选择器值。
    样本服务例程 DFH$W2S1 显示如果 ATMP_SELECTOR 参数为 NULL,那么将如何返回选择器值。
    Atom 条目的选择器值 说明如何选择选择器值。
    如果 ATMP_SELECTOR 参数在服务例程的输入中包含选择器值,请勿对其进行更改。
  9. 如果 DFHATOMPARMS 容器中的 ATMP_ATOMTYPE 参数具有值 "feed" (指示客户机需要多个条目) ,请检查该资源是否包含可用于提供更多 Atom 条目的更旧数据。
    1. 如果存在较旧的数据,请找到提供 Atom 条目的下一个数据项,并返回要在 ATMP_NEXTSEL 参数中使用的此数据项的合适选择器值。
      Atom 条目的顺序 说明了您应该返回 Atom 条目的顺序。
    2. 如果没有更多可用数据,请将 ATMP_NEXTSEL 参数中数据的当前长度设置为零以返回空值。
  10. 阅读 DFHATOMPARMS 容器中的 ATMP_ATOMID 参数,以查看条目的原型 Atom 标识。 原型 Atom 标识必须通过附加 ATMP_SELECTOR 参数中指定的 Atom 条目选择器值来补全。 如果您愿意,服务例程也可以忽略原型 Atom 标识,并用自己有效的 Atom 标识为 Atom 条目替换原型 Atom 标识。
    有关 Atom 标识的需求的更多信息,请参阅 Atom 条目的 Atom 标识
    1. 如果在此 Atom 条目的资源记录中存储了完整的 Atom 标识,请在 ATMP_ATOMID 参数中返回此 Atom 标识后跟其长度。
      如果正在使用 DFHATOMPARMS 容器中的资源处理参数,那么 ATMP_ID_FLD 参数包含资源中相关字段的名称和长度。
    2. 如果资源未存储 Atom 标识,请将 ATMP_ATOMID 参数的当前数据长度设置为零。
      CICS 将附加选择器值以生成完整的 Atom 标识。
  11. 返回要在 DFHATOMPARMS 容器中的 ATMP_RESPONSE 参数中使用的合适响应代码。
    样本服务例程 DFH$W2S1 显示了如何执行该操作。
    代码初始化为零,表示成功补全。
    如果返回错误响应,那么 CICS 会生成适当的缺省 HTTP 错误响应并将其发送至 Web 客户机。 DFHATOMPARMS 容器中的 ATMP_RESPONSE 参数 列出了可用的响应代码以及 CICS 在每种情况下发送的 HTTP 错误响应。
    样本服务例程 DFH$W2S1 在设置响应代码之后会向 CICS 交还控制权。

下一步操作

如果您已编写了服务例程,请在 CICS 中创建并安装合适的 PROGRAM 资源定义以描述该服务例程。 在您的 PROGRAM 资源定义中,请使用 EXECKEY(USER) 属性。 PROGRAM 资源必须以本地方式定义。 您需要在 ATOMSERVICE 资源定义中为 Atom 订阅源指定该 PROGRAM 资源。

如果您已设置使用服务例程为 Atom 订阅源提供数据的 CICS 定义,那么可以使用 CEDX 事务在服务例程响应 HTTP 请求时对其进行监控和调试。 CW2A 是 Atom 订阅源的缺省别名事务,服务例程将在该事务下运行,除非您设置了备用别名事务。 CEDX 监控您所指定事务的下一个实例,因此,如果其他用户在该 CICS 区域中使用相同的别名事务处理 Atom 订阅源,请设置一个备用别名事务,以在您调试自己的服务例程期间使用。