CICS 快速指南



CICS - 概述

CICS 是一個 DB/DC 系統,用於線上應用程式。CICS 的開發是因為批處理作業系統只能執行批處理程式。CICS 程式可以用 COBOL、C、C++、Java 等語言編寫。如今,使用者希望在幾秒鐘內獲得即時資訊。為了提供如此快速的服務,我們需要一個能夠線上處理資訊的系統。CICS 允許使用者與後端系統通訊以獲取所需的資訊。線上程式的示例包括網上銀行系統、航班預訂等。下圖顯示了 CICS 的元件以及它們之間是如何相互關聯的:

CICS Overview

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 透過控制同時記錄更新、在任務 ABEND 時保護資料以及在系統故障時保護資料來促進資料完整性管理。

應用程式程式設計服務

應用程式程式設計服務與應用程式程式介面。CICS 的應用程式程式設計服務提供諸如命令級翻譯、CEDF(除錯功能)和 CECI(命令直譯器功能)等功能。我們將在後續模組中更詳細地討論。

監控服務

監控服務監控 CICS 地址空間內的各種事件。它提供一系列統計資訊,可用於系統調整。

CICS - 基本術語

我們必須瞭解 CICS 中使用的基本術語,才能更好地理解其工作原理。應用程式程式使用 CICS 與遠端和本地終端以及子系統進行通訊。

IBM 3270 終端

3270 資訊顯示系統是顯示器和印表機終端系列。3270 終端用於透過 IBM 控制器連線到主機。如今,3270 模擬軟體可用,這意味著即使是普通的 PC 也可用作 3270 終端。3270 終端是啞終端,本身不進行任何處理。所有處理都需要由應用程式程式完成。IBM 終端包含以下元件:

CRT 顯示器

CRT 顯示器顯示應用程式程式的輸出或輸入欄位。下面顯示了 CRT 顯示器 3278 型號的螢幕截圖。它具有以下特點:

  • 它能夠顯示 1920 個字元。

  • 這 1920 個字元位置中的每一個都是可單獨定址的。

  • COBOL 應用程式程式可以將資料傳送到螢幕上的所有位置。

  • 可以使用 BMS 設定欄位的顯示特性(如強度、受保護、不受保護),我們將在後續模組中詳細討論。

CICS CRT Monitor

鍵盤

IBM 鍵盤鍵分為以下兩類:

  • 非輔助鍵 - 字母、數字、標點符號等所有其他鍵都是非輔助鍵。當用戶使用非輔助鍵鍵入文字或數字時,CICS 甚至不知道使用者是否正在鍵入任何內容。

  • 輔助鍵 - 輔助鍵稱為注意力識別鍵。CICS 只能檢測輔助鍵。鍵入所有輸入後,只有當用戶按下其中一個輔助鍵時,CICS 才會接管控制權。輔助鍵:ENTER、PF1 到 PF24、PA1 到 PA3、CLEAR。輔助鍵進一步分為兩類:

    • PF 鍵 - PF 鍵稱為功能鍵。PF 鍵允許將資料從終端傳輸到 CICS。PF 鍵是 ENTER 和 PF1 到 PF24。

    • PA 鍵 - PA 鍵稱為程式訪問鍵。PA 鍵不允許在終端和 CICS 之間傳輸資料。PA 鍵是 PA1 到 PA3 和 CLEAR。

CICS Keyboard

事務

透過事務呼叫 CICS 程式。CICS 事務是應用程式中一組邏輯相關的程式。整個應用程式可以邏輯地劃分為多個事務。

  • 事務識別符號(長度為 1 到 4 個字元)用於標識使用者想要執行的事務。

  • 程式設計師將一個程式連結到事務識別符號,該識別符號用於呼叫該特定事務的所有應用程式程式。

任務

任務是特定於使用者的單位工作。

  • 使用者透過使用其中一個事務識別符號來呼叫應用程式。CICS 查詢事務識別符號以找出首先呼叫哪個程式來執行請求的工作。它建立一個任務來執行工作,並將控制權轉移到提到的程式。

  • 可以透過多個任務完成一個事務。

  • 任務可以接收來自啟動它的終端的資料,並向該終端傳送資料。它可以讀取和寫入檔案,還可以啟動其他任務。

任務與事務

事務和任務之間的區別在於,多個使用者可以呼叫一個事務,但每個使用者都會啟動自己的任務。

LUW

LUW 代表邏輯工作單元。LUW 指出應完全完成一項工作,否則不應完成。一個任務可以在 CICS 中包含多個邏輯工作單元。我們將在後續模組中進一步討論。

應用程式

應用程式是一系列邏輯分組的程式,用於形成多個事務,這些事務用於為終端使用者完成特定任務。

a

CICS - 核心

前面描述的五個 CICS 系統元件是 CICS 系統程式的一個方便的分組,每個元件都執行其自己的專門功能。CICS 的核心稱為 CICS 核心,它包含 IBM 提供的 CICS 控制程式和控制表。

控制程式

CICS 核心由控制程式和相應的控制表構成。它提供了獨特的優勢。它使 CICS 系統高度靈活,因此易於維護。以下是 CICS 的重要控制程式:

TCP

TCP 稱為終端控制程式。

  • TCP 用於接收來自終端的訊息。

  • 它維護硬體通訊需求。

  • 它請求 CICS 啟動任務。

KCP

KCP 稱為任務控制程式。

  • KCP 用於同時控制任務及其相關屬性的執行。

  • 它處理與多工處理相關的所有問題。

PCP

PCP 稱為程式控制程式。

  • PCP 用於查詢和載入程式以供執行。

  • 它在程式之間傳遞控制,最後將控制權返回給 CICS。

FCP

FCP 稱為檔案控制程式。

  • FCP 用於為應用程式程式提供諸如讀取、插入、更新或刪除檔案中的記錄等服務。

  • 它對記錄保持獨佔控制,以在記錄更新期間維護資料完整性。

SCP

SCP 稱為儲存控制程式。它用於控制 CICS 區域記憶體儲的分配和釋放。

控制表

CICS 由 IBM 提供的 CICS 控制程式和表組成。需要根據應用程式資訊相應地更新這些表,以便成功執行 CICS 應用程式程式。以下是重要的控制表:

TCT

TCT 指的是終端控制表(Terminal Control Table)。

  • 當我們登入到 CICS 終端時,會在 TCT 表中建立一個條目。

  • TCT 包含連線到當前 CICS 區域的所有終端 ID。

  • 終端控制程式以及終端控制表識別來自終端的輸入資料。

PCT

PCT 指的是程式控制表(Program Control Table)。

  • 它包含事務 ID (TRANSID) 和對應的程式名稱或程式 ID。

  • TRANSID 在 PCT 表中是唯一的。

PPT

PPT 指的是處理程式表(Processing Program Table)。PPT 包含程式名稱或對映集名稱、任務使用計數器、語言、大小、主儲存地址、載入庫地址等。

  • 程式或對映集名稱在 PPT 表中是唯一的。

  • CICS 接收事務,並從 PCT 中分配一個相應的程式名稱給該事務。它檢查程式是否已載入。如果已載入,則任務使用計數器加 1。如果程式未載入,則先載入程式,並將任務使用計數器設定為 1。它從 PPT 表中獲取載入庫地址。

FCT

FCT 指的是檔案控制表(File Control Table)。

  • 它包含檔名稱、檔案型別、記錄長度等。

  • CICS 程式中使用的所有檔案都必須在 FCT 中宣告,並且由 CICS 本身開啟和關閉。

事務

當在 CICS 終端上輸入事務識別符號 TP02 時,首先檢查 PCT 表中是否存在與此事務識別符號關聯的程式。如果找到,則在 PPT 表中檢查以查詢要執行的程式的位置。

如果程式已存在於記憶體中,則開始執行該程式;否則,將程式從輔助儲存載入到記憶體中,然後開始執行。

CICS Transaction

事務生命週期

事務生命週期包含以下步驟:

CICS Transaction Life Cycle

步驟 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

CESN 指的是 CICS 執行登入(CICS Execute Sign On)。

  • CESN 用於登入到 CICS 區域。

  • 我們需要提供 CICS 管理員提供的使用者 ID 和密碼才能登入到 CICS。以下螢幕截圖顯示了登入螢幕的外觀:

CICS CESN

CEDA

CEDA 指的是 CICS 執行定義和管理(CICS Execute Definition and Administration)。它由 CICS 系統管理員用來定義 CICS 表條目和其他管理活動。

CEMT

CEMT 指的是 CICS 執行主終端(CICS Execute Master Terminal)。它用於查詢和更新 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 Execute Command Interpreter)。可以使用 CECI 執行許多 CICS 命令。

  • CECI 用於檢查命令的語法。只有在語法正確的情況下,它才會執行命令。

  • 登入後在空白的 CICS 螢幕上鍵入 CECI 選項。它會提供可用的選項列表。

示例

以下示例顯示瞭如何將對映輸出資料傳送到終端。我們將在後續模組中討論對映。

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

CEDF

CEDF 指的是 CICS 執行除錯工具(CICS Execute Debug Facility)。它用於逐步除錯程式,這有助於查詢錯誤。

在 CICS 區域中鍵入 CEDF 並按 Enter 鍵。將顯示終端處於 EDF 模式訊息。現在鍵入事務 ID 並按 Enter 鍵。啟動後,每次按 Enter 鍵都會執行一行。在執行任何 CICS 命令之前,它會顯示一個螢幕,您可以在其中修改值然後再繼續。

CMAC

CMAC 指的是 CICS 異常程式碼訊息(CICS Messages for Abend Codes)。它用於查詢 CICS 異常程式碼的解釋和原因。

示例

以下示例顯示瞭如何檢查異常程式碼的詳細資訊:

CMAC abend-code

CESF

CESF 指的是 CICS 執行登出(CICS Execute Sign Off)。它用於從 CICS 區域登出。

示例

以下示例顯示瞭如何從 CICS 區域登出:

CESF LOGOFF

CEBR

CEBR 指的是 CICS 執行臨時儲存瀏覽(CICS Execute Temporary storage Browse)。它用於顯示臨時儲存佇列或 TSQ 的內容。

在除錯期間,CEBR 用於檢查佇列中的專案是否正在正確寫入和檢索。我們將在後續模組中進一步討論 TSQ。

示例

以下示例顯示瞭如何呼叫 CEBR 命令:

CEBR queue-id

CICS 概念

每個命令都可以透過執行一系列 CICS 宏來實現。我們將討論一些基本功能,這些功能將幫助我們更好地理解這些概念:

多工處理

此作業系統功能允許同時執行多個任務。任務可以共享相同的程式或使用不同的程式。CICS 在其自己的區域中排程任務。

多執行緒

此作業系統功能允許同時執行多個任務,並共享相同的程式。要實現多執行緒,應用程式必須是在作業系統下是**可重入程式**(re-entrant program),或在 CICS 下是**準可重入程式**(quasi-reentrant)。

可重入性

可重入程式是指不會修改自身,並且可以在中斷後重新進入自身並繼續處理的程式。

準可重入性

準可重入程式是在 CICS 環境下的可重入程式。CICS 透過為每個任務獲取唯一的儲存區域來確保可重入性。在 CICS 命令之間,CICS 擁有獨佔使用 CPU 資源的權利,並且可以執行其他任務的其他 CICS 命令。

有時,許多使用者會同時使用同一個程式;這就是我們所說的**多執行緒**。例如,假設 50 個使用者正在使用程式 A。在此,CICS 將為該程式提供 50 個工作儲存區,但只有一個過程部分。這種技術稱為**準可重入**。

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 執行程式。事務 ID 由管理員提供。它將顯示以下輸出:

CICS Output

程式編譯

以下流程圖顯示了編譯 COBOL-CICS 程式中使用的步驟:

CICS Compilation

翻譯器

翻譯器的功能是檢查 CICS 命令中的語法錯誤。它將它們翻譯成等效的 COBOL 語句。

編譯器

編譯器的功能是擴充套件 COBOL 副本庫。在檢查原始碼的語法錯誤後,它會編譯程式碼。

連結編輯器

連結編輯器的功能是將不同的目標模組連結起來,建立一個單一的載入模組。

CICS - BMS

BMS被稱為基本對映支援。一個應用程式由格式化的螢幕組成,充當終端和CICS程式之間的橋樑。為了在終端和CICS程式之間進行通訊,我們使用CICS終端輸入/輸出服務。我們使用BMS建立具有適當位置和屬性的螢幕設計。以下是BMS的功能:

  • BMS充當終端和CICS程式之間的介面。

  • 螢幕的設計和格式與應用程式的邏輯是分開的。

  • BMS使應用程式與硬體無關。

格式化螢幕

下面顯示的螢幕是一個選單螢幕,可以使用BMS進行設計。其要點如下:

  • 螢幕可以包含標題、日期以及需要顯示的任何其他資訊。

  • 選項1、2和3是未命名的欄位,是螢幕的標題。

  • 在選擇欄位中,我們需要提供輸入。然後將此輸入傳送到CICS程式以進行進一步處理。

  • 在螢幕底部,顯示操作鍵。

  • 所有欄位和螢幕本身都使用BMS宏定義。當整個對映定義完成後,我們可以使用JCL對其進行彙編。

CICS Screen

BMS基本術語

以下是我們將在後續模組中使用的基本術語:

對映

對映是單個螢幕格式,可以使用BMS宏進行設計。它可以具有包含1到7個字元的名稱。

對映集

對映集是一組對映,它們連結在一起形成一個載入模組。它應該有一個PPT條目。它可以具有1到7個字元的名稱。

BMS宏

BMS對映是用匯編語言編寫的程式,用於管理螢幕。用於定義螢幕的三個宏是DFHMSD、DFHMDI和DFHMDF。

DFHMSD

DFHMSD宏生成對映集定義。它是宏識別符號,表示我們正在開始一個對映集。對映集名稱是載入模組名稱,並且必須存在PPT表中的一個條目。下表顯示了可以在DFHMSD中使用的引數列表:

序號 引數及描述
1

TYPE

TYPE用於定義對映型別。如果TYPE=
MAP - 建立物理對映
DSECT - 建立符號對映
&&SYSPARM - 建立物理和符號對映。
FINAL - 指示對映集編碼的結束。

2

MODE

MODE用於指示輸入/輸出操作。如果MODE=
IN - 僅用於輸入對映
OUT - 僅用於輸出對映
INOUT - 用於輸入和輸出對映

3

LANG

LANG = ASM/COBOL/PL1
它決定了DSECT結構的語言,用於複製到應用程式程式中。

4

STORAGE

如果STORAGE=
AUTO - 為每個對映集獲取一個單獨的符號對映區域
BASE - 對來自多個對映集的符號對映具有相同的儲存基地址

5

CTRL

CRTL用於定義裝置控制請求。如果CTRL=
FREEKB - 解鎖鍵盤
FRSET - 將MDT重置為零狀態
ALARM - 在螢幕顯示時設定警報
PRINT - 指示將對映集傳送到印表機。

6

TERM

TERM = type 確保裝置獨立性,如果使用除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宏生成對映定義。它表示我們正在開始一個新的對映。對映名稱後跟DFHMDI宏。對映名稱用於傳送或接收對映。下表顯示了我們在DFHMDI宏內使用的引數:

序號 引數及描述
1

SIZE

SIZE = (行,列)
此引數給出對映的大小。BMS允許我們使用多個對映構建螢幕,當我們在單個對映集中使用多個對映時,此引數變得很重要。

2

LINE

它指示對映的起始行號。

3

COLUMN

它指示對映的起始列號。

4

JUSTIFY

它用於指定整個對映或對映欄位是左對齊還是右對齊。

5

CTRL

CRTL用於定義裝置控制請求。如果CTRL=
FREEKB - 解鎖鍵盤
FRSET - 將MDT重置為零狀態
ALARM - 在螢幕顯示時設定警報
PRINT - 指示將對映傳送到印表機

6

TIOAPFX

TIOAPFX = YES/NO

YES - 為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

這是欄位應出現在螢幕上的位置。欄位以其屬性位元組開頭,因此,如果您編碼POS = (1,1),則該欄位的屬性位元組位於第1行第1列,實際資料從第2列開始。

2

LENGTH

這是欄位的長度,不包括屬性位元組。

3

INITIAL

這是輸出欄位的字元資料。我們使用它來指定螢幕的標籤和標題,並使它們獨立於程式。例如,對於選單螢幕中的第一個欄位,我們將編碼:INITIAL = 'MENU'。

4

JUSTIFY

它用於指定整個對映或對映欄位是左對齊還是右對齊。

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 - MAP

BMS接收使用者輸入的資料,然後將其格式化為符號對映區域。應用程式程式只能訪問符號對映中存在的資料。應用程式程式處理資料,並將輸出傳送到符號對映。BMS將符號資料的輸出與物理對映合併。

CICS MAPS

物理對映

物理對映是載入庫中的載入模組,其中包含有關如何顯示對映的資訊。

  • 它包含有關對映中所有欄位的屬性及其位置的詳細資訊。

  • 它包含給定終端的對映的顯示格式。

  • 它使用BMS宏進行編碼。它被單獨彙編並連結編輯到CICS庫中。

符號對映

符號對映是庫中的複製簿。CICS應用程式程式使用複製簿從終端傳送和接收資料。

  • 它包含所有複製到程式WORKINGSTORAGE部分的可變資料。

  • 它包含所有命名欄位。應用程式程式設計師使用這些欄位讀取和寫入對映中的資料。

跳過欄位和停止欄位

對於對映中的未受保護的命名欄位,如果我們指定了長度為10,則表示名稱欄位可以取長度不超過10的值。但是,當您使用CICS顯示此對映並在螢幕上開始輸入此欄位的值時,我們可以輸入超過10個字元,即直到螢幕末尾,我們甚至可以在下一行輸入。為了防止這種情況,我們使用跳過欄位或停止欄位。跳過欄位通常是一個長度為1的未命名欄位,位於命名欄位之後。

CICS Skipper & Stopper Field

跳過欄位

如果我們在命名未受保護欄位之後放置一個跳過欄位,則在輸入值時,一旦達到指定的長度,游標將自動定位到下一個未受保護欄位。以下示例顯示瞭如何新增跳過欄位:

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 Attribute Byte
位位置 描述 位設定
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,則資料可以傳輸。

傳送對映

傳送對映命令將格式化輸出寫入終端。它用於從應用程式程式將對映傳送到終端。以下程式碼段顯示瞭如何將對映傳送到終端:

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

FROM

如果我們決定使用不同的 DSECT 名稱,則必須將 FROM (dsect-name) 選項與 SEND MAP 命令一起使用。

4

MAPONLY

這意味著程式中的任何資料都不會合併到對映中,並且僅傳輸對映中的資訊。

5

DATAONLY

它是 MAPONLY 的邏輯相反。我們用它來修改已建立顯示中的可變資料。只有來自程式的資料被髮送到螢幕。對映中的常量不會被髮送。

6

ERASE

它會導致在顯示我們傳送的內容之前清除整個螢幕。

7

ERASEUP

它只會擦除未受保護的欄位。

8

FRSET

標誌重置在您傳送的內容放置到螢幕上之前,關閉螢幕上所有欄位的屬性位元組中的修改資料標記。

9

CURSOR

它可用於在終端螢幕上定位游標。可以透過將 -1 移動到欄位的 L 部分,然後傳送對映來設定游標。

10

ALARM

它會導致發出警報聲。

11

FREEKB。

如果我們在對映或傳送命令中指定 FREEKB,則鍵盤將被解鎖。

12

PRINT

它允許將傳送命令的輸出列印到印表機上。

13

FORMFEED

在輸出列印之前,它會導致印表機將紙張恢復到下一頁的頂部。

接收對映

當我們想要從終端接收輸入時,我們使用 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(mapset-name) NEW

  • 步驟 7 - 輸入以下命令將對映傳送到終端:

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

CICS - 介面塊

任何應用程式程式都需要一個介面來與 CICS 互動。EIB(執行介面塊)充當一個介面,允許應用程式程式與 CICS 通訊。EIB 包含程式執行期間所需的資訊。

受限的 COBOL 動詞

在編寫 CICS 程式時,我們不能使用將控制權直接返回給 MVS 的命令。如果我們編寫這些 COBOL 動詞,它不會產生任何編譯錯誤,但我們可能會得到不可預測的結果。以下是在 CICS 程式中不應使用的 COBOL 動詞:

  • 檔案 I/O 語句,如 Open、Read、Write、Rewrite、Close、Delete 和 Start。CICS 中的所有檔案 I/O 都由檔案控制模組處理,它們有自己的一套語句,如 READ、WRITE、REWRITE 和 DELETE,我們將在後續模組中討論。

  • 不需要檔案段和環境部。

  • 呼叫作業系統功能的 COBOL 語句,如 Accept、Date/Time 不能使用。

  • 不要使用 DISPLAY、MERGE、STOP RUN 和 GO BACK。

執行介面塊

執行介面塊 (EIB) 是一個控制塊,由 CICS 自動載入到每個程式中。

  • EIB 對任務是唯一的,並且在任務持續時間記憶體在。它包含一組與任務相對應系統相關資訊。

  • 它包含有關事務識別符號、時間、日期等資訊,這些資訊在 CICS 執行應用程式程式期間使用。

  • 作為任務一部分執行的每個程式都可以訪問相同的 EIB。

  • 在執行時,可以透過在 CEDF 模式下執行程式來檢視 EIB 中的資料。

EIB 欄位

下表提供了 EIB 中存在的欄位列表:

EIB 欄位 PIC 子句 描述
EIBAID X(1) 按下的輔助鍵
EIBCALEN S9(4) COMP 它包含 DFHCOMMAREA 的長度
EIBDATE S9(7) COMP-3 它包含當前系統日期
EIBRCODE X(6) 它包含上次事務的返回碼
EIBTASKN S9(7) COMP-3 它包含任務號
EIBTIME S9(7) COMP-3 它包含當前系統時間
EIBTRMID 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 命令實現使用者和應用程式程式之間的會話。會話程式的關鍵點如下:

  • 系統將訊息傳送到螢幕並等待使用者的響應。

  • 使用者響應所花費的時間稱為思考時間。此時間相當長,這是會話程式的主要缺點。

  • 使用者提供必要的輸入並按下輔助鍵。

  • 應用程式處理使用者的輸入併發送輸出。

  • 程式在開始時載入到主儲存器中,並在任務結束之前保留。

CICS Conversion Program

示例

以下示例顯示了一個轉換程式,該程式從使用者處獲取輸入,然後簡單地在 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 Pseudo Conversion Program

偽轉換技術

在偽轉換中需要注意的重要一點是在每個任務之間傳遞資料。我們將討論傳遞資料的方法。

COMMAREA

COMMAREA 稱為通訊區域。COMMAREA 用於在任務之間傳遞資料。以下示例顯示瞭如何傳遞 COMMAREA,其中 WSCOMMAREA 和 WS-COMMAREA-LENGTH 在工作儲存段中宣告:

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

DFHCOMMAREA

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

發出以下條件返回,即帶 TRANSID 語句的返回時,控制權將返回到 CICS,並執行下一個 transid。當用戶按下輔助鍵時,下一個事務開始。

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 為我們提供了一組預編碼的變數,可以透過編寫以下語句在應用程式中使用:

    COPY 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 複製簿:

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.

游標定位

有兩種方法可以覆蓋對映定義中指定的位置。

  • 一種方法是在 SEND MAP 命令的 CURSOR 選項中指定相對於行號和列號的螢幕位置。

  • 另一種方法是將 -1 移動到以 L 為字尾的符號對映變數。然後,使用 SEND MAP 中的 CURSOR 選項傳送對映。

示例

以下示例顯示瞭如何覆蓋 NAME 欄位的游標位置:

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          PIC X(01) VALUE 'V'.
   05  ATTR-PXBL           PIC X(01) VALUE 'Y'.
   05  ATTR-PXMBL          PIC X(01) VALUE 'Z'.
   05  ATTR-PXD            PIC X(01) VALUE '%'.
   05  ATTR-PSN            PIC X(01) VALUE '0'.
   05  ATTR-PSMN           PIC X(01) VALUE '1'.
   05  ATTR-PSNL           PIC X(01) VALUE '4'.
   05  ATTR-PSMNL          PIC X(01) VALUE '5'.
   05  ATTR-PSBL           PIC X(01) VALUE '8'.
   05  ATTR-PSMBL          PIC X(01) VALUE '9'.
   05  ATTR-PSD            PIC X(01) VALUE '@'.
   05  ATTR-PSMD           PIC X(01) VALUE "'".

CICS - 檔案處理

CICS 允許我們透過多種方式訪問檔案資料。大多數檔案訪問在聯機系統中是隨機的,因為要處理的事務不會被批處理並按任何順序排序。因此,CICS 支援常用的直接訪問方法:VSAM 和 DAM(直接訪問方法)。它還允許我們使用資料庫管理器訪問資料。

隨機訪問

以下是用於隨機處理的命令:

序號 命令和描述
1 READ

READ 命令使用主鍵從檔案中讀取資料。

2 WRITE

Write 命令用於向檔案新增新記錄。

3 REWRITE

REWRITE 命令用於修改檔案中已存在的記錄。

4 DELETE

DELETE 命令用於刪除檔案中存在的記錄。

順序訪問

以下是用於順序處理的命令:

序號 命令和描述
1 STARTBR

STARTBR 被稱為開始瀏覽。

2 READNEXT / READPREV

當我們發出 STARTBR 命令時,它不會使記錄可用。

3 RESETBR

RESETBR 命令允許我們在瀏覽中間重置我們的起點。

4 ENDBR

當我們完成順序讀取檔案後,我們使用 ENDBR 命令終止瀏覽。

CICS - 錯誤處理

在使用 CICS 應用程式時,可能會遇到多種型別的**異常**和錯誤。錯誤可能是由於硬體或軟體問題引起的。我們將在本模組中討論錯誤和錯誤處理。

CICS 錯誤

以下是 CICS 應用程式執行過程中可能出現的 CICS 錯誤:

  • 當 CICS 系統中的條件不正常時,會發生一些預期的 CICS 錯誤。例如,如果我們正在讀取特定記錄但未找到該記錄,則會收到“未找到”錯誤。**Mapfail** 是一個類似的錯誤。此類錯誤由程式中的顯式邏輯處理。

  • 邏輯錯誤是由於某些原因引起的,例如除以零、數字欄位中的非法字元或事務 ID 錯誤。

  • 與硬體或其他系統條件相關的錯誤超出了應用程式的控制範圍。例如,在訪問檔案時出現輸入/輸出錯誤。

錯誤處理命令

CICS 提供了幾種機制來識別錯誤並在我們的程式中處理它們。以下是用於處理預期 CICS 錯誤的命令:

序號 處理命令和描述
1 Handle condition

Handle condition 用於將程式的控制權轉移到段落或過程標籤。

2 Handle Abend

如果程式由於某些原因(如輸入/輸出錯誤)而異常終止,則可以使用 Handle Abend CICS 命令進行處理。

3 Abend

Abend 命令用於有意終止任務。

4 Ignore Condition

Ignore condition 用於當我們希望在發生 Ignore Condition 中提到的特定異常或錯誤時不採取任何操作。

5 Nohandle

Nohandle 可以指定給任何 CICS 命令。

CICS - 控制操作

CICS 程式控制程式 (PCP) 管理應用程式的流程。所有應用程式都必須在處理程式表中有一個條目。以下是用於程式控制服務的命令:

  • XCTL
  • Link
  • Load
  • Release
  • Return

程式邏輯級別

在 CICS 下執行的應用程式具有不同的邏輯級別。第一個直接接收控制權的程式處於最高邏輯級別,即第 1 級。連結程式位於連結程式的下一個邏輯級別。XCTL 程式在同一級別執行。當我們稍後在本模組中學習 Link 和 XCTL 時,這一點將變得清晰。下圖顯示了邏輯級別:

CICS Control Operations

XCTL

XCTL 的基本解釋如下:

  • XCTL 命令用於將控制權從一個程式傳遞到同一級別的另一個程式。

  • 它不期望控制權返回。

  • 它類似於 GO TO 語句。

  • XCTL 程式可以是偽會話式的。

示例

以下示例顯示瞭如何使用 XCTL 命令將控制權傳遞給另一個程式:

IDENTIFICATION DIVISION.                                         
PROGRAM-ID. PROG1.  
WORKING-STORAGE SECTION.
01 WS-COMMAREA    PIC X(100).                                             
PROCEDURE DIVISION.

EXEC CICS XCTL
   PROGRAM ('PROG2')
   COMMAREA (WS-COMMAREA)
   LENGTH (100)
END-EXEC.

此命令將控制權傳遞給程式 'PROG2',並傳遞 100 位元組的資料。COMMAREA 是一個可選引數,它是包含要傳遞的資料或要返回結果的區域的名稱。

Link

Link 命令用於將控制權傳遞到較低級別的另一個程式。它期望控制權返回。連結程式不能是偽會話式的。

示例

以下示例顯示瞭如何使用 Link 命令將控制權傳遞給另一個程式:

IDENTIFICATION DIVISION.                                         
PROGRAM-ID. PROG1.  
WORKING-STORAGE SECTION.
01 WS-COMMAREA    PIC X(100).                                             
PROCEDURE DIVISION.

EXEC CICS LINK
   PROGRAM ('PROG2')
   COMMAREA (WS-COMMAREA)
   LENGTH (100)
END-EXEC.

Load

Load 命令用於載入程式或表。以下是 Load 命令的語法:

EXEC CICS LOAD
   PROGRAM ('name')
END-EXEC.

Release

Release 命令用於釋放程式或表。以下是 Release 命令的語法:

EXEC CICS RELEASE
   PROGRAM ('name')
END-EXEC.

Return

Return 命令用於將控制權返回到下一個較高的邏輯級別。以下是 Return 命令的語法:

EXEC CICS RETURN
   PROGRAM ('name')
   COMMAREA (data-value)
   LENGTH (data-value)
END-EXEC.

間隔控制操作

間隔控制操作有以下兩種型別:

ASKTIME

ASKTIME 用於請求當前時間和日期或時間戳。然後,我們將此值移動到程式內的工作儲存變數。以下是 ASKTIME 命令的語法:

EXEC CICS ASKTIME
   [ABSTIME(WS-TIMESTAMP)]
END-EXEC.

FORMATTIME

FORMATTIME 根據選項將時間戳格式化為所需的格式,對於日期,可以是 YYDDD、YYMMDD 或 YYDDMM。DATESEP 指示日期的分隔符,就像 TIMESEP 變數指示時間的分隔符一樣。以下是 FORMATTIME 命令的語法:

EXEC CICS FORMATTIME
   ABSTIME(WS-TIMESTAMP)
   [YYDDD(WS-DATE)]
   [YYMMDD(WS-DATE)]
   [YYDDMM(WS-DATE)]
   [DATESEP(WS-DATE-SEP)]
   [TIME(WS-TIME)]
   [TIMESEP(WS-TIME-SEP)]
END-EXEC.

CICS - 臨時儲存

CICS 中有不同的暫存區可用於儲存資料或在事務之間傳輸資料。CICS 提供了五個儲存區域,我們將在本模組中討論這些區域。

COMMAREA

COMMAREA 的行為類似於暫存區,可用於將資料從一個程式傳遞到另一個程式,無論是在同一事務中還是在不同的事務中。它應在 LINKAGE SECTION 中使用 DFHCOMMAREA 名稱進行定義。

公共工作區

CICS 區域中的任何事務都可以訪問公共工作區,因此必須由系統中決定使用它的所有事務商定其格式和使用方式。整個 CICS 區域中只有一個 CWA。

事務工作區

事務工作區用於在同一事務中執行的應用程式之間傳遞資料。TWA 僅在事務持續期間存在。其大小在程式控制表中定義。

臨時儲存佇列

臨時儲存佇列 (TSQ) 是臨時儲存控制程式 (TSP) 提供的功能。

  • TSQ 是一個記錄佇列,可以在同一 CICS 區域中的不同任務或程式中建立、讀取和刪除。

  • 佇列識別符號用於標識 TSQ。

  • TSQ 中的記錄由稱為專案號的相對位置標識。

  • TSQ 中的記錄在整個 TSQ 被顯式刪除之前一直可訪問。

  • TSQ 中的記錄可以順序讀取或直接讀取。

  • TSQ 可以寫入 DASD 中的主儲存器或輔助儲存器。

WRITEQ TS

此命令用於向現有 TSQ 新增專案。此外,我們還可以使用此命令建立新的 TSQ。以下是 WRITEQ TS 命令的語法:

語法

EXEC CICS WRITEQ TS
   QUEUE ('queue-name')
   FROM (queue-record)
   [LENGTH (queue-record-length)]
   [ITEM (item-number)]
   [REWRITE]
   [MAIN /AUXILIARY]
END-EXEC.

以下是 WRITEQ TS 命令中使用的引數的詳細資訊:

  • 佇列由此引數中提到的名稱標識。

  • FROM 和 LENGTH 選項用於指定要寫入佇列的記錄及其長度。

  • 如果指定了 ITEM 選項,則 CICS 會為佇列中的記錄分配一個專案號,並將該選項中提供的的資料區域設定為專案號。如果記錄啟動一個新的佇列,則分配的專案號為 1,後續的專案號依次遞增。

  • REWRITE 選項用於更新佇列中已存在的記錄。

  • MAIN / AUXILIARY 選項用於將記錄儲存在主儲存器或輔助儲存器中。預設為 AUXILIARY。

READQ TS

此命令用於讀取臨時儲存佇列。以下是 READQ TS 的語法:

語法

EXEC CICS READQ TS
   QUEUE ('queue-name')
   INTO (queue-record)
   [LENGTH (queue-record-length)]
   [ITEM (item-number)]
   [NEXT]
END-EXEC.

DELETEQ TS

此命令用於刪除臨時儲存佇列。以下是 DELETEQ TS 的語法:

語法

EXEC CICS DELETEQ TS
   QUEUE ('queue-name')
END-EXEC.

瞬態資料佇列

瞬態資料佇列本質上是瞬態的,因為它可以快速建立和刪除。它僅允許順序訪問。

  • 佇列的內容只能讀取一次,因為一旦執行讀取操作,佇列就會被銷燬,因此稱為瞬態佇列。

  • 它不能被更新。

  • 它需要在DCT中有一個條目。

WRITEQ TD

此命令用於寫入瞬態資料佇列,並且它們始終寫入檔案。以下是WRITEQ TD命令的語法:

語法

EXEC CICS WRITEQ TD
   QUEUE ('queue-name')
   FROM (queue-record)
   [LENGTH (queue-record-length)]
END-EXEC.

READQ TD

此命令用於讀取瞬態資料佇列。以下是READQ TD命令的語法:

語法

EXEC CICS READQ TD
   QUEUE ('queue-name')
   INTO (queue-record)
   [LENGTH (queue-record-length)]
END-EXEC.

DELETEQ TD

此命令用於刪除瞬態資料佇列。以下是DELETEQ TD命令的語法:

語法

EXEC CICS DELETEQ TD
   QUEUE ('queue-name')
END-EXEC.

CICS - 互連通訊

兩個或多個系統之間發生的相互通訊稱為互連通訊

互連通訊的優勢

互連通訊的重要優勢如下:

  • 我們不需要在所有系統上覆制資料。

  • 使用者無需保持與多個系統的連線即可訪問儲存在這些系統上的資料。

  • 它提高了應用程式的效能。

基本術語

必須瞭解CICS系統中使用的基本術語。以下是基本術語:

本地系統

本地系統是發起互連通訊請求的系統。

本地資源

本地資源是位於本地系統上的資源。

遠端系統

遠端系統是由於互連通訊請求而啟動的系統。

遠端資源

遠端資源是位於遠端系統上的資源。

MVS Sysplex

MVS Sysplex是多個MVS作業系統的配置。它們透過共享功能和程式作為一個系統工作。

CICSPlex

CICSPlex通常被描述為一組互連的CICS區域,這些區域處理客戶工作負載。CICSPlex是一組互連的CICS區域,它們擁有終端、應用程式、資源等。

互連通訊方法

CICS可以透過兩種方式與其他系統通訊:

  • MRO - 多區域操作用於當同一MVSPLEX中的兩個CICS區域需要相互通訊時。

  • ISC - 系統間通訊用於當本地伺服器中的CICS區域需要與遠端伺服器中的CICS區域通訊時。

CICS - 狀態碼

在使用CICS時,您可能會遇到異常結束。以下是常見異常結束程式碼及其描述,這將幫助您解決問題:

序號 程式碼和描述
1

ASRA

程式檢查異常

2

AEI0

程式ID錯誤

3

AEI9

對映失敗條件

4

AEIO

重複鍵

5

AEIN

重複記錄

6

AEID

已到達檔案尾

7

AEIS

檔案未開啟

8

AEIP

無效請求條件

9

AEY7

無權使用該資源

10

APCT

未找到程式

11

AFCA

未找到資料集

12

AKCT

超時錯誤

13

ABM0

未找到指定的對映

14

AICA

程式處於無限迴圈

15

AAOW

內部邏輯錯誤

廣告

© . All rights reserved.