2017-09-21 4 views
2

Je suis en train d'entrer dans le développement de l'ordinateur central afin excuse toute ignorance, mais est-il un moyen d'identifier quelle carte est affichée ou dernière a été envoyé au terminal? Par exemple, j'ai MAP1 & MAP2 dans le jeu de cartes MAPS. Les cartes alterneraient en appuyant sur une touche PF (PF7/PF8). Sur chaque carte, l'utilisateur peut entrer une valeur à évaluer par le programme (SLCTOPTI). Existe-t-il un moyen approprié de déterminer quelle carte doit être évaluée lors de la réception de l'utilisateur?Quelle carte est actuellement affichée?

Voici ce que j'ai actuellement pour tenter ceci:

** 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 ** 

Je ne sais pas si cela fonctionne encore, mais je voudrais savoir s'il y a déjà une commande pour ce ou une meilleure façon de le faire il.

Répondre

4

En supposant que CURRENT-MAP-SCREEN est configuré pour indiquer quelle carte est envoyée lorsque vous envoyez la carte à l'écran et qu'elle est stockée dans votre DFHCOMMAREA, voici comment je le vois normalement.

Normalement, la façon dont un programme initial de transaction CICS de pseudo-conversation est écrit est de vérifier EIBCALEN = 0 qui indique qu'il s'agit de l'invocation initiale de la transaction. EIBCALEN (le CALEN est l'abréviation de la zone de communication LENgth) est un champ dans le EIB (le bloc d'interface Execute) qui est automatiquement passé au programme initial de votre transaction (DFHEIBLK) et inséré dans votre Linkage Section par le précompilateur ou le coprocesseur (celui que vous utilisez). Le EIB contient un certain nombre de champs décrivant le contexte de votre transaction.

Si vous connaissez EIBCALEN = 0 initialiser votre WS-COMMAREA, envoyez votre carte initiale, stocker l'indicateur dont vous associez envoyé à CURRENT-MAP-SCREEN et EXEC CICS RETURN TRANSID(EIBTRNID) COMMAREA(WS-COMMAREA) LENGTH(...).

Le programme initial de votre transaction est également passé automatiquement un pointeur sur le DFHCOMMAREA, également automatiquement inséré dans votre Linkage Section par le précompilateur ou le coprocesseur (selon celui que vous utilisez). Le code DFHCOMMAREA est conservé en votre nom par CICS entre les invocations de votre transaction.

Si EIBCALEN NOT = 0 vous savez à MOVE DFHCOMMAREA TO WS-COMMAREA et de vérifier CURRENT-MAP-SCREEN pour voir quelle carte à RECEIVE.

Lorsque vous EXEC CICS RETURN TRANSID(EIBTRNID) COMMAREA(WS-COMMAREA) LENGTH(...) vous fournissez à CICS les données à conserver et les renvoyez au programme initial de votre transaction au DFHCOMMAREA lors de son invocation suivante. La mémoire allouée pour votre Working-Storage et Local-Storage est libérée une fois que le EXEC CICS RETURN se produit.

Il est très fréquent que les gens MOVE DFHCOMMAREA TO WS-COMMAREA puis travailler avec la copie des données dans leur travail-stockage. Si EIBCALEN = 0 vous ne le faites pas bien sûr, il n'y a pas de données à déplacer.

Certains magasins essayer d'avoir une relation 1: 1 entre les programmes et les cartes afin d'éliminer la nécessité de garder une trace dont la carte est affichée.

Espérons que plus tard dans vos études, votre instructeur parler de l'utilisation des canaux et des conteneurs au lieu du DFHCOMMAREA.Ce dernier est la façon dont les applications CICS ont été construites pendant plusieurs décennies, donc vous verrez certainement le code écrit de cette façon, le premier est une capacité plus récente.

+0

Oui, il est utilisé pour indiquer quelle carte est envoyée, mais je l'ai stocké dans 'WS-COMMAREA', est-ce que ce serait un problème? Mais je comprends, je vais commencer à regarder dans les canaux et les conteneurs certains. Merci. –