2017-09-21 6 views
2

私はちょうどメインフレームの開発に入っていますので、何の無知を言い訳になりますが、表示されているマップや最後に端末に送られたマップを特定する方法はありますか?例えば現在表示されているマップはどれですか?

、私はマップセットMAPSMAP1 & MAP2を持っています。地図は、PFキー(PF7/PF8)を押すことによって交代する。各マップ上で、ユーザはプログラム(SLCTOPTI)によって評価されるべき値を入力することができる。ユーザーから受け取ったときに評価するマップを決定する適切な方法はありますか?これはまだ動作しますが、私はすでにこのためのコマンドまたは行うには良い方法があるかどうかを知りたい場合は

** some code before ** 

WHEN DFHENTER            
+0103                   

%+0104        IF CURRENT-MAP-SCREEN = 1     

%+0104         EXEC CICS RECEIVE     
%+0104           MAP ('MAP1')      
%+0104           INTO (MAP1I)      
%+0104           RESP (WS-RESP)     
%+0104         END-EXEC        
%+0104        ELSE          
%+0104         EXEC CICS RECEIVE      
%+0104           MAP ('MAP2')      
%+0104           INTO (MAP2I)      
%+0104           RESP (WS-RESP)     
%+0104         END-EXEC        
%+0104        END-IF          
+0103                   
%+0104        EVALUATE SLCTOPTI       
+0103                   
%+0104         WHEN ' 1'        
%+0104         WHEN '01'        
%+0104         WHEN '1'        
+0103                   
%+0104           MOVE 'XXXX' TO WS-START-TRAN  
%+0104                   
%+0104         WHEN ' 2'        
%+0104         WHEN '02'        
%+0104         WHEN '2'         
+0103                   
%+0104           MOVE 'XXXX' TO WS-START-TRAN  

** some code after ** 

私はよく分からない:ここでは

は、私は現在、これをしようとしているかですそれ。

答えて

4

推定値CURRENT-MAP-SCREENは、マップを画面に送信したときに送信されている地図を示し、DFHCOMMAREAに格納されていることを示しています。

通常、擬似会話型CICSトランザクションの初期プログラムの記述方法は、これがトランザクションの最初の呼び出しであることを示すEIBCALEN = 0をチェックすることです。 EIBCALEN(CALENはCommunication Area LENgthの略語です)は、トランザクションの初期プログラム(DFHEIBLK)に自動的に渡され、プリコンパイラまたはコプロセッサのいずれかによってLinkage Sectionに挿入されるEIB(Execute Interface Block)のフィールドです。どちらを使用していても)。 EIBには、トランザクションのコンテキストを説明するいくつかのフィールドが含まれています。

WS-COMMAREAを初期化することがわかっている場合は、最初のマップを送信し、CURRENT-MAP-SCREENEXEC CICS RETURN TRANSID(EIBTRNID) COMMAREA(WS-COMMAREA) LENGTH(...)で送信したマップのインジケータを保存します。

トランザクションの初期プログラムには、DFHCOMMAREAへのポインタも自動的に渡されます。また、プリコンパイラまたはコプロセッサ(どちらを使用していても)によってLinkage Sectionに自動的に挿入されます。 DFHCOMMAREAは、トランザクションの呼び出しの間にCICSによって保持されます。

EIBCALEN NOT = 0あなたがMOVE DFHCOMMAREA TO WS-COMMAREAを知っていればCURRENT-MAP-SCREENにチェックし、RECEIVEの地図を確認してください。

EXEC CICS RETURN TRANSID(EIBTRNID) COMMAREA(WS-COMMAREA) LENGTH(...)とすると、保存するデータをCICSに提供し、次回の呼び出し時にDFHCOMMAREAにトランザクションの初期プログラムに戻します。 EXEC CICS RETURNが発生すると、ワーキングストレージとローカルストレージに割り当てられたメモリが解放されます。

人々のためには非常に一般的であり、MOVE DFHCOMMAREA TO WS-COMMAREAです。そして、ワーキングストレージのデータのコピーを処理します。 EIBCALEN = 0これはもちろんありません。移動するデータはありません。

一部のショップでは、現在表示されているマップを把握する必要がなくなるように、プログラムとマップの間に1対1の関係があります。

講義の後半で、講師はDFHCOMMAREAの代わりにチャンネルとコンテナの使用について話します。後者は、CICSアプリケーションが何十年にもわたって構築された方法です。したがって、このように書かれたコードを確実に見ることができます。前者は新しい機能です。

+0

はい、どのマップが送信されているかを示すために使用されますが、それを 'WS-COMMAREA'に格納していますが、これは問題になりますか?しかし、私はチャネルとコンテナのいくつかを調べ始めることを理解しています。ありがとう。 –

関連する問題