- CICS 教程
- CICS - 首頁
- CICS - 概述
- CICS - 環境
- CICS - 基本術語
- CICS - 核心
- CICS - 事務
- CICS - COBOL 基礎
- CICS - BMS
- CICS - MAP
- CICS - 介面塊
- CICS - 偽程式設計
- CICS - 輔助鍵
- CICS - 檔案處理
- CICS - 錯誤處理
- CICS - 控制操作
- CICS - 臨時儲存
- CICS - 互連通訊
- CICS - 狀態碼
- CICS - 面試問題
- CICS 有用資源
- CICS 快速指南
- CICS - 有用資源
- CICS - 討論
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 作為批處理作業執行,我們可以透過發出命令 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 設定欄位的顯示特性(如強度、受保護、不受保護),我們將在後續模組中詳細討論。
鍵盤
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 程式。CICS 事務是應用程式中一組邏輯相關的程式。整個應用程式可以邏輯地劃分為多個事務。
事務識別符號(長度為 1 到 4 個字元)用於標識使用者想要執行的事務。
程式設計師將一個程式連結到事務識別符號,該識別符號用於呼叫該特定事務的所有應用程式程式。
任務
任務是特定於使用者的單位工作。
使用者透過使用其中一個事務識別符號來呼叫應用程式。CICS 查詢事務識別符號以找出首先呼叫哪個程式來執行請求的工作。它建立一個任務來執行工作,並將控制權轉移到提到的程式。
可以透過多個任務完成一個事務。
任務可以接收來自啟動它的終端的資料,並向該終端傳送資料。它可以讀取和寫入檔案,還可以啟動其他任務。
任務與事務
事務和任務之間的區別在於,多個使用者可以呼叫一個事務,但每個使用者都會啟動自己的任務。
LUW
LUW 代表邏輯工作單元。LUW 指出應完全完成一項工作,否則不應完成。一個任務可以在 CICS 中包含多個邏輯工作單元。我們將在後續模組中進一步討論。
應用程式
應用程式是一系列邏輯分組的程式,用於形成多個事務,這些事務用於為終端使用者完成特定任務。
aCICS - 核心
前面描述的五個 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 表中檢查以查詢要執行的程式的位置。
如果程式已存在於記憶體中,則開始執行該程式;否則,將程式從輔助儲存載入到記憶體中,然後開始執行。
事務生命週期
事務生命週期包含以下步驟:
步驟 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。以下螢幕截圖顯示了登入螢幕的外觀:
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 由管理員提供。它將顯示以下輸出:
程式編譯
以下流程圖顯示了編譯 COBOL-CICS 程式中使用的步驟:
翻譯器
翻譯器的功能是檢查 CICS 命令中的語法錯誤。它將它們翻譯成等效的 COBOL 語句。
編譯器
編譯器的功能是擴充套件 COBOL 副本庫。在檢查原始碼的語法錯誤後,它會編譯程式碼。
連結編輯器
連結編輯器的功能是將不同的目標模組連結起來,建立一個單一的載入模組。
CICS - BMS
BMS被稱為基本對映支援。一個應用程式由格式化的螢幕組成,充當終端和CICS程式之間的橋樑。為了在終端和CICS程式之間進行通訊,我們使用CICS終端輸入/輸出服務。我們使用BMS建立具有適當位置和屬性的螢幕設計。以下是BMS的功能:
BMS充當終端和CICS程式之間的介面。
螢幕的設計和格式與應用程式的邏輯是分開的。
BMS使應用程式與硬體無關。
格式化螢幕
下面顯示的螢幕是一個選單螢幕,可以使用BMS進行設計。其要點如下:
螢幕可以包含標題、日期以及需要顯示的任何其他資訊。
選項1、2和3是未命名的欄位,是螢幕的標題。
在選擇欄位中,我們需要提供輸入。然後將此輸入傳送到CICS程式以進行進一步處理。
在螢幕底部,顯示操作鍵。
所有欄位和螢幕本身都使用BMS宏定義。當整個對映定義完成後,我們可以使用JCL對其進行彙編。
BMS基本術語
以下是我們將在後續模組中使用的基本術語:
對映
對映是單個螢幕格式,可以使用BMS宏進行設計。它可以具有包含1到7個字元的名稱。
對映集
對映集是一組對映,它們連結在一起形成一個載入模組。它應該有一個PPT條目。它可以具有1到7個字元的名稱。
BMS宏
BMS對映是用匯編語言編寫的程式,用於管理螢幕。用於定義螢幕的三個宏是DFHMSD、DFHMDI和DFHMDF。
DFHMSD
DFHMSD宏生成對映集定義。它是宏識別符號,表示我們正在開始一個對映集。對映集名稱是載入模組名稱,並且必須存在PPT表中的一個條目。下表顯示了可以在DFHMSD中使用的引數列表:
| 序號 | 引數及描述 |
|---|---|
| 1 |
TYPE TYPE用於定義對映型別。如果TYPE= |
| 2 |
MODE MODE用於指示輸入/輸出操作。如果MODE= |
| 3 |
LANG LANG = ASM/COBOL/PL1 |
| 4 |
STORAGE 如果STORAGE= |
| 5 |
CTRL CRTL用於定義裝置控制請求。如果CTRL= |
| 6 |
TERM TERM = type 確保裝置獨立性,如果使用除3270終端之外的終端,則需要此引數。 |
| 7 |
TIOAPFX TIOAPFX = YES/NO |
示例
以下示例顯示瞭如何編碼對映集定義:
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 = (行,列) |
| 2 |
LINE 它指示對映的起始行號。 |
| 3 |
COLUMN 它指示對映的起始列號。 |
| 4 |
JUSTIFY 它用於指定整個對映或對映欄位是左對齊還是右對齊。 |
| 5 |
CTRL CRTL用於定義裝置控制請求。如果CTRL= |
| 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將符號資料的輸出與物理對映合併。
物理對映
物理對映是載入庫中的載入模組,其中包含有關如何顯示對映的資訊。
它包含有關對映中所有欄位的屬性及其位置的詳細資訊。
它包含給定終端的對映的顯示格式。
它使用BMS宏進行編碼。它被單獨彙編並連結編輯到CICS庫中。
符號對映
符號對映是庫中的複製簿。CICS應用程式程式使用複製簿從終端傳送和接收資料。
它包含所有複製到程式WORKINGSTORAGE部分的可變資料。
它包含所有命名欄位。應用程式程式設計師使用這些欄位讀取和寫入對映中的資料。
跳過欄位和停止欄位
對於對映中的未受保護的命名欄位,如果我們指定了長度為10,則表示名稱欄位可以取長度不超過10的值。但是,當您使用CICS顯示此對映並在螢幕上開始輸入此欄位的值時,我們可以輸入超過10個字元,即直到螢幕末尾,我們甚至可以在下一行輸入。為了防止這種情況,我們使用跳過欄位或停止欄位。跳過欄位通常是一個長度為1的未命名欄位,位於命名欄位之後。
跳過欄位
如果我們在命名未受保護欄位之後放置一個跳過欄位,則在輸入值時,一旦達到指定的長度,游標將自動定位到下一個未受保護欄位。以下示例顯示瞭如何新增跳過欄位:
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)
屬性位元組
任何欄位的屬性位元組都儲存有關欄位物理屬性的資訊。下圖和表格解釋了每一位的含義。
| 位位置 | 描述 | 位設定 |
|---|---|---|
| 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 | 它允許將傳送命令的輸出列印到印表機上。 |
| 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 終端上顯示相同的輸入作為輸出:
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 - 應用程式程式在需要時載入到主儲存器中,並在不使用時釋放。
偽轉換技術
在偽轉換中需要注意的重要一點是在每個任務之間傳遞資料。我們將討論傳遞資料的方法。
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 時,這一點將變得清晰。下圖顯示了邏輯級別:
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 內部邏輯錯誤 |