2017-09-21 4 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

은 화면에지도를 보내고 DFHCOMMAREA에 저장 될 때 어떤지도가 전송되는지 나타내는 것으로 설정되어 있기 때문에 정상적으로 표시됩니다.

일반적으로 의사 대화식 CICS 트랜잭션의 초기 프로그램 작성 방법은 EIBCALEN = 0을 점검하여 이것이 트랜잭션의 초기 호출임을 나타냅니다. EIBCALEN (CALEN은 Communication Area LENgth의 약자입니다.)은 EIB (실행 인터페이스 블록)의 필드로, 트랜잭션의 초기 프로그램 (DFHEIBLK)에 자동으로 전달되어 프리 컴파일러 또는 보조 프로세서에 의해 Linkage Section에 삽입됩니다 당신이 사용하는 어느 곳이라도). EIB에는 거래 컨텍스트를 설명하는 여러 필드가 있습니다.

WS-COMMAREA을 초기화하는 경우 처음지도를 보내고 전송 한지도의 표시기를 CURRENT-MAP-SCREENEXEC CICS RETURN TRANSID(EIBTRNID) COMMAREA(WS-COMMAREA) LENGTH(...)에 저장하십시오.

트랜잭션의 초기 프로그램에는 자동으로 DFHCOMMAREA에 대한 포인터가 전달되며 프리 컴파일러 또는 보조 프로세서 (사용중인 경우)를 통해 Linkage Section에 자동으로 삽입됩니다. DFHCOMMAREA은 트랜잭션 호출간에 CICS에 의해 사용자를 대신하여 보존됩니다.

EIBCALEN NOT = 0이면 을 확인하고 을 확인하십시오.

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'에 저장했는데 문제가 있습니까? 그러나 이해합니다. 채널과 컨테이너를 살펴볼 것입니다. 감사. –

관련 문제