Cics-quick-guide

提供:Dev Guides
移動先:案内検索

CICS-概要

CICSは、オンラインアプリケーションで使用されるDB/DCシステムです。 CICSは、バッチオペレーティングシステムがバッチプログラムのみを実行できるために開発されました。 CICSプログラムは、COBOL、C、C ++、Javaなどで作成できます。 最近では、ユーザーは数秒以内にリアルタイムで情報を求めています。 このような迅速なサービスを提供するには、オンラインで情報を処理できるシステムが必要です。 CICSを使用すると、ユーザーはバックエンドシステムと通信して必要な情報を取得できます。 オンラインプログラムの例には、オンラインバンキングシステム、フライト予約などが含まれます。 次の図は、CICSのコンポーネントとそれらの相互関係を示しています-

CICS概要

CICSの機能

アプリケーションでCICSによって実行される主な機能は次のとおりです-

  • CICSは、アプリケーションの同時ユーザーからの要求を管理します。
  • ただし、複数のユーザーがCICSシステムで作業していますが、ユーザーは自分が1人のユーザーのみであると感じています。
  • CICSは、アプリケーションでデータファイルを読み取りまたは更新するためのデータファイルへのアクセスを提供します。

CICSの機能

CICSの機能は次のとおりです-

  • CICSは、独自のプロセッサストレージを管理し、複数のプログラムの実行を処理する独自のタスクマネージャを備え、独自のファイル管理機能を提供するため、それ自体がオペレーティングシステムです。
  • CICSは、バッチオペレーティングシステムでオンライン環境を提供します。 送信されたジョブはすぐに実行されます。
  • CICSは、一般化されたトランザクション処理インターフェースです。
  • CICSはバックエンドのオペレーティングシステムでバッチジョブとして実行されるため、同時に2つ以上のCICS領域を持つことができます。

CICS-環境

CICS自体がオペレーティングシステムとして機能します。 その仕事は、アプリケーションプログラムのオンライン実行のための環境を提供することです。 CICSは、1つの領域、パーティション、またはアドレススペースで実行されます。 CICSは、その下で実行されるプログラムのスケジューリングを処理します。 CICSはバッチジョブとして実行され、コマンドPREFIX CICS *を発行することでスプールで表示できます。 CICSによって提供される5つの主要なサービスがあります。 これらのサービスはすべて一緒にタスクを実行します。

CICS環境

以下は、ステップごとに詳細に説明するサービスです-

  • システムサービス
  • データ通信サービス
  • データ処理サービス
  • アプリケーションプログラミングサービス
  • 監視サービス
  • システムサービス

CICSは、次のようなシステム内のリソースの割り当てまたは割り当て解除を管理する制御機能を維持します-

  • タスク制御-タスク制御は、タスクのスケジューリングとマルチタスク機能を提供します。 すべてのCICSタスクのステータスを処理します。 タスク制御は、同時CICSタスク間でプロセッサ時間を割り当てます。 これは multitasking と呼ばれます。 CICSは、最も重要なタスクへの応答時間の優先順位付けを試みます。
  • プログラム制御-プログラム制御は、アプリケーションプログラムのロードとリリースを管理します。 タスクが開始されるとすぐに、タスクを適切なアプリケーションプログラムに関連付けることが必要になります。 多くのタスクで同じアプリケーションプログラムを使用する必要がありますが、CICSはコードのコピーを1つだけメモリにロードします。 各タスクはこのコードを個別に処理するため、多くのユーザーはすべて、アプリケーションプログラムの同じ物理コピーを同時に使用するトランザクションを実行できます。
  • Storage Control -Storage Controlは、メインストレージの取得と解放を管理します。 ストレージ制御は、動的ストレージを取得、制御、および解放します。 ダイナミックストレージは、入力/出力領域、プログラムなどに使用されます。
  • 間隔制御-間隔制御はタイマーサービスを提供します。

データ通信サービス

データ通信サービスは、アプリケーションプログラムからのデータ通信要求を処理するために、BTAM、VTAM、TCAMなどの通信アクセス方式とインターフェースします。

  • CICSは、Basic Mapping Support(BMS)の使用により、端末ハードウェアの問題に対処する負担からアプリケーションプログラムを解放します。
  • CICSは、同じシステム内の複数のCICS領域が通信できるMulti Region Operation(MRO)を提供します。
  • CICSは、システム内のCICS領域が別のシステム上のCICS領域と通信できるシステム間通信(ISC)を提供します。

データ処理サービス

データ処理サービスは、BDAM、VSAMなどのデータアクセスメソッドとインターフェイスします。

  • CICSは、アプリケーションプログラムからのデータ処理要求のサービスを容易にします。 CICSは、アプリケーションプログラマに、データセットとデータベースアクセスおよび関連する操作を処理するための一連のコマンドを提供します。
  • データ処理サービスは、IMS/DB、DB2などのデータベースアクセス方法とインターフェイスします。 アプリケーションプログラムからのデータベースリクエストのサービスを促進します。
  • CICSは、同時レコード更新の制御、タスク異常終了時のデータ保護、およびシステム障害時のデータ保護により、データ整合性の管理を容易にします。

アプリケーションプログラミングサービス

アプリケーションプログラミングサービスは、アプリケーションプログラムとインターフェイスします。 CICSのアプリケーションプログラミングサービスは、コマンドレベル変換、CEDF(デバッグ機能)、CECI(コマンドインタープリター機能)などの機能を提供します。 今後のモジュールでさらに詳しく説明します。

監視サービス

監視サービスは、CICSアドレス空間内のさまざまなイベントを監視します。 システムのチューニングに使用できる一連の統計情報を提供します。

CICS-基本用語

CICSで使用される基本用語の知識がなければ、CICSがどのように機能するかをよりよく理解できます。 アプリケーションプログラムは、リモートおよびローカルの端末とサブシステムとの通信にCICSを使用します。

IBM 3270ターミナル

3270情報表示システムは、ディスプレイおよびプリンター端末のファミリーです。 IBMコントローラーを介してメインフレームに接続するために、3270端末が使用されていました。 現在、3270エミュレーションソフトウェアが利用可能になっているため、通常のPCでも3270端末として使用できます。 3270端末はダム端末であり、それ自体は処理を行いません。 すべての処理は、アプリケーションプログラムで行う必要があります。 IBM端末は、次のコンポーネントで構成されています-

CRTモニター

CRTモニターは、アプリケーションプログラムの出力または入力フィールドを表示します。 CRTモニターの3278モデルのスクリーンショットを以下に示します。 それは次の特性を持っています-

  • 1920文字を表示できます。
  • これらの1920の文字位置はそれぞれ個別にアドレス可能です。
  • COBOLアプリケーションプログラムは、画面上のすべての位置にデータを送信できます。
  • フィールドの強度、保護、非保護などの表示特性は、BMSを使用して設定できます。これについては、今後のモジュールで詳しく説明します。

CICS CRTモニター

キーボード

IBMのキーボードのキーは、次の2つのカテゴリに分かれています-

  • 非AIDキー-アルファベット、数字、句読点などの他のすべてのキー 非援助キーです。 ユーザーが非援助キーを使用してテキストまたは数字を入力すると、CICSはユーザーが何かを入力しているかどうかさえ知りません。
  • * AIDキー*-AIDキーはアテンション識別子キーと呼ばれます。 CICSは、AIDキーのみを検出できます。 すべての入力を入力した後、ユーザーがAIDキーの1つを押した場合にのみ、CICSが制御を取得します。 AIDキー:ENTER、PF1からPF24、PA1からPA3、CLEAR。 AIDキーはさらに2つのカテゴリに分かれています-
  • * PFキー*-PFキーはファンクションキーと呼ばれます。 PFキーを使用すると、端末からCICSにデータを転送できます。 PFキーはENTERおよびPF1からPF24です。
  • * PAキー*-PAキーはプログラムアクセスキーと呼ばれます。 PAキーでは、端末とCICSの間でデータを転送できません。 PAキーはPA1からPA3およびCLEARです。

CICSキーボード

トランザクション

CICSプログラムは、トランザクションを介して呼び出されます。 CICSトランザクションは、アプリケーション内の論理的に関連するプログラムのコレクションです。 アプリケーション全体を論理的に複数のトランザクションに分割できます。

  • 1〜4文字のトランザクション識別子は、ユーザーが実行したいトランザクションを識別するために使用されます。
  • プログラマーは、特定のトランザクションのすべてのアプリケーションプログラムを呼び出すために使用されるトランザクション識別子に1つのプログラムをリンクします。

Task

タスクは、ユーザーに固有の作業単位です。

  • ユーザーは、トランザクション識別子の1つを使用してアプリケーションを呼び出します。 CICSは、トランザクションIDを検索して、要求された作業を行うために最初に呼び出すプログラムを見つけます。 作業を行うタスクを作成し、言及されたプログラムに制御を移します。
  • トランザクションは、いくつかのタスクを通じて完了することができます。
  • タスクは、それを開始した端末との間でデータを送受信できます。 ファイルの読み書きができ、他のタスクも開始できます。

タスク対 トランザクション

トランザクションとタスクの違いは、複数のユーザーがトランザクションを呼び出すことができますが、各ユーザーは自分のタスクを開始することです。

LUW

LUWは論理作業単位の略です。 LUWは、作業の一部を完全に実行するか、まったく実行しないように指定しています。 タスクには、CICSの複数の論理作業単位を含めることができます。 これについては、今後のモジュールで詳しく説明します。

応用

アプリケーションは、論理的にグループ化された一連のプログラムであり、エンドユーザーの特定のタスクを完了するために使用される複数のトランザクションを形成します。

CICS-ニュークリアス

前述の5つのCICSシステムコンポーネントは、CICSシステムプログラムの便利なグループ化であり、それぞれが独自の特殊な機能を実行します。 IBMが提供するCICS制御プログラムと制御テーブルで構成されるCICS Nucleusとして知られる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はターミナル管理テーブルとして知られています。

  • CICS端末にログインすると、TCTテーブルにエントリが作成されます。
  • TCTには、現在のCICS領域に接続されている端末IDが含まれています。
  • 端末制御プログラムと端末制御テーブルは、端末からの着信データを認識します。

PCT

PCTはプログラム制御テーブルとして知られています。

  • トランザクションID(TRANSID)および対応するプログラム名またはプログラムIDが含まれています。
  • TRANSIDはPCTテーブルで一意です。

PPT

PPTは、Processing Program Tableとして知られています。 PPTには、プログラム名またはマップセット名、タスク使用カウンター、言語、サイズ、主記憶アドレス、ロードライブラリアドレスなどが含まれます。

  • プログラムまたはマップセット名は、PPTテーブル内で一意です。
  • CICSはトランザクションを受信し、対応するプログラム名がPCTからトランザクションに割り当てられます。 プログラムがロードされているかどうかをチェックします。 ロードされている場合、タスク使用カウンターは1増加します。 プログラムがロードされていない場合、プログラムが最初にロードされ、タスク使用カウンターが1に設定されます。 PPTテーブルからロードライブラリアドレスを取得します。

FCT

FCTは、ファイルコントロールテーブルとして知られています。

  • ファイル名、ファイルタイプ、レコード長などが含まれます。
  • CICSプログラムで使用されるすべてのファイルはFCTで宣言する必要があり、CICS自体によって開かれ、閉じられます。

トランザクション

トランザクションID TP02がCICS端末に入力されると、最初に、PCTテーブルにこのトランザクションIDに関連付けられたプログラムがあるかどうかがチェックされます。 見つかった場合は、PPTテーブルをチェックインして、実行するプログラムの場所を見つけます。

プログラムがメモリ内ですでに使用可能な場合、その特定のプログラムの実行を開始します。そうでない場合は、プログラムをセカンダリストレージからメモリにロードし、実行を開始します。

CICSトランザクション

トランザクションのライフサイクル

トランザクションのライフサイクルには、次のステップがあります-

CICSトランザクションライフサイクル

ステップ1

端末オペレーターは、1から4文字のtransaction-idを入力してEnterキーを押すことにより、トランザクションを開始します。

ステップ2

TCPは、すべての端末の入力を定期的にチェックします。 メッセージを受信すると、次のことを行います-

  • TIOAを作成するようにSCPに指示します。
  • TIOAにメッセージを配置します。
  • コントロールをKCPに渡します。

ステップ3

KCPはTCPから制御を取得し、次のことを行います-

  • トランザクションIDとセキュリティを検証します。
  • タスク制御領域を作成するようにSCPに指示します。
  • ターミナルの優先度(TCTで設定)、オペレーターの優先度(SNTで設定)、およびトランザクションの優先度(PCTで設定)に基づいてタスクに優先度を割り当てます。
  • 待機中のプログラムのキューにタスクを追加します。
  • 優先順位に従って待機中のプログラムをディスパッチします。
  • コントロールをPCPに渡します。

ステップ4

PCPはKCPから制御を取得し、次のことを行います-

  • 必要に応じて、プログラムを見つけてロードします。
  • コントロールをアプリケーションプログラムに転送します。

ステップ5

アプリケーションプログラムは、PCPから制御を取得し、次のことを行います-

  • プログラムのWORKING STORAGEエリアにメッセージを配置するようTCPに要求します。
  • ファイルからレコードを取得するようFCPに要求します。

ステップ6

FCPはアプリケーションプログラムから制御を取得し、次のことを行います-

  • SCPにファイル作業領域を要求します。
  • I/Oが完了するまでこのタスクを待機できることをKCPに通知します。

ステップ7

KCPは次のことを行います-

  • キュー内の次のタスクをディスパッチします。
  • I/Oが完了したら、古いタスクを再ディスパッチします。
  • コントロールをFCPに転送します。

ステップ8

FCPは、アプリケーションプログラムに制御を返します。

ステップ9

アプリケーションプログラムは次のことを行います-

  • ファイルデータを処理します。
  • TCPにI/Oメッセージの送信を要求します。
  • 制御をPCPに戻します。

ステップ10

PCPはコントロールをKCPに戻し、タスクの終了を要求します。

手順11

KCPは、タスクに割り当てられたすべてのストレージを解放するようにSCPに指示します(TIOAを除く)。

手順12

TCPは次のことを行います-

  • 出力を端末に送信します。
  • TIOAを解放するようにSCPに要求します。

CICS-トランザクション

CICSトランザクションは、CICS領域で複数の操作を実行するために使用されます。 IBMが提供する重要なCICSトランザクションについて詳しく説明します。

CESN

CESNは、CICS実行サインオンとして知られています。

  • CESNは、CICS領域にサインオンするために使用されます。
  • CICSにログオンするには、CICS管理者によって指定されたユーザーIDとパスワードを提供する必要があります。 次のスクリーンショットは、サインオン画面がどのように見えるかを示しています-

CICS CESN

CEDA

CEDAは、CICS Execute Definition and Administrationとして知られています。 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 Execute Command Interpreterとして知られています。 多くのCICSコマンドは、CECIを使用して実行できます。

  • CECIは、コマンドの構文を確認するために使用されます。 構文が正しい場合にのみ、コマンドを実行します。
  • ログインした後、空のCICS画面でCECIオプションを入力します。 使用可能なオプションのリストが表示されます。

次の例は、マップされた出力データを端末に送信する方法を示しています。 今後のモジュールでMAPSについて説明します。

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

CEDF

CEDFは、CICS実行デバッグ機能として知られています。 プログラムをステップごとにデバッグするために使用され、エラーを見つけるのに役立ちます。

CEDFと入力し、CICS領域でEnterキーを押します。 端末がEDFモードになっているというメッセージが表示されます。 トランザクションIDを入力して、Enterキーを押します。 開始後、各Enterキーを使用して、行が実行されます。 CICSコマンドを実行する前に、さらに先に進む前に値を変更できる画面が表示されます。

CMAC

CMACは、異常終了コードのCICSメッセージとして知られています。 CICS異常終了コードの説明と理由を見つけるために使用されます。

次の例は、異常終了コードの詳細を確認する方法を示しています-

CMAC abend-code

CESF

CESFは、CICS実行サインオフとして知られています。 CICS領域からサインオフするために使用されます。

次の例は、CICS領域からログオフする方法を示しています-

CESF LOGOFF

CEBR

CEBRは、CICS Execute Temporary storage Browseとして知られています。 一時記憶域キューまたは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プログラム

CICS出力画面にメッセージを表示する簡単なCOBOL-CICSプログラムを作成します。 このプログラムは、COBOL-CICSプログラムの実行に関連する手順を示すためのものです。 以下は、単純なプログラムをコーディングする手順です-

ステップ1

Mainframesにログインして、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の基本用語

以下は、今後のモジュールで使用する基本的な用語です-

Map

マップは、BMSマクロを使用して設計できる単一の画面形式です。 1〜7文字を含む名前を付けることができます。

マップセット

マップセットは、ロードモジュールを形成するために互いにリンクされているマップのコレクションです。 PPTエントリが必要です。 1〜7文字の名前を付けることができます。

BMSマクロ

BMSマップは、画面を管理するためにアセンブリ言語で書かれたプログラムです。 画面の定義に使用される3つのマクロは、DFHMSD、DFHMDI、およびDFHMDFです。

DFHMSD

DFHMSDマクロはマップセット定義を生成します。 これは、マップセットを開始していることを示すマクロ識別子です。 マップセット名はロードモジュール名であり、PPTテーブルのエントリが存在する必要があります。 次の表は、DFHMSDで使用できるパラメータのリストを示しています-

Sr.No Parameter & Description
1
  • TYPE*

TYPEは、マップタイプの定義に使用されます。 TYPE = MAP-物理マップが作成される場合DSECT-シンボリックマップが作成される&& SYSPARM-物理&シンボリック、両方が作成されるFINAL-マップセットコーディングの終わりを示します。

2

MODE

MODEは、入出力操作を示すために使用されます。 IF 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コマンドがTIOAに正しくアクセスするためのプレフィックススペース(12バイト)を予約します。 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マクロ内で使用するパラメータを示しています-

Sr.No Parameter & Description
1

SIZE

SIZE =(Line、Column)このパラメーターは、マップのサイズを示します。 BMSでは、複数のマップを使用して画面を作成できます。このパラメーターは、単一のマップセットで複数のマップを使用する場合に重要になります。

2

LINE

マップの開始行番号を示します。

3

COLUMN

マップの開始列番号を示します。

4

JUSTIFY

マップ全体またはマップフィールドを左揃えまたは右揃えに指定するために使用されます。

5

CTRL

CRTLは、デバイス制御要求を定義するために使用されます。 CTRL = FREEKBの場合-キーボードのロックを解除するにはFRSET-MDTをゼロステータスにリセットするにはALARM-画面表示時にアラームを設定するにはPRINT-プリンターに送信するマップを指定するには

6

TIOAPFX

TIOAPFX = YES/NO

YES-BOAコマンドがTIOAに正しくアクセスするためのプレフィックススペース(12バイト)を予約します。 CICSコマンドレベルに必要です。

次の例は、マップ定義をコーディングする方法を示しています-

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

DFHMDF

DFHMDFマクロは、フィールド名を定義するために使用されます。 DFHMDFマクロがコーディングされるフィールド名が記載されています。 このフィールド名はプログラム内で使用されます。 プログラム内で使用したくない定数フィールドに対してフィールド名を書き込みません。 次の表は、DFHMDFマクロ内で使用できるパラメータのリストを示しています-

Sr.No Parameter & Description
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)フィールドの属性を説明します。

スキップ-自動スキップ。 このフィールドにはデータを入力できません。 カーソルは次のフィールドにスキップします。

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文字以上を入力でき、次の行にも入力できます。 これを防ぐために、SkipperフィールドまたはStopperフィールドを使用します。 スキッパーフィールドは通常、名前付きフィールドの後に指定された、長さ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属性バイト

Bit Position Description Bit Settings
0 & 1   Determined by contents of bit 2 to 7
2 & 3 Protection & Shift 00 - Unprotected Alphanumeric 01 - Unprotected Numeric 10 - Protected Stop 11 - Protected Skip
4 & 5 Intensity 00 - Normal 01 - Normal 10 - Bright 11 - No-display ( Dark )
6   Must be Zero Always
7 Modified Data Tag 0 - Field has not been modified 1 - Field has been modified

変更されたデータタグ

変更されたデータタグ(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

次の表に、マップの送信コマンドで使用されるパラメーターとその重要性を示します。

Sr.No Parameter & Description
1
  • Map-name*

これは、送信したいマップの名前です。 それが必須です。

2

Mapset-name

マップ名を含むのはマップセットの名前です。 マップセット名は、マップ名と同じでない限り必要です。

3

FROM

別のDSECT名を使用することにした場合に使用されます。SENDMAPコマンドと共にオプションFROM(dsect-name)を使用する必要があります。

4

MAPONLY

これは、プログラムからのデータがマップにマージされず、マップ内の情報のみが送信されることを意味します。

5

DATAONLY

MAPONLYの論理的な反対です。 これを使用して、すでに作成されているディスプレイの変数データを変更します。 プログラムからのデータのみが画面に送信されます。 マップ内の定数は送信されません。

6

ERASE

送信するものが表示される前に、画面全体が消去されます。

7

ERASEUP

保護されていないフィールドのみが消去されます。

8

FRSET

フラグリセットは、画面上のすべてのフィールドの属性バイトで変更されたデータタグをオフにしてから、送信するものがそこに配置されます。

9

CURSOR

端末画面にカーソルを配置するために使用できます。 カーソルを設定するには、-1をフィールドのL部分に移動してから、マップを送信します。

10

ALARM

これにより、可聴アラームが鳴ります。

11

FREEKB.

マップまたはSENDコマンドでFREEKBを指定すると、キーボードのロックが解除されます。

12

PRINT

SENDコマンドの出力をプリンターで印刷できます。

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(マップ名)MAPSET(マップセット名)ERASE FREEKB

CICS-インターフェースブロック

アプリケーションプログラムには、CICSと対話するためのインターフェイスが必要です。 EIB(Execute Interface Block)は、アプリケーションプログラムがCICSと通信できるようにするためのインターフェイスとして機能します。 EIBには、プログラムの実行中に必要な情報が含まれています。

制限されたCOBOL動詞

CICSプログラムのコーディング中、制御を直接MVSに戻すコマンドを使用することはできません。 これらのCOBOL動詞をコーディングすると、コンパイルエラーは発生しませんが、予測できない結果が生じる可能性があります。 以下は、CICSプログラムで使用すべきでないCOBOL動詞です-

  • Open、Read、Write、Rewrite、Close、Delete、StartなどのファイルI/Oステートメント。 CICSのすべてのファイルI/Oはファイル制御モジュールによって処理され、これらのファイルには、今後のモジュールで説明するREAD、WRITE、REWRITE、DELETEなどの独自のステートメントセットがあります。
  • ファイルセクションと環境部は必要ありません。
  • Accept、Date/Timeなどのオペレーティングシステム機能を呼び出すCOBOLステートメントは使用できません。
  • DISPLAY、MERGE、STOP RUN、およびGO BACKを使用しないでください。

インターフェイスブロックの実行

実行インターフェースブロック(EIB)は、すべてのプログラムに対してCICSによって自動的にロードされる制御ブロックです。

  • EIBはタスクに固有であり、タスクの期間中存在します。 タスクに対応するシステム関連情報のセットが含まれています。
  • これには、アプリケーションプログラムの実行中にCICSによって使用されるトランザクション識別子、時刻、日付などに関する情報が含まれています。
  • タスクの一部として実行されるすべてのプログラムは、同じEIBにアクセスできます。
  • 実行時にEIBのデータを表示するには、CEDFモードでプログラムを実行します。

EIBフィールド

次の表は、EIBに存在するフィールドのリストです-

EIB Field PIC Clause Description
EIBAID X(1) Aid key Pressed
EIBCALEN S9(4) COMP It contains length of DFHCOMMAREA
EIBDATE S9(7) COMP-3 It contains Current System Date
EIBRCODE X(6) It contains Return code of the last transaction
EIBTASKN S9(7) COMP-3 It contains Task number
EIBTIME S9(7) COMP-3 It contains Current System Time
EIBTRMID X(4) Terminal Identifier
EIBTRNID X(4) Transaction Identifier

CICSプログラムの分類

CICSプログラムは、次の3つのカテゴリに分類されます。これらについては、1つずつ説明します-

  • 非会話型プログラム
  • 会話型プログラム
  • 擬似会話型プログラム-次のモジュールで説明します

非会話型プログラム

非会話型プログラムを実行している間、人間の介入は必要ありません。 プログラムの開始時に、必要なすべての入力が提供されます。

  • これらは、バッチモードで実行されるバッチプログラムに似ています。 そのため、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がWorking Storage Sectionで宣言されているCOMMAREAを渡す方法を示しています-

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

DFHCOMMAREA

DFHCOMMAREAは、CICSによってすべてのタスクに提供される特別なメモリ領域です。

  • あるプログラムから別のプログラムにデータを渡すために使用されます。 プログラムは、同じトランザクションに存在することも、異なるトランザクションに存在することもあります。
  • これは、プログラムのリンケージセクションで01レベルで宣言されています。
  • WS-COMMAREAと同じpicture句が必要です。
  • 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で使用される2種類のreturnステートメントです-

Return-1

次の無条件のreturnステートメントが発行されると、タスクとトランザクション(プログラム)は終了します。

EXEC CICS RETURN
END-EXEC.

Return-2

次の条件付きリターン、つまりTRANSIDステートメントでのリターンが発行されると、制御は、実行される次のtransidとともにCICSに戻ります。 ユーザーがAIDキーを押すと、次のトランザクションが開始されます。

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

CICS-補助キー

前のモジュールで説明したように、AIDキーはアテンション識別子キーと呼ばれます。 CICSは、AIDキーのみを検出できます。 すべての入力を入力した後、ユーザーがAIDキーの1つを押した場合にのみ、CICSが制御を取得します。 AIDキーには、ENTER、PF1からPF24、PA1からPA3、およびCLEARが含まれます。

AIDキーの検証

ユーザーが押したキーは、EIBAIDを使用してチェックされます。

  • EIBAIDは1バイト長で、3270入力ストリームで使用される実際のアテンションID値を保持します。
  • 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コピーブックを使用する方法を示しています-

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.

カーソルの配置

マップ定義で指定された位置をオーバーライドするには、2つの方法があります。

  • 1つの方法は、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(直接アクセス方式)をサポートします。 また、データベースマネージャーを使用してデータにアクセスすることもできます。

ランダムアクセス

以下は、ランダム処理に使用されるコマンドです-

Sr.No Commands & Description
1

READ

READコマンドは、主キーを使用してファイルからデータを読み取ります。

2

WRITE

書き込みコマンドは、ファイルに新しいレコードを追加するために使用されます。

3

REWRITE

REWRITEコマンドは、ファイルに既に存在するレコードを変更するために使用されます。

4

DELETE

DELETEコマンドは、ファイルに存在するレコードを削除するために使用されます。

シーケンシャルアクセス

以下は、順次処理に使用されるコマンドです-

Sr.No Commands & Description
1

STARTBR

STARTBRはブラウズ開始と呼ばれます。

2

READNEXT/READPREV

STARTBRコマンドを発行しても、レコードは使用可能になりません。

3

RESETBR

RESETBRコマンドを使用すると、参照の途中で開始点をリセットできます。

4

ENDBR

ファイルの順次読み取りが終了したら、ENDBRコマンドを使用してブラウズを終了します。

CICS-エラー処理

CICSアプリケーションの使用中に直面する可能性のある abends およびエラーには多くのタイプがあります。 ハードウェアとソフトウェアの両方の問題が原因でエラーが発生する可能性があります。 このモジュールでエラーとエラー処理について説明します。

CICSエラー

以下は、CICSアプリケーションの実行中に発生する可能性があるCICSエラーです-

 *CICSシステムで条件が正常でない場合、予想されるCICSエラーが発生します。 たとえば、特定のレコードを読み込んでいて、レコードが見つからない場合、「Not Found」エラーが発生します。* Mapfail *も同様のエラーです。 このカテゴリのエラーは、プログラム内の明示的なロジックによって処理されます。
* 論理エラーは、ゼロ除算、数値フィールドの不正な文字、トランザクションIDエラーなどのいくつかの理由により発生します。
* ハードウェアまたはその他のシステム状態に関連するエラーは、アプリケーションプログラムの制御範囲を超えています。 たとえば、ファイルへのアクセス中に入出力エラーが発生します。

エラー処理コマンド

CICSは、エラーを識別し、プログラムでエラーを処理するためのいくつかのメカニズムを提供します。 以下は、予想されるCICSエラーを処理するために使用されるコマンドです-

Sr.No Handling Commands & Description
1

Handle condition

ハンドル条件は、プログラムの制御をパラグラフまたはプロシージャラベルに転送するために使用されます。

2

Handle Abend

入出力エラーなどの何らかの理由でプログラムが異常終了した場合は、Handle Abend CICSコマンドを使用して処理できます。

3

Abend

異常終了コマンドは、タスクを意図的に終了するために使用されます。

4

Ignore Condition

Ignore Conditionは、Ignore Conditionに記載されている特定の異常終了またはエラーが発生した場合にアクションを実行しない場合に使用されます。

5

Nohandle

どのCICSコマンドにもハンドルは指定できません。

CICS-制御操作

CICSプログラム制御プログラム(PCP)は、アプリケーションプログラムのフローを管理します。 すべてのアプリケーションプログラムには、処理プログラムテーブルにエントリが必要です。 以下は、プログラム制御サービスに使用されるコマンドです-

  • XCTL
  • Link
  • Load
  • リリース
  • 戻る

プログラム論理レベル

CICSの下で実行されるアプリケーションプログラムには、さまざまな論理レベルがあります。 制御を直接受け取る最初のプログラムは、最高の論理レベル、つまりレベル1です。 リンクプログラムは、リンクプログラムの次の論理レベルにあります。 XCTLプログラムは同じレベルで実行されます。 このモジュールの後半で、リンクとXCTLを使用する時期は明確です。 次の画像は、論理レベルを示しています-

CICS制御操作

XCTL

XCTLの基本的な説明は次のとおりです-

  • XCTLコマンドは、同じレベルで1つのプログラムから別のプログラムに制御を渡すために使用されます。
  • コントロールが戻ることは期待していません。
  • 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.

このコマンドは、100バイトのデータでプログラム「PROG2」に渡される制御を転送します。 COMMAREAはオプションのパラメーターであり、渡されるデータを含む領域または結果が返される領域の名前です。

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.

リリース

リリースコマンドは、プログラムまたはテーブルをリリースするために使用されます。 以下は、リリースコマンドの構文です-

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

戻る

Returnコマンドを使用して、コントロールを次に高い論理レベルに戻します。 Returnコマンドの構文は次のとおりです-

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

間隔制御操作

間隔制御操作は、次の2つのタイプのものです-

アスクタイム

ASKTIMEは、現在の時刻または日付またはタイムスタンプを要求するために使用されます。 次に、この値をプログラム内の作業用ストレージ変数に移動します。 以下は、ASKTIMEコマンドの構文です-

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

FORMATTIME

FORMATTIMEは、オプションに基づいて、日付のYYDDD、YYMMDD、またはYYDDMMである必要な形式にタイムスタンプをフォーマットします。 DATESEPは、TIMEのTIMESEP変数と同様に、DATEの区切り文字を示します。 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によって提供される5つのストレージエリアについて説明します。

COMMAREA

COMMAREAは、同じトランザクション内または異なるトランザクションから、あるプログラムから別のプログラムにデータを渡すために使用できるスクラッチパッドのように動作します。 DFHCOMMAREA名を使用して、LINKAGE SECTIONで定義する必要があります。

共通作業エリア

CICS領域内のすべてのトランザクションは、共通作業域にアクセスできるため、その使用を決定するシステム内のすべてのトランザクションによって、その形式と使用について合意する必要があります。 CICS領域全体にあるCWAは1つだけです。

トランザクション作業領域

トランザクション作業領域は、同じトランザクションで実行されるアプリケーションプログラム間でデータを渡すために使用されます。 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コマンドで使用されるパラメータの詳細です-

  • QUEUEは、このパラメーターに記載されている名前で識別されます。
  • 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

このコマンドは、Temporary Storage Queueを削除するために使用されます。 DELETEQ TSの構文は次のとおりです-

構文

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

一時データキュー

一時データキューは、作成と削除が迅速に行えるため、本質的に一時的なものです。 順次アクセスのみが許可されます。

  • キューの内容は、読み取りが実行されると破棄されるため、一度しか読み取ることができないため、Transientという名前になります。
  • 更新できません。
  • 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-相互通信

2つ以上のシステム間で行われる相互通信は、*相互通信*と呼ばれます。

相互通信の利点

相互通信の重要な利点は次のとおりです-

  • すべてのシステムでデータを複製する必要はありません。
  • ユーザーは、保存されているデータにアクセスするために複数のシステムへの接続を保持する必要はありません。
  • アプリケーションのパフォーマンスが向上します。

基本的な用語

CICSシステムで使用される基本的な用語の知識が必要です。 以下は基本的な用語です-

ローカルシステム

ローカルシステムは、相互通信の要求を開始するシステムです。

ローカルリソース

ローカルリソースは、ローカルシステムにあるリソースです。

リモートシステム

リモートシステムは、相互通信要求の結果として開始されるシステムです。

リモートリソース

リモートリソースは、リモートシステムにあるリソースです。

MVSシスプレックス

MVS Sysplexは、複数のMVSオペレーティングシステムの構成です。 機能とプログラムを共有することにより、単一のシステムとして機能します。

CICSPlex

CICSPlexは通常、顧客のワークロードを処理する相互接続されたCICS領域のセットとして説明されます。 CICSPlexは、ターミナル、アプリケーション、リソースなどを所有する相互接続されたCICS領域のセットです。

相互通信方法

CICSが他のシステムと通信できる方法は2つあります-

  • MRO -同じMVSPLEX内の2つのCICS領域が互いに通信する必要がある場合、マルチ領域操作が使用されます。
  • ISC -ローカルサーバーのCICS領域がREMOTEサーバーのCICS領域と通信する必要がある場合、システム間通信が使用されます。

CICS-ステータスコード

CICSでの作業中に、異常終了が発生する場合があります。 以下は、問題を解決するのに役立つ一般的な異常終了コードとその説明です。

Sr.No Code & Description
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

内部論理エラー

Cics-interview-questions