CICS - 快速指南


CICS - 概述

CICS 是一个用于在线应用程序的 DB/DC 系统。CICS 的开发是因为批处理操作系统只能执行批处理程序。CICS 程序可以用 COBOL、C、C++、Java 等语言编写。如今,用户希望在几秒钟内获得实时信息。为了提供如此快捷的服务,我们需要一个可以在线处理信息的系统。CICS允许用户与后端系统进行通信以获得所需的信息。在线程序的示例包括网上银行系统、航班预订等。下图显示了 CICS 的组成部分以及它们如何相互关联 -

CICS概述

CICS的功能

CICS 在应用程序中执行的主要功能如下:

  • CICS 管理应用程序中并发用户的请求。

  • 虽然多个用户在CICS系统上工作,但它给用户一种感觉,他只是一个用户。

  • CICS 提供对数据文件的访问,以便在应用程序中读取或更新它们。

CICS的特点

CICS的特点如下:

  • CICS 本身就是一个操作系统,因为它管理自己的处理器存储,拥有自己的任务管理器来处理多个程序的执行,并提供自己的文件管理功能。

  • CICS提供批处理操作系统的在线环境。提交的作业会立即执行。

  • CICS 是一个通用的事务处理接口。

  • 可以同时拥有两个或多个 CICS 区域,因为 CICS 在后端操作系统中作为批处理作业运行。

CICS - 环境

CICS 本身充当一个操作系统。它的工作是为应用程序的在线执行提供环境。CICS 在一个区域、分区或地址空间中运行。CICS 处理在其下运行的程序的调度。CICS 作为批处理作业运行,我们可以通过发出命令 PREFIX CICS* 在假脱机中查看它。CICS 提供五种主要服务。所有这些服务一起执行一项任务。

CICS环境

以下是我们将逐步详细讨论的服务 -

  • 系统服务
  • 数据通信服务
  • 数据处理服务
  • 应用程序编程服务
  • 监控服务
  • 系统服务

CICS 维护控制功能来管理系统内资源的分配或取消分配,如下 -

  • 任务控制- 任务控制提供任务调度和多任务处理功能。它负责所有 CICS 任务的状态。任务控制在并发 CICS 任务之间分配处理器时间。这称为多任务处理。CICS 尝试优先考虑最重要任务的响应时间。

  • 程序控制- 程序控制管理应用程序的加载和释放。一旦任务开始,就有必要将该任务与适当的应用程序相关联。尽管许多任务可能需要使用相同的应用程序,但 CICS 仅将代码的一份副本加载到内存中。每个任务都独立地通过此代码,因此许多用户都可以同时使用应用程序的同一物理副本来运行事务。

  • 存储控制- 存储控制管理主存储的获取和释放。存储控制获取、控制和释放动态存储。动态存储用于输入/输出区域、程序等。

  • 间隔控制- 间隔控制提供计时器服务。

数据通信服务

数据通信服务与电信接入方法(例如 BTAM、VTAM 和 TCAM)接口,用于处理来自应用程序的数据通信请求。

  • CICS 通过使用基本映射支持(BMS)将应用程序从处理终端硬件问题的负担中解放出来。

  • CICS 提供多区域操作 (MRO),通过它同一系统中的多个 CICS 区域可以进行通信。

  • CICS 提供系统间通信 (ISC),系统中的 CICS 区域可以通过该通信与另一个系统上的 CICS 区域进行通信。

数据处理服务

数据处理服务与 BDAM、VSAM 等数据访问方法接口。

  • CICS 促进了对来自应用程序的数据处理请求的服务。CICS为应用程序程序员提供了一组用于处理数据集和数据库访问及相关操作的命令。

  • 数据处理服务与数据库访问方法(例如 IMS/DB、DB2 等)接口,并促进对来自应用程序的数据库请求的服务。

  • CICS 通过控制同步记录更新、任务异常结束时的数据保护以及系统故障时的数据保护来促进数据完整性管理。

应用程序编程服务

应用程序编程服务与应用程序的接口。CICS 的应用程序编程服务提供诸如命令级转换、CEDF(调试工具)和CECI(命令解释器工具)等功能。我们将在接下来的模块中更详细地讨论。

监控服务

监控服务监控 CICS 地址空间内的各种事件。它提供了一系列可用于系统调整的统计信息。

CICS - 基本术语

我们必须了解 CICS 中使用的基本术语,才能更好地理解它的工作原理。应用程序使用 CICS 与远程和本地终端及子系统进行通信。

IBM 3270 终端

3270 信息显示系统是一系列显示和打印机终端。3270 终端用于通过 IBM 控制器连接到大型机。如今,3270仿真软件已经面世,这意味着即使是普通的PC也可以用作3270终端。3270终端是哑终端,本身不做任何处理。所有的处理都需要由应用程序来完成。IBM 终端由以下组件组成 -

显像管显示器

CRT显示器显示应用程序的输出或输入字段。3278 型号 CRT 显示器的屏幕截图如下所示。它具有以下特点 -

  • 它能够显示 1920 个字符。

  • 这 1920 个字符位置中的每一个都可以单独寻址。

  • COBOL应用程序可以将数据发送到屏幕上的所有位置。

  • 可以使用 BMS 设置显示特性,例如场的强度、受保护、不受保护,我们将在接下来的模块中详细讨论这些特性。

CICS CRT 监视器

键盘

IBM 键盘按键分为以下两类 -

  • 非辅助键- 所有其他字母、数字、标点符号等键都是非辅助键。当用户使用非辅助键键入文本或数字时,CICS 甚至不知道用户是否正在键入任何内容。

  • AID 键- AID 键被称为注意标识符键。CICS 只能检测 AID 密钥。键入所有输入后,只有当用户按下 AID 键之一时,CICS 才会进行控制。辅助键:ENTER、PF1 至 PF24、PA1 至 PA3、CLEAR。AID 键进一步分为两类 -

    • PF 键- PF 键被称为功能键。PF 键允许将数据从终端传输到 CICS。PF 键为 ENTER 和 PF1 至 PF24。

    • PA 键- PA 键被称为程序访问键。PA 密钥不允许在终端和 CICS 之间传输数据。PA 键为 PA1 至 PA3 和 CLEAR。

CICS键盘

交易

CICS 程序是通过事务调用的。CICS 事务是应用程序中逻辑相关程序的集合。整个应用程序可以在逻辑上分为多个事务。

  • 交易标识符长度为1到4个字符,用于标识用户想要进行的交易。

  • 程序员将一个程序链接到事务标识符,该标识符用于调用该特定事务的所有应用程序。

任务

任务是特定于用户的工作单元。

  • 用户通过使用事务标识符之一来调用应用程序。CICS 查找事务标识符以找出首先调用哪个程序来完成请求的工作。它创建一个任务来完成工作,并将控制权转移给上述程序。

  • 一笔交易可以通过多项任务来完成。

  • 任务可以从启动它的终端接收数据并向其发送数据。它可以读取和写入文件,也可以启动其他任务。

任务与事务

事务和任务之间的区别在于,多个用户可以调用事务,但每个用户启动自己的任务。

卢威

LUW 代表逻辑工作单元。LUW 规定一项工作应该完全完成或根本不完成。在 CICS 中,一个任务可以包含多个逻辑工作单元。我们将在接下来的模块中讨论更多相关内容。

应用

应用程序是一系列逻辑分组的程序,形成多个事务,用于为最终用户完成特定任务。

A

CICS-核心

前面描述的五个 CICS 系统组件是 CICS 系统程序的方便分组,每个组件执行其自己的专门功能。CICS 的核心称为 CICS Nucleus,它由 IBM 提供的 CICS 控制程序和控制表组成。

控制程序

CICS核心由控制程序和相应的控制表构成。它提供了独特的优势。它使得CICS系统高度灵活,因而易于维护。以下是 CICS 的重要控制程序 -

传输控制协议

TCP被称为终端控制程序。

  • TCP 用于从终端接收消息。

  • 它维持硬件通信要求。

  • 它请求 CICS 启动任务。

韩国共产党

KCP被称为任务控制程序。

  • KCP用于同时控制任务的执行及其相关属性。

  • 它处理与多任务相关的所有问题。

五氯苯酚

PCP被称为程序控制程序。

  • PCP用于定位和加载程序以供执行。

  • 它在程序之间转移控制权,最后将控制权返回给 CICS。

氟氯化石蜡

FCP 被称为文件控制程序。

  • FCP用于为应用程序提供读取、插入、更新或删除文件中的记录等服务。

  • 它对记录保持独占控制,以便在记录更新期间保持数据完整性。

SCP

SCP被称为存储控制程序。它用于控制 CICS 区域内存储的分配和释放。

控制表

CICS 由 IBM 提供的 CICS 控制程序和表组成。这些表需要根据应用程序信息进行相应更新,以便成功执行 CICS 应用程序。以下是重要的控制表 -

TCT

TCT 称为终端控制表。

  • 当我们登录到 CICS 终端时,TCT 表中会创建一个条目。

  • TCT 包含连接到当前 CICS 区域的终端 ID。

  • 终端控制程序与终端控制表一起识别来自终端的传入数据。

PCT

PCT被称为程序控制表。

  • 它包含事务 ID (TRANSID) 和相应的程序名称或程序 ID。

  • TRANSID 在 PCT 表中是唯一的。

PPT

PPT全称为处理程序表。PPT包含程序名称或地图集名称、任务使用计数器、语言、大小、主存储地址、加载库地址等。

  • 程序或地图集名称在 PPT 表中是唯一的。

  • CICS 接收事务,并从 PCT 为该事务分配相应的程序名称。它检查程序是否已加载。如果已加载,则任务使用计数器加1。如果程序未加载,则先加载程序,并将任务使用计数器设置为1。从PPT表中获取加载库地址。

光纤传输技术

FCT 称为文件控制表。

  • 它包含文件名、文件类型、记录长度等。

  • CICS 程序中使用的所有文件都必须在 FCT 中声明,并且它们由 CICS 本身打开和关闭。

交易

当在CICS终端上输入事务标识符TP02时,它首先检查PCT表中是否存在与该事务标识符关联的程序。如果找到,则检查 PPT 表以查找执行该程序的程序的位置。

如果该程序已在内存中可用,则它开始执行该特定程序;如果没有,则将程序从辅助存储器加载到内存中,然后开始执行。

中证交易

交易生命周期

交易生命周期有以下步骤 -

CICS 交易生命周期

步骤1

终端操作员通过输入 1 到 4 个字符的交易 ID 并按 ENTER 键来启动交易。

第2步

TCP 定期检查所有终端的输入。当收到消息时,它会执行以下操作 -

  • 指示 SCP 创建 TIOA。

  • 将消息放入 TIOA 中。

  • 将控制权移交给 KCP。

步骤3

KCP 从 TCP 获取控制权并执行以下操作 -

  • 验证交易 ID 和安全性。

  • 指示 SCP 创建任务控制区域。

  • 根据终端优先级(TCT 中设置)、操作员优先级(SNT 中设置)和事务优先级(PCT 中设置)为任务分配优先级。

  • 将任务添加到等待程序队列中。

  • 按优先级顺序调度等待的程序。

  • 将控制权传递给 PCP。

步骤4

PCP 从 KCP 手中接管控制权并执行以下操作 -

  • 找到该程序并加载它(如果需要)。

  • 将控制权转移给应用程序。

步骤5

应用程序从 PCP 获取控制并执行以下操作 -

  • 请求 TCP 将消息放入程序的 WORKING STORAGE 区域。

  • 请求 FCP 从文件中检索记录。

步骤6

FCP 从应用程序获取控制权并执行以下操作 -

  • 向 SCP 请求文件工作区。

  • 通知 KCP 该任务可以等待 I/O 完成。

步骤7

KCP 执行以下操作 -

  • 调度队列中的下一个任务。

  • I/O 完成时重新分派旧任务。

  • 将控制权转移给 FCP。

步骤8

FCP 将控制返回给应用程序。

步骤9

应用程序执行以下操作 -

  • 处理文件数据。

  • 请求 TCP 发送 I/O 消息。

  • 将控制权返回给 PCP。

步骤10

PCP 将控制权返回给 KCP,请求其结束任务。

第11步

KCP 指示 SCP 释放分配给该任务的所有存储空间(TIOA 除外)。

步骤12

TCP 执行以下操作 -

  • 将输出发送到终端。

  • 请求 SCP 释放 TIOA。

CICS - 交易

CICS 事务用于在 CICS 区域中执行多个操作。我们将详细讨论 IBM 提供的重要 CICS 事务。

欧洲电子科学网络

CESN 称为 CICS 执行登录。

  • CESN 用于登录到 CICS 区域。

  • 我们需要提供 CICS 管理员提供的用户 ID 和密码才能登录 CICS。以下屏幕截图显示了登录屏幕的外观 -

CICS中国电子科学网

欧洲经济发展协会

CEDA 称为 CICS 执行定义和管理。CICS 系统管理员使用它来定义 CICS 表条目和其他管理活动。

CEMT

CEMT 称为 CICS 执行主终端。它用于查询和更新CICS环境的状态以及其他系统操作。

  • 使用CEMT命令,我们可以管理事务、任务、文件、程序等。

  • 要获取所有可能的选项,请键入 CEMT 并按 ENTER。它将显示所有选项。

  • CEMT 主要用于将新程序加载到 CICS 中,或者在程序或映射集更改后将程序的新副本加载到 CICS 中。

例子

人们可以覆盖显示的文件的状态来更改它。以下示例显示如何关闭文件 -

CEMT 
  
** Press ENTER & Following Screen is displayed **  

STATUS: ENTER ONE OF THE FOLLOWING 
Inquire 
Perform 
Set 
 
** Command to close a file **
  
CEMT SET FILE (file-name) 
CEMT I FILE (file-name)

CECI

CECI 称为 CICS 执行命令解释器。许多 CICS 命令可以使用 CECI 执行。

  • CECI用于检查命令的语法。仅当语法正确时,它才会执行命令。

  • 登录后,在空的 CICS 屏幕上键入 CECI 选项。它会为您提供可用选项的列表。

例子

以下示例显示如何将映射的输出数据发送到终端。我们将在接下来的模块中讨论 MAPS。

CECI SEND MAP (map-name) MAPSET (mapset-name) ERASE 

欧洲发展基金

CEDF 称为 CICS 执行调试工具。它用于逐步调试程序,有助于发现错误。

在 CICS 区域中键入 CEDF 并按 Enter 键。将显示终端处于 EDF 模式消息。现在输入交易 ID 并按 Enter 键。启动后,每按一次回车键,就会执行一行。在执行任何 CICS 命令之前,它会显示一个屏幕,我们可以在其中修改值,然后再继续操作。

中国气象局

CMAC 称为“异常结束代码的 CICS 消息”。它用于查找 CICS 异常终止代码的解释和原因。

例子

以下示例显示如何检查异常结束代码的详细信息 -

CMAC abend-code

欧洲科学基金会

CESF 称为 CICS 执行签核。它用于从 CICS 区域注销。

例子

以下示例显示如何从 CICS 区域注销 -

CESF LOGOFF

欧洲商业银行

CEBR 称为 CICS 执行临时存储浏览。它用于显示临时存储队列或TSQ的内容。

CEBR 在调试时使用,以检查队列的项目是否正在正确写入和检索。我们将在接下来的模块中详细讨论 TSQ。

例子

以下示例显示如何调用 CEBR 命令 -

CEBR queue-id

CICS概念

每个命令都可以通过执行一系列CICS宏来实现。我们将讨论一些基本特征,这将有助于我们更好地理解这些概念 -

多任务处理

操作系统的这一功能允许同时执行多个任务。该任务可能共享相同的程序或使用不同的程序。CICS 在自己的区域内安排任务。

多线程

操作系统的这一功能允许共享同一程序同时执行多个任务。为了使多线程成为可能,应用程序应该是操作系统下的可重入程序或CICS下的准可重入程序。

可重入性

可重入程序是一种不修改自身并且可以在操作系统中断后重新进入自身并继续处理的程序。

准重入性

准可重入程序是CICS环境下的可重入程序。CICS 通过为每个任务获取唯一的存储区域来确保可重入性。在CICS命令之间,CICS拥有CPU资源的独占使用权,并且可以执行其他任务的其他CICS命令。

有时许多用户同时使用同一个程序;这就是我们所说的多线程。例如,假设有 50 个用户正在使用程序 A。此时,CICS 将为该程序提供 50 个工作存储空间,但不提供 1 个过程分区。这种技术被称为准重入

CICS - COBOL 基础知识

CICS程序是在大型机上用COBOL语言编写的。我们将讨论编写一个简单的 COBOL-CICS 程序、编译它,然后执行它。

CICS计划

我们将编写一个简单的 COBOL-CICS 程序,该程序在 CICS 输出屏幕上显示一些消息。该程序旨在演示执行 COBOL-CICS 程序所涉及的步骤。以下是编写简单程序的步骤 -

步骤1

登录大型机并打开 TSO 会话。

第2步

创建一个新的 PDS,我们将在其中编写程序。

步骤3

在 PDS 中创建一个新成员并编写以下程序 -

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 WS-MESSAGE PIC X(40).
01 WS-LENGTH  PIC S9(4) COMP.
PROCEDURE DIVISION.
A000-MAIN-PARA.
   MOVE 'Hello World' TO WS-MESSAGE
   MOVE '+12' TO WS-LENGTH
   EXEC CICS SEND TEXT 
      FROM (WS-MESSAGE)
      LENGHT(WS-LENGTH)  
   END-EXEC
   EXEC CICS RETURN
   END-EXEC.	 

步骤4

编写完程序后,我们需要对其进行编译。我们可以使用以下 JCL 编译程序 -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C  
//CICSCOB  EXEC CICSCOB,                                                
//COPYLIB = ABC.XYZ.COPYLIB,                            
//LOADLIB = ABC.XYZ.LOADLIB 
//LIB        JCLLIB ORDER = CICSXXX.CICS.XXXPROC                
//CPLSTP     EXEC DFHEITVL                                
//TRN.SYSIN  DD DSN = ABC.XYZ.PDS(HELLO),DISP = SHR     
//LKED.SYSIN DD *                                        
   NAME HELLO(R)                                          
//

步骤5

打开 CICS 会话。

步骤6

我们现在将使用以下命令安装该程序 -

CEMT SET PROG(HELLO) NEW.

步骤7

使用关联的事务 ID 执行程序。Transaction-id 由管理员提供。它将显示以下输出 -

CICS输出

程序编译

以下流程图显示了编译 COBOL-CICS 程序的步骤 -

CICS编译

翻译者

翻译器的功能是检查 CICS 命令中的语法错误。它将它们转换为等效的 COBOL 语句。

编译器

编译器的作用就是扩展COBOL抄本。它在检查源代码是否存在语法错误后编译代码。

联动编辑器

链接编辑器的功能是链接不同的对象模块以创建单个加载模块。

CICS-BMS

BMS 被称为基本映射支持。应用程序由格式化的屏幕组成,充当终端和 CICS 程序之间的桥梁。为了在终端和 CICS 程序之间进行通信,我们使用 CICS 终端输入/输出服务。我们使用 BMS 创建具有适当位置和属性的屏幕设计。以下是 BMS 的功能 -

  • BMS 充当终端和 CICS 程序之间的接口。

  • 屏幕的设计和格式与应用程序的逻辑是分开的。

  • BMS使应用硬件独立。

格式化屏幕

下面显示的屏幕是菜单屏幕,可以使用 BMS 进行设计。其要点如下:

  • 该屏幕可以具有标题、日期和要显示的任何其他信息。

  • 选项 1、2 和 3 是未命名字段,它们是屏幕的标题。

  • 在选择字段中,我们需要提供输入。然后,该输入被发送到 CICS 程序以进行进一步处理。

  • 屏幕底部显示操作键。

  • 所有字段和屏幕本身都是用 BMS 宏定义的。当整个地图定义完毕后,我们可以使用JCL来组装它。

CICS 屏幕

BMS基本术语

以下是我们将在接下来的模块中使用的基本术语 -

地图

地图是一种单屏格式,可以使用 BMS 宏进行设计。它的名称可以包含 1 到 7 个字符。

地图集

地图集是链接在一起形成加载模块的地图集合。应该有一个PPT条目。它的名称可以是 1 到 7 个字符。

BMS 宏

BMS地图是一个用汇编语言编写的用于管理屏幕的程序。用于定义屏幕的三个宏是 DFHMSD、DFHMDI 和 DFHMDF。

DFHMSD

DFHMSD 宏生成地图集定义。它是宏标识符,表明我们正在启动一个地图集。地图集名称是加载模块名称,并且 PPT 表中必须存在一个条目。下表显示了可在 DFHMSD 中使用的参数列表 -

先生编号 参数及说明
1

类型

TYPE 用于定义地图类型。如果 TYPE =
MAP - 创建物理地图
DSECT - 创建符号地图
&&SYSPARM - 物理和符号,两者均创建
FINAL - 指示地图集编码的结束。

2

模式

MODE用于指示输入/输出操作。IF MODE =
IN - 仅适用于输入映射
OUT - 仅适用于输出映射
INOUT 适用于输入和输出映射

3

兰格

LANG = ASM/COBOL/PL1
决定 DSECT 结构的语言,以便复制到应用程序中。

4

贮存

如果 STORAGE =
AUTO - 为每个地图集获取单独的符号地图区域
BASE - 为多个地图集中的符号地图拥有相同的存储基础

5

控制键

CRTL用于定义设备控制请求。如果 CTRL =
FREEKB - 解锁键盘
FRSET - 将 MDT 重置为零状态
ALARM - 在屏幕显示时设置警报
PRINT - 指示要发送到打印机的地图集。

6

学期

TERM = 类型确保设备独立性,如果使用 3270 终端以外的终端则需要。

7

TIOAPFX

TIOAPFX = YES/NO
YES - 为 BMS 命令保留前缀空间(12 字节)以正确访问 TIOA。CICS 命令级别所需。

例子

以下示例展示了如何编写地图集定义代码 -

MPST01  DFHMSD TYPE = &SYSPARM, X
   CTRL = (FREEKB,FRSET), X
   LANG = COBOL, X 
   STORAGE = AUTO, X
   TIOAPFX = YES, X
   MODE = INOUT, X
   TERM = 3270
   DFHMSD TYPE = FINAL 
END

DFHMDI

DFHMDI 宏生成映射定义。这表明我们正在开始一张新地图。Mapname 后面是 DFHMDI 宏。Mapname 用于发送或接收地图。下表显示了我们在 DFHMDI 宏中使用的参数 -

先生编号 参数及说明
1

尺寸

SIZE = (Line,Column)
该参数给出了地图的大小。BMS 允许我们使用多个地图构建一个屏幕,当我们在单个地图集中使用多个地图时,此参数就变得很重要。

2

线

它表示地图的起始行号。

3

柱子

它指示地图的起始列号。

4

证明合法

它用于指定整个地图或地图字段左对齐或右对齐。

5

控制键

CRTL用于定义设备控制请求。如果 CTRL =
FREEKB - 解锁键盘
FRSET - 将 MDT 重置为零状态
ALARM - 在屏幕显示时设置警报
PRINT - 指示要发送到打印机的地图

6

TIOAPFX

TIOAPFX = 是/否

是 - 为 BMS 命令保留前缀空间(12 字节)以正确访问 TIOA。CICS 命令级别所需。

例子

以下示例展示了如何编写地图定义代码 -

MAPSTD DFHMDI SIZE = (20,80), X
   LINE = 01, X
   COLUMN = 01, X
   CTRL = (FREEKB,FRSET)

DFHMDF

DFHMDF 宏用于定义字段名称。提及了针对 DFHMDF 宏进行编码的字段名称。该字段名称在程序内部使用。我们不会针对我们不想在程序中使用的常量字段编写字段名称。下表显示了可在 DFHMDF 宏内部使用的参数列表 -

先生编号 参数及说明
1

销售点

这是该字段应出现在屏幕上的位置。字段以其属性字节开始,因此如果您编码 POS = (1,1),则该字段的属性字节位于第 1 列的第 1 行,而实际数据从第 2 列开始。

2

长度

这是字段的长度,不包括属性字节。

3

最初的

这是输出字段的字符数据。我们用它来指定屏幕的标签和标题,并使它们独立于程序。例如,对于菜单屏幕中的第一个字段,我们将编码:INITIAL = 'MENU'。

4

证明合法

它用于指定整个地图或地图字段左对齐或右对齐。

5

ATTRB

ATTRB = (ASKIP/PROT/UNPROT, NUM, BRT/NORM/DRK, IC, FSET) 描述字段的属性。

ASKIP - 自动跳过。无法在此字段中输入数据。光标跳至下一个字段。

PROT - 受保护的区域。无法在此字段中输入数据。如果输入数据,将导致输入禁止状态。

UNPROT - 未受保护的区域。可以输入数据,这用于所有输入字段。

NUM - 数字字段。只允许使用数字(0 到 9)和特殊字符(“.”和“-”)。

BRT - 字段的明亮显示(突出显示)。

NORM——正常显示。

DRK - 暗显示。

IC - 插入光标。光标将定位在该字段中。如果多次指定 IC,则光标将放置在最后一个字段中。

FSET - 场集。设置MDT后,无论用户是否实际修改了字段,字段数据都会从终端发送到上位机。

6

PICIN

PICIN 适用于用作输入的数据字段,如 PICIN = 9(8)。

7

PICOUT

PICIN 适用于用作输出的数据字段,如 PICOUT = Z(8)。

例子

以下示例展示了如何编写字段定义代码 -

DFHMDF POS = (01,01), X
   LENGTH = 7, X
   INITIAL = ‘SCREEN1’, X
      ATTRB = (PROT,NORM)
      STDID DFHMDF POS = (01,70), X
      LENGTH = 08, X
      ATTRB = (PROT,NORM)

CICS-地图

BMS接收用户输入的数据,然后将其格式化为符号地图区域。应用程序只能访问符号映射中存在的数据。应用程序处理数据并将输出发送到符号映射。BMS 将符号数据的输出与物理地图合并。

CICS 地图

实物图

物理地图是加载库中的加载模块,其中包含有关地图应如何显示的信息。

  • 它包含有关地图中所有字段的属性及其位置的详细信息。

  • 它包含给定终端的地图显示格式。

  • 它使用 BMS 宏进行编码。它被单独组装并链接编辑到 CICS 库中。

符号地图

符号地图是图书馆里的一本复印书。Copy book被CICS应用程序用来从终端发送和接收数据。

  • 它包含复制到程序的 WORKINGSTORAGE 部分中的所有变量数据。

  • 它具有所有命名字段。应用程序程序员使用这些字段在映射中读取和写入数据。

船长和塞子场

对于未受保护的命名字段,在映射中,如果我们指定长度为 10,这意味着名称字段可以采用长度不能超过 10 的值。但是当您使用 CICS 显示此映射并开始为此字段输入值时在屏幕上,我们可以输入10个以上的字符,即直到屏幕末尾,我们甚至可以在下一行输入。为了防止这种情况,我们使用 Skipper 场或 stopper 场。Skipper 字段通常是长度为 1 的未命名字段,在命名字段之后指定。

CICS 船长和塞子领域

船长场

如果我们在指定的未受保护的字段后面放置一个跳过字段,那么在输入值时,一旦达到指定的长度,光标将自动定位到下一个未受保护的字段。以下示例显示如何添加船长字段 -

NUMBER  DFHMDF POS = (01,01), X
   LENGTH = 5, X
   ATTRB = (UNPROT,IC)
      DFHMDF POS = (01,07), X
      LENGTH = 1, X
      ATTRB = (ASKIP)

塞子场

如果我们在命名的未保护字段后面放置一个停止字段,那么在输入值时,一旦达到指定的长度,光标将停止定位。以下示例显示如何添加停止字段 -

NUMBER  DFHMDF POS = (01,01), X
   LENGTH = 5, X
	ATTRB = (UNPROT,IC)
	   DFHMDF POS = (01,07), X
      LENGTH = 1, X
      ATTRB = (PROT)

属性字节

任何字段的属性字节都存储有关该字段的物理属性的信息。下图和表格解释了每一位的意义。

CICS 属性字节
位位置 描述 位设置
0 & 1   由第2位至第7位的内容决定
2 & 3 保护与转移 00 - 不受保护的字母数字
01 - 不受保护的数字
10 - 受保护的停止
11 - 受保护的跳过
4 & 5 强度 00 - 正常
01 - 正常
10 - 亮
11 - 无显示(暗)
6   必须始终为零
7 修改数据标签 0 - 字段尚未修改
1 - 字段已修改

修改数据标签

修改数据标签 (MDT) 是属性字节中的最后一位。

  • MDT 是一个保存单个位的标志。它指定是否将该值传输到系统。

  • 当字段值更改时,其默认值为 1。

  • 如果MDT为0,则无法传输数据;如果MDT为1,则可以传输数据。

发送地图

send map 命令将格式化输出写入终端。用于将地图从应用程序发送到终端。以下代码段显示了如何将地图发送到终端 -

EXEC CICS SEND 
   MAP('map-name')
   MAPSET('mapset-name')
   [FROM(data-area)]
   [LENGTH(data_value)]
   [DATAONLY]
   [MAPONLY]
   [CURSOR]
   [ERASE/ERASEAUP]
   [FREEKB] 
   [FRSET]
END-EXEC   

下表列出了发送映射命令中使用的参数及其含义。

先生编号 参数及说明
1

地图名称

这是我们要发送的地图的名称。这是强制性的。

2

地图集名称

它是包含地图名称的地图集的名称。地图集名称是必需的,除非它与地图名称相同。

3

如果我们决定使用不同的 DSECT 名称,则使用它,我们必须将选项 FROM (dsect-name) 与 SEND MAP 命令一起使用。

4

玛波丽

这意味着程序中的任何数据都不会合并到地图中,而仅传输地图中的信息。

5

仅数据

这与 MAPONLY 的逻辑相反。我们用它来修改已创建的显示中的变量数据。只有程序中的数据才会发送到屏幕。不发送映射中的常量。

6

擦除

它会导致在显示我们发送的内容之前整个屏幕被擦除。

7

擦除

它只会导致未受保护的字段被删除。

8

FRSET

标志重置会关闭屏幕上所有字段的属性字节中修改的数据标签,然后再将您发送的内容放置在那里。

9

光标

它可用于将光标定位在终端屏幕上。可以通过将-1移动到字段的L部分然后发送地图来设置光标。

10

警报

它会导致声音警报响起。

11

免费知识库。

如果我们在映射或 SEND 命令中指定 FREEKB,键盘就会解锁。

12

打印

它允许在打印机上打印 SEND 命令的输出。

13

换页

它使打印机在打印输出之前将纸张恢复到下一页的顶部。

接收地图

当我们想要从终端接收输入时,我们使用 RECEIVE MAP 命令。MAP 和 MAPSET 参数的含义与 SEND MAP 命令完全相同。以下代码段显示了如何接收地图 -

EXEC CICS RECEIVE 
   MAP('map-name')
   MAPSET('mapset-name')
   [INTO(data-area)]
   [FROM(data-area)]
   [LENGTH(data_value)]
END-EXEC

地图集执行

开发和执行地图集需要以下步骤 -

  • 步骤 1 - 打开 TSO 会话。

  • 步骤 2 - 创建一个新的 PDS。

  • 步骤 3 - 根据要求在新成员中编码地图集。

  • 步骤 4 - 使用 CICS 管理员提供的 JCL 组装地图集。

  • 步骤 5 - 打开 CICS 会话。

  • 步骤 6 - 使用命令安装程序 -

    CEMT SET PROG(地图集名称)新

  • 步骤 7 - 输入以下命令将地图发送到终端 -

    CECI 发送地图(地图名称) MAPSET(地图集名称) 删除 FREEKB

CICS - 接口块

任何应用程序都需要一个与 CICS 交互的接口。EIB(执行接口块)充当允许应用程序与CICS通信的接口。EIB 包含程序执行期间所需的信息。

受限 COBOL 动词

在编写CICS程序时,我们不能使用将控制权直接返回到MVS的命令。如果我们对这些 COBOL 动词进行编码,它不会给出任何编译错误,但我们可能会得到不可预测的结果。以下是不应在 CICS 程序中使用的 COBOL 动词 -

  • 文件 I/O 语句,如打开、读取、写入、重写、关闭、删除和启动。CICS 中的所有文件 I/O 均由文件控制模块处理,它们有自己的一组语句,例如 READ、WRITE、REWRITE 和 DELETE,我们将在接下来的模块中讨论这些语句。

  • 不需要文件部分和环境部分。

  • 不能使用调用操作系统函数(例如 Accept、Date/Time)的 COBOL 语句。

  • 请勿使用“显示”、“合并”、“停止运行”和“返回”。

执行接口块

执行接口块(EIB)是由CICS为每个程序自动加载的控制块。

  • EIB 对于任务来说是唯一的,并且在任务期间存在。它包含一组与任务相对应的系统相关信息。

  • 它包含有关事务标识符、时间、日期等的信息,供CICS 在应用程序执行期间使用。

  • 作为任务一部分执行的每个程序都可以访问相同的 EIB。

  • 运行时EIB中的数据可以通过在CEDF模式下执行程序来查看。

欧洲投资银行领域

下表提供了 EIB 中存在的字段列表 -

欧洲投资银行领域 事先知情同意条款 描述
伊贝德 X(1) 按下辅助键
欧洲银行卡伦 S9(4) 补偿 它包含 DFHCOMMAREA 的长度
EBD日期 S9(7) COMP-3 它包含当前系统日期
欧洲银行代码 X(6) 它包含最后一笔交易的返回码
EIB任务 S9(7) COMP-3 它包含任务编号
欧洲投资银行时间 S9(7) COMP-3 它包含当前系统时间
EBTMID X(4) 终端标识符
EIBTRNID X(4) 交易标识符

CICS 项目分类

CICS 程序分为以下三类,我们将一一讨论 -

  • 非会话程序
  • 对话节目
  • 伪会话程序 - 我们将在下一个模块中讨论

非会话程序

在执行非会话程序时,不需要人工干预。程序启动时提供所有必要的输入。

  • 它们类似于以批处理模式运行的批处理程序。所以在CICS中,它们很少被开发。

  • 我们可以说它们只是用于定期显示一系列屏幕。

例子

以下示例显示了一个非会话程序,它将简单地在 CICS 终端上显示“HELLO WORLD”作为输出 -

IDENTIFICATION DIVISION.                                
PROGRAM-ID. HELLO.                                      
DATA DIVISION.                                          
WORKING-STORAGE SECTION.                                
01 WS-MESSAGE          PIC X(30).                       
PROCEDURE DIVISION.                                     
********************************************************
* SENDING DATA TO SCREEN                               * 
********************************************************
   MOVE 'HELLO WORLD' TO WS-MESSAGE                
   EXEC CICS SEND TEXT                             
      FROM (WS-MESSAGE)                          
   END-EXEC                                        
********************************************************
* TASK TERMINATES WITHOUT ANY INTERACTION FROM THE USER* 
********************************************************
   EXEC CICS RETURN                                
END-EXEC.

对话节目

向终端发送消息并接收用户的响应称为会话。在线应用程序通过一对SEND和RECEIVE命令实现用户和应用程序之间的对话。会话程序的要点如下 -

  • 系统向屏幕发送一条消息并等待用户的响应。

  • 用户做出响应所花费的时间称为思考时间。这个时间相当长,这是对话式程序的一个主要缺点。

  • 用户提供必要的输入并按下 AID 键。

  • 应用程序处理用户的输入并发送输出。

  • 程序一开始就被加载到主存中,并一直保留到任务结束。

CICS 转换计划

例子

以下示例显示了一个转换程序,它接受用户的输入,然后简单地将相同的输入显示在 CICS 终端上作为输出 -

IDENTIFICATION DIVISION.                               
PROGRAM-ID. HELLO.                                     
DATA DIVISION.                                         
WORKING-STORAGE SECTION.                               
01 WS-MESSAGE          PIC X(30) VALUE SPACES.         
PROCEDURE DIVISION.                                    
   MOVE 'ENTER MESSAGE' TO WS-MESSAGE           
********************************************************
* SENDING DATA FROM PROGRAM TO SCREEN                  * 
********************************************************
   EXEC CICS SEND TEXT                            
      FROM (WS-MESSAGE)                         
   END-EXEC                                       
********************************************************
* GETTING INPUT FROM USER                              * 
********************************************************
   EXEC CICS RECEIVE                              
      INTO(WS-MESSAGE)                          
   END-EXEC                                       
   EXEC CICS SEND TEXT                            
      FROM (WS-MESSAGE)                         
   END-EXEC                                       
********************************************************
* COMMAND TO TERMINATE THE TRANSACTION                 * 
********************************************************
   EXEC CICS RETURN                               
END-EXEC.                                       

CICS——伪编程

到目前为止,我们已经涵盖了非转换和转换计划。转换程序有一个主要缺点,因为它们的思考时间相当长。为了克服这个问题,伪转换编程应运而生。我们现在将讨论更多有关伪转换程序的内容。

伪转换程序

以下是伪转换程序中发生的事件顺序 -

  • 步骤 1 - 系统向屏幕发送一条消息并终止事务,指定收到用户输入时要启动的事务。

  • 步骤 2 - 系统将此事务使用的资源分配给系统中运行的其他事务。因此,我们可以利用伪转换程序中的资源,直到用户给出输入。

  • 步骤 3 - 系统定期轮询终端输入。当接收到输入时,将对其进行处理并显示输出。

  • 步骤 4 - 应用程序在需要时加载到主存储器中,在不使用时释放。

CICS伪转换程序

伪转换技术

在伪会话中需要注意的重要一点是每个任务之间的数据传递。我们将讨论传递数据的技术。

通讯区

COMMAREA被称为通信区域。COMMAREA 用于在任务之间传递数据。以下示例显示如何传递 COMMAREA,其中 WSCOMMAREA 和 WS-COMMAREA-LENGTH 在工作存储部分中声明 -

EXEC CICS RETURN
   TRANSID ('transaction-id')
   COMMAREA (WS-COMMAREA)
   LENGTH  (WS-COMMAREA-LENGTH)
END-EXEC.

DFH通信区

DFHCOMMAREA是CICS为每个任务提供的特殊内存区域。

  • 它用于将数据从一个程序传递到另一程序。程序可以存在于同一个事务中,也可以存在于不同的事务中。

  • 它在程序的 01 级链接部分中声明。

  • 它应该具有与 WS-COMMAREA 相同的图片条款。

  • 可以使用 MOVE 语句将数据从 DFHCOMMAREA 移回到 WS-COMMAREA。

MOVE DFHCOMMAREA TO WS-COMMAREA.

例子

发送地图后,任务结束并等待用户响应。在这个阶段,需要保存数据,因为任务虽然结束了,但事务还没有结束。当要恢复此事务时,将需要任务的先前状态。用户输入内容。现在必须通过 RECEIVE MAP 命令接收该信息,然后进行验证。以下示例显示如何声明 COMMAREA 和 DFHCOMMAREA -

WORKING-STORAGE SECTION.
01 WS-COMMAREA.
   05 WS-DATA PIC X(10).
   
LINKAGE SECTION.
01 DFHCOMMAREA.
   05 LK-DATA PIC X(10).

伪代码

下面给出的是我们在伪编程中使用的伪代码的逻辑 -

MOVE DFHCOMMAREA TO WS-COMMAREA
IF EIBCALEN = 0
   STEP1: SEND MAP
   STEP2: MOVE <internal-transaction-id1> to WS-COMMAREA
   STEP3: ISSUE CONDITIONAL RETURN
ELSE
   IF WS-COMMAREA = <internal-transaction-id1> 
      STEP4: RECEIVE MAP
      STEP5: PROCESS DATA
      STEP6: SEND OUTPUT MAP
      STEP7: MOVE <internal-transaction-ID2> to WS-COMMAREA
      STEP8: ISSUE CONDITIONAL RETURN 
   END-IF
END-IF      
STEP9: REPEAT STEP3 TO STEP7 UNTIL EXIT

例子

以下示例显示了一个伪转换程序 -

******************************************************************
* PROGRAM TO DEMONSTRATE PSEUDO-CONVERSATION                     *
******************************************************************
IDENTIFICATION DIVISION.                                         
PROGRAM-ID. HELLO.                                               
DATA DIVISION.                                                   
WORKING-STORAGE SECTION.                                         
01 WS-MESSAGE          PIC X(30).                                
01 WS-COMMAREA         PIC X(10) VALUE SPACES.                    
LINKAGE SECTION.                                                 
01 DFHCOMMAREA         PIC X(10).                                 
PROCEDURE DIVISION.
   MOVE DFHCOMMAREA TO WS-COMMAREA
   IF  WS-COMMAREA  =  SPACES                                   
******************************************************************
* TRANSACTION GETTING EXECUTED FOR THE FIRST TIME                *
******************************************************************
   MOVE 'HELLO' TO WS-MESSAGE                               
   EXEC CICS SEND TEXT                                      
      FROM (WS-MESSAGE)                                   
   END-EXEC                                                 
   MOVE 'FIRST' TO WS-COMMAREA                              
******************************************************************
* TASK ENDS AS A RESULT OF RETURN. IF AID KEY PRESSED, NEXT      *
* TRANSACTION SHOULD BE TP002. DATA PASSED FROM WS-COMMAREA TO   *
* DFHCOMMAREA                                                    *
******************************************************************
   EXEC CICS RETURN                                         
      TRANSID('TP002')                                      
      COMMAREA(WS-COMMAREA)                                
   END-EXEC                                                 
******************************************************************
* IF  COMMAREA IS NOT EMPTY , THEN TP002 HAS BEEN EXECUTED ONCE  *
* ALREADY, USER INTERACTION IS FACILITATED BY RECEIVE            *
******************************************************************
   ELSE                                                         
      EXEC CICS RECEIVE                                        
         INTO(WS-MESSAGE)                                    
   END-EXEC
      EXEC CICS SEND TEXT                                      
      FROM (WS-MESSAGE)                                   
   END-EXEC                                                 
******************************************************************
* TASK ENDS AS A RESULT OF RETURN, NO NEXT TRANSACTION SPECIFIED *
* TO BE EXECUTED                                                 *
******************************************************************
   EXEC CICS RETURN                                         
   END-EXEC                                                 
END-IF.       

伪转换的优点

以下是伪转换的优点 -

  • 资源得到最好的利用。程序暂停后,资源会立即释放。

  • 看起来好像处于对话模式。

  • 它具有更好的响应时间。

退货声明

以下是 CICS 中使用的两种类型的返回语句 -

返回-1

当发出以下无条件返回语句时,任务和事务(程序)终止。

EXEC CICS RETURN 
END-EXEC.

返回2

当发出以下条件返回(即 return with TRANSID 语句)时,控制返回到 CICS,并执行下一个 transid。当用户按下 AID 键时,下一个事务开始。

EXEC CICS RETURN
   TRANSID ('trans-id')
   [COMMAREA(WS-COMMAREA)]
END-EXEC.

CICS - 援助钥匙

正如我们在前面的模块中讨论的那样,AID 键称为“注意标识符键”。CICS 只能检测 AID 密钥。键入所有输入后,只有当用户按下 AID 键之一时,CICS 才会进行控制。AID 键包括 ENTER、PF1 至 PF24、PA1 至 PA3 和 CLEAR。

验证 AID 密钥

使用 EIBAID 检查用户按下的按键。

  • EIBAID 是一字节长,保存 3270 输入流中使用的实际注意标识符值。

  • CICS 为我们提供了一组预编码的变量,可以通过编写以下语句在应用程序中使用它们 -

    复制 DFHAID

DFHAID

DFHAID 是一个副本,用于在应用程序中包含 CICS 预编码的变量集。DFHAID 抄写本中包含以下内容 -

01    DFHAID.                             
   02  DFHNULL   PIC  X  VALUE IS ' '.     
   02  DFHENTER  PIC  X  VALUE IS ''''.    
   02  DFHCLEAR  PIC  X  VALUE IS '_'.     
   02  DFHCLRP   PIC  X  VALUE IS '¦'.     
   02  DFHPEN    PIC  X  VALUE IS '='.     
   02  DFHOPID   PIC  X  VALUE IS 'W'.     
   02  DFHMSRE   PIC  X  VALUE IS 'X'.     
   02  DFHSTRF   PIC  X  VALUE IS 'h'.     
   02  DFHTRIG   PIC  X  VALUE IS '"'.     
   02  DFHPA1    PIC  X  VALUE IS '%'.     
   02  DFHPA2    PIC  X  VALUE IS '>'.     
   02  DFHPA3    PIC  X  VALUE IS ','.     
   02  DFHPF1    PIC  X  VALUE IS '1'.     
   02  DFHPF2    PIC  X  VALUE IS '2'.     
   02  DFHPF3    PIC  X  VALUE IS '3'.     
   02  DFHPF4    PIC  X  VALUE IS '4'.     
   02  DFHPF5    PIC  X  VALUE IS '5'.     
   02  DFHPF6    PIC  X  VALUE IS '6'.     
   02  DFHPF7    PIC  X  VALUE IS '7'.     
   02  DFHPF8    PIC  X  VALUE IS '8'.     
   02  DFHPF9    PIC  X  VALUE IS '9'.     
   02  DFHPF10   PIC  X  VALUE IS ':'.     
   02  DFHPF11   PIC  X  VALUE IS '#'.     
   02  DFHPF12   PIC  X  VALUE IS '@'.     
   02  DFHPF13   PIC  X  VALUE IS 'A'.     
   02  DFHPF14   PIC  X  VALUE IS 'B'.     
   02  DFHPF15   PIC  X  VALUE IS 'C'.   
   02  DFHPF16   PIC  X  VALUE IS 'D'.   
   02  DFHPF17   PIC  X  VALUE IS 'E'.   
   02  DFHPF18   PIC  X  VALUE IS 'F'.   
   02  DFHPF19   PIC  X  VALUE IS 'G'.   
   02  DFHPF20   PIC  X  VALUE IS 'H'.   
   02  DFHPF21   PIC  X  VALUE IS 'I'.   
   02  DFHPF22   PIC  X  VALUE IS '¢'.   
   02  DFHPF23   PIC  X  VALUE IS '.'.   
   02  DFHPF24   PIC  X  VALUE IS '<'.   

例子

以下示例显示如何在应用程序中使用 DFHAID copybook -

IDENTIFICATION DIVISION.                                         
PROGRAM-ID. HELLO.                                               
DATA DIVISION.   
WORKING-STORAGE SECTION.
COPY DFHAID.
PROCEDURE DIVISION.
A000-AIDKEY-PARA.
   EVALUATE EIBAID
      WHEN DFHAID
         PERFORM A000-PROCES-PARA
      WHEN DFHPF1
         PERFORM A001-HELP-PARA
      WHEN DFHPF3
         PERFORM A001-EXIT-PARA
    END-EVALUATE.

光标定位

有两种方法可以覆盖地图定义中指定的位置。

  • 一种方法是在发送地图命令的 CURSOR 选项中指定相对于行号和列号的屏幕位置。

  • 另一种方法是将 -1 移至后缀为 L 的符号映射变量。然后,在 SEND MAP 中使用 CURSOR 选项发送映射。

例子

以下示例显示如何覆盖名称字段的光标位置 -

MOVE -1 TO NAMEL
   EXEC CICS SEND 
      MAP ('map-name')
      MAPSET ('name-field')
      ERASE
      FREEKB
      CURSOR
   END-EXEC.

动态修改属性

在发送地图时,如果我们想要地图中指定的字段以外的字段具有不同的属性,那么我们可以通过在程序中设置该字段来覆盖它。以下是覆盖字段属性的说明 -

  • 要覆盖字段的属性,我们必须在应用程序中包含 DFHATTR。它由 CICS 提供。

  • 可以从列表中选择所需的属性并将其移至后缀为“A”的符号字段变量。

DFHATTR 包含以下内容 -

01  CICS-ATTRIBUTES.
   05  ATTR-UXN            PIC X(01) VALUE SPACE.
   05  ATTR-UXMN           PIC X(01) VALUE 'A'.
   05  ATTR-UXNL           PIC X(01) VALUE 'D'.
   05  ATTR-UXMNL          PIC X(01) VALUE 'E'.
   05  ATTR-UXBL           PIC X(01) VALUE 'H'.
   05  ATTR-UXMBL          PIC X(01) VALUE 'I'.
   05  ATTR-UXD            PIC X(01) VALUE '<'.
   05  ATTR-UXMD           PIC X(01) VALUE '('.
   05  ATTR-U9N            PIC X(01) VALUE '&'.
   05  ATTR-U9MN           PIC X(01) VALUE 'J'.
   05  ATTR-U9NL           PIC X(01) VALUE 'M'.
   05  ATTR-U9MNL          PIC X(01) VALUE 'N'.
   05  ATTR-U9BL           PIC X(01) VALUE 'Q'.
   05  ATTR-U9MBL          PIC X(01) VALUE 'R'.
   05  ATTR-U9D            PIC X(01) VALUE '*'.
   05  ATTR-U9MD           PIC X(01) VALUE ')'.
   05  ATTR-PXN            PIC X(01) VALUE '-'.
   05  ATTR-PXMN           PIC X(01) VALUE '/'.
   05  ATTR-PXNL           PIC X(01) VALUE 'U'.
   05  ATTR-PXMNL