Cics-quick-guide
CICS-概要
CICSは、オンラインアプリケーションで使用されるDB/DCシステムです。 CICSは、バッチオペレーティングシステムがバッチプログラムのみを実行できるために開発されました。 CICSプログラムは、COBOL、C、C ++、Javaなどで作成できます。 最近では、ユーザーは数秒以内にリアルタイムで情報を求めています。 このような迅速なサービスを提供するには、オンラインで情報を処理できるシステムが必要です。 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を使用して設定できます。これについては、今後のモジュールで詳しく説明します。
キーボード
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トランザクションは、アプリケーション内の論理的に関連するプログラムのコレクションです。 アプリケーション全体を論理的に複数のトランザクションに分割できます。
- 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テーブルをチェックインして、実行するプログラムの場所を見つけます。
プログラムがメモリ内ですでに使用可能な場合、その特定のプログラムの実行を開始します。そうでない場合は、プログラムをセカンダリストレージからメモリにロードし、実行を開始します。
トランザクションのライフサイクル
トランザクションのライフサイクルには、次のステップがあります-
ステップ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とパスワードを提供する必要があります。 次のスクリーンショットは、サインオン画面がどのように見えるかを示しています-
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は管理者によって提供されます。 次の出力が表示されます-
プログラムのコンパイル
次のフローチャートは、COBOL-CICSプログラムのコンパイルで使用される手順を示しています-
翻訳者
トランスレーターの機能は、CICSコマンドの構文エラーをチェックすることです。 それらを同等のCOBOLステートメントに変換します。
コンパイラ
コンパイラの機能は、COBOLコピーブックを拡張することです。 ソースコードの構文エラーをチェックした後、コードをコンパイルします。
リンケージエディター
リンケージエディタの機能は、さまざまなオブジェクトモジュールをリンクして、単一のロードモジュールを作成することです。
CICS-BMS
BMSは、基本マッピングサポートとして知られています。 アプリケーションは、端末とCICSプログラムの間のブリッジとして機能するフォーマットされた画面で構成されます。 端末とCICSプログラムとの間で通信を行うために、CICS端末入出力サービスを使用します。 BMSを使用して、適切な位置と属性を持つ画面デザインを作成します。 以下はBMSの機能です-
- BMSは、端末とCICSプログラム間のインターフェースとして機能します。
- 画面のデザインと形式は、アプリケーションのロジックとは別です。
- BMSは、アプリケーションハードウェアを独立させます。
フォーマットされた画面
以下に示す画面はメニュー画面であり、BMSを使用して設計できます。 そのキーポイントは次のとおりです-
- 画面には、タイトル、日付、および表示されるその他の情報を含めることができます。
- オプション1、2、および3は、画面のタイトルである名前のないフィールドです。
- [選択]フィールドで、入力を提供する必要があります。 この入力は、その後の処理のためにCICSプログラムに送信されます。
- 画面の下部に、アクションキーが表示されます。 *すべてのフィールドと画面自体は、BMSマクロで定義されます。 マップ全体が定義されると、JCLを使用してマップを組み立てることができます。
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 = 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は、シンボリックデータの出力を物理マップにマージします。
物理マップ
物理マップは、マップの表示方法に関する情報を含むロードライブラリ内のロードモジュールです。
- マップ内のすべてのフィールドの属性とその位置に関する詳細が含まれています。
- これには、特定の端末のマップの表示形式が含まれています。
- BMSマクロを使用してコーディングされます。 個別にアセンブルされ、CICSライブラリーにリンク編集されます。
シンボリックマップ
シンボリックマップは、ライブラリ内のコピーブックです。 コピーブックは、CICSアプリケーションプログラムが端末とのデータの送受信に使用します。
- プログラムのWORKINGSTORAGEセクションにコピーされるすべての変数データが含まれています。
- すべての名前付きフィールドがあります。 アプリケーションプログラマは、これらのフィールドを使用してデータをマップに読み書きします。
スキッパーとストッパーフィールド
保護されていない名前付きフィールドの場合、マップで長さ10を指定した場合、これは名前フィールドが長さが10を超えない値を取ることができることを意味します。 ただし、CICSを使用してこのマップを表示し、画面上のこのフィールドの値の入力を開始すると、画面の最後まで10文字以上を入力でき、次の行にも入力できます。 これを防ぐために、SkipperフィールドまたはStopperフィールドを使用します。 スキッパーフィールドは通常、名前付きフィールドの後に指定された、長さ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)
属性バイト
フィールドの属性バイトには、フィールドの物理プロパティに関する情報が格納されます。 次の図と表は、各ビットの重要性を説明しています。
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 |
これは、送信したいマップの名前です。 それが必須です。 |
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 |
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端末に同じ入力を表示するだけの変換プログラムを示しています-
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は、タスク間でデータを渡すために使用されます。 次の例は、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コマンドは、主キーを使用してファイルからデータを読み取ります。 |
2 |
書き込みコマンドは、ファイルに新しいレコードを追加するために使用されます。 |
3 |
REWRITEコマンドは、ファイルに既に存在するレコードを変更するために使用されます。 |
4 |
DELETEコマンドは、ファイルに存在するレコードを削除するために使用されます。 |
シーケンシャルアクセス
以下は、順次処理に使用されるコマンドです-
Sr.No | Commands & Description |
---|---|
1 |
STARTBRはブラウズ開始と呼ばれます。 |
2 |
STARTBRコマンドを発行しても、レコードは使用可能になりません。 |
3 |
RESETBRコマンドを使用すると、参照の途中で開始点をリセットできます。 |
4 |
ファイルの順次読み取りが終了したら、ENDBRコマンドを使用してブラウズを終了します。 |
CICS-エラー処理
CICSアプリケーションの使用中に直面する可能性のある abends およびエラーには多くのタイプがあります。 ハードウェアとソフトウェアの両方の問題が原因でエラーが発生する可能性があります。 このモジュールでエラーとエラー処理について説明します。
CICSエラー
以下は、CICSアプリケーションの実行中に発生する可能性があるCICSエラーです-
*CICSシステムで条件が正常でない場合、予想されるCICSエラーが発生します。 たとえば、特定のレコードを読み込んでいて、レコードが見つからない場合、「Not Found」エラーが発生します。* Mapfail *も同様のエラーです。 このカテゴリのエラーは、プログラム内の明示的なロジックによって処理されます。
* 論理エラーは、ゼロ除算、数値フィールドの不正な文字、トランザクションIDエラーなどのいくつかの理由により発生します。
* ハードウェアまたはその他のシステム状態に関連するエラーは、アプリケーションプログラムの制御範囲を超えています。 たとえば、ファイルへのアクセス中に入出力エラーが発生します。
エラー処理コマンド
CICSは、エラーを識別し、プログラムでエラーを処理するためのいくつかのメカニズムを提供します。 以下は、予想されるCICSエラーを処理するために使用されるコマンドです-
Sr.No | Handling Commands & Description |
---|---|
1 |
ハンドル条件は、プログラムの制御をパラグラフまたはプロシージャラベルに転送するために使用されます。 |
2 |
入出力エラーなどの何らかの理由でプログラムが異常終了した場合は、Handle Abend CICSコマンドを使用して処理できます。 |
3 |
異常終了コマンドは、タスクを意図的に終了するために使用されます。 |
4 |
Ignore Conditionは、Ignore Conditionに記載されている特定の異常終了またはエラーが発生した場合にアクションを実行しない場合に使用されます。 |
5 |
どのCICSコマンドにもハンドルは指定できません。 |
CICS-制御操作
CICSプログラム制御プログラム(PCP)は、アプリケーションプログラムのフローを管理します。 すべてのアプリケーションプログラムには、処理プログラムテーブルにエントリが必要です。 以下は、プログラム制御サービスに使用されるコマンドです-
- XCTL
- Link
- Load
- リリース
- 戻る
プログラム論理レベル
CICSの下で実行されるアプリケーションプログラムには、さまざまな論理レベルがあります。 制御を直接受け取る最初のプログラムは、最高の論理レベル、つまりレベル1です。 リンクプログラムは、リンクプログラムの次の論理レベルにあります。 XCTLプログラムは同じレベルで実行されます。 このモジュールの後半で、リンクとXCTLを使用する時期は明確です。 次の画像は、論理レベルを示しています-
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 内部論理エラー |