Page 1 of 1

How to handle a program to return by PF3 key?

PostPosted: Sun Jul 21, 2013 10:10 pm
by Mehdi shri
Dear friends
I write a program like following to link to another program.
PROCEDURE DIVISION.                                         
    PERFORM P2000-SEND-INIT-MAPS.                           
    EVALUATE TRUE                                           
        WHEN EIBAID = DFHPF5                                 
            PERFORM P1000-DO-PROG-ACCTOP                     
        WHEN EIBAID = DFHPF6                                 
            MOVE 'PRG FOR CREDIT IS NOT READY' TO M1ERORMESGO
            PERFORM G1000-SEND-MSGS-MAPS                     
    END-EVALUATE.                                           
    EXIT.                                                   
    GOBACK.
*************************************************************************
P1000-DO-PROG-ACCTOP  SECTION.                 
    EXEC CICS LINK PROGRAM  ('ACCTOPEN')       
            COMMAREA (ACCTOPEN-COMMAREA)       
            LENGTH   (ACCTOPEN-COMMAREA-LENGTH)
    END-EXEC.                                 
    EXIT.                                       

So when I press PF5 I will link to a program called ACCTOPEN by EXEC CICS LINK PROGRAM ('ACCTOPEN') command.
Now in the ACCTOPEN i have following code:
PROCEDURE DIVISION.                 
    IF  EIBAID = DFHPF2   THEN       
        PERFORM P2000-SEND-EMPT-MAPS.
    IF  EIBAID = DFHPF3   THEN       
        PERFORM X0000-EXIT-TO-LASTPG.
    EXIT.                           
    GOBACK.
*************************************************************************
X0000-EXIT-TO-LASTPG  SECTION.           
        EXEC CICS RETURN TRANSID('AC00') 
        END-EXEC.                         
    EXIT.                                 

(AC00 is the major program transaction)
When I want to return to major program I must press PF3 two times or press PF3 and then another key. THIS IS MY PROBLEM!!! How I can return to last program by pressing PF3 only once. OR when I press PF3 then PF2 I want to do "PERFORM P2000-SEND-EMPT-MAPS" but I returned to last program (or map linked to it).

Re: How to handle a program to return by PF3 key?

PostPosted: Mon Jul 22, 2013 3:24 am
by dick scherrer
Hello,

Your question appears to be in conflict with itself . . .

How I can return to last program by pressing PF3 only once. OR when I press PF3 then PF2 I want
F3 should do whatever is specified for F3. How can there be an OR?

Obviously, I misunderstand . . .

Re: How to handle a program to return by PF3 key?

PostPosted: Mon Jul 22, 2013 9:58 am
by Mehdi shri
Mr dick scherrer
I mean is that when I press PF3 I must press any PF keys one more time to doeing RETURN. But I want to RETURN upon I press the PF3 key.

Re: How to handle a program to return by PF3 key?

PostPosted: Mon Jul 22, 2013 11:52 am
by Monitor
To give you a more correct answere and a solution to your problem, I would like to see the whole logic, not just part of the program that you think is relevant. I assume the logic is pseudoconversational and the second program handles its own map with send and return transid. If this is true you should change the RETURN to an EXEC CICS XCTL(firtspgmname) to have the first program started.

Re: How to handle a program to return by PF3 key?

PostPosted: Mon Jul 22, 2013 12:35 pm
by Mehdi shri
Yes friend
This is my first program
LINKAGE SECTION.                                                 
 01  DFHCOMMAREA                PIC X(600).
****************************************************
PROCEDURE DIVISION.                                             
    PERFORM P2000-SEND-INIT-MAPS.                               
    EVALUATE TRUE                                               
        WHEN EIBAID = DFHPF5                                     
            PERFORM P1000-DO-PROG-ACCTOP                         
        WHEN EIBAID = DFHPF6                                     
            MOVE 'PRG FOR CREDIT IS NOT READY' TO FRSTMAPERORMESGO   
            PERFORM G1000-SEND-MSGS-MAPS                         
        WHEN EIBAID = DFHPF7                                     
            MOVE 'PRG FOR DEBIT IS NOT READY'  TO FRSTMAPERORMESGO   
            PERFORM G1000-SEND-MSGS-MAPS                         
        WHEN EIBAID = DFHENTER                               
            PERFORM P2000-SEND-INIT-MAPS                     
        WHEN OTHER                                           
            MOVE 'INVALID PF KEYS PRESSED'     TO FRSTMAPERORMESGO
            PERFORM G1000-SEND-MSGS-MAPS                     
    END-EVALUATE.                                           
MAIN-PROCESS-EXIT.                                           
    EXIT.                                                   
    GOBACK.
****************************************************   
P2000-SEND-INIT-MAPS            SECTION.                         
    MOVE LOW-VALUE              TO FRSTMAPO.                     
    MOVE CURRENT-TRANSACTION-ID TO FRSTMAPTRANIDO.                   
    MOVE EIBTRMID               TO FRSTMAPTERMIDO.                   
    MOVE 'Select your option'   TO FRSTMAPERORMESGO.                 
    EXEC CICS SEND MAP    (K-MAP-NAME)                           
                   MAPSET (K-MAPSET-NAME)                       
                   FROM   (FRSTMAPO)                             
                   CURSOR                                       
                   FREEKB                                       
                   ERASE                                         
    END-EXEC.                                                   
P2000-SEND-INIT-MAPS-EXIT.                                       
    EXIT.
****************************************************   
G1000-SEND-MSGS-MAPS            SECTION.           
    MOVE CURRENT-TRANSACTION-ID TO FRSTMAPTRANIDO.       
    MOVE EIBTRMID               TO FRSTMAPTERMIDO.       
    EXEC CICS SEND MAP    (K-MAP-NAME)             
                   MAPSET (K-MAPSET-NAME)           
                   FROM   (FRSTMAPO)               
                   CURSOR                           
                   FREEKB                           
                   ERASE                           
    END-EXEC.                                       
G1000-SEND-MSGS-MAPS-EXIT.                         
    EXIT.                                           
****************************************************
   P1000-DO-PROG-ACCTOP  SECTION.                     
    EXEC CICS LINK PROGRAM  ('ACCTOPEN')           
            COMMAREA (ACCTOPENCOMA-COMMAREA)           
            LENGTH   (ACCTOPENCOMA-COMMAREA-LENGTH)   
    END-EXEC.                                     
P1000-DO-PROG-ACCTOP-EXIT.                         
    EXIT.                                         



XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

And this is my secound program. (ACCTOPEN)
LINKAGE SECTION.                                                 
01  DFHCOMMAREA                     PIC X.                       
****************************************************
PROCEDURE DIVISION.                                             
    PERFORM P2000-SEND-INIT-MAPS.                               
    IF  EIBAID = DFHPF2   THEN                                   
        PERFORM P2000-SEND-EMPT-MAPS.                           
    IF  EIBAID = DFHPF3   THEN                                   
        PERFORM X0000-EXIT-TO-LASTPG.                           
MAIN-PROCESS-EXIT. 
    EXIT.           
    GOBACK.         
****************************************************
P2000-SEND-INIT-MAPS            SECTION.                       
    MOVE LOW-VALUE              TO ACCTOPENMAPO.                   
    MOVE CURRENT-TRANSACTION-ID TO ACCTOPENMAP-TRANIDO.               
    MOVE EIBTRMID               TO ACCTOPENMAP-TERMIDO.               
    MOVE SET-CURSOR-POSITION    TO ACCTOPENMAP-BRANCODE-HL.           
   MOVE 'PRESS PF4=OPEN ACCOUNT | PF2=NEW DATA | PF3=EXIT'     
   TO ACCTOPENMAP-INFOMESGO.                                         
    EXEC CICS SEND MAP    (K-MAP-NAME)                             
                   MAPSET (K-MAPSET-NAME)                         
                   FROM   (ACCTOPENMAPO)                               
                   CURSOR                                         
                   FREEKB                                         
                   ERASE                                           
    END-EXEC.                                                     
P2000-SEND-EMPT-INIT-EXIT.                                         
    EXIT.                                                         
****************************************************
P2000-SEND-EMPT-MAPS            SECTION.                       
    MOVE LOW-VALUE              TO ACCTOPENMAPO.                   
    MOVE CURRENT-TRANSACTION-ID TO ACCTOPENMAP-TRANIDO.               
    MOVE EIBTRMID               TO ACCTOPENMAP-TERMIDO.               
    MOVE SET-CURSOR-POSITION    TO ACCTOPENMAP-BRANCODE-HL.           
    MOVE 'REDAY FOR INSERT NEW DATA '
    TO ACCTOPENMAP-INFOMESGO.             
    EXEC CICS SEND MAP    (K-MAP-NAME)                         
                   MAPSET (K-MAPSET-NAME)                       
                   FROM   (ACCTOPENMAPO)                           
                   CURSOR                                       
                   FREEKB                                       
                   ERASE                                       
    END-EXEC.                                                   
P2000-SEND-EMPT-MAPS-EXIT.                                     
    EXIT.
****************************************************   

Re: How to handle a program to return by PF3 key?

PostPosted: Mon Jul 22, 2013 2:04 pm
by Monitor
I cant see any RETURN commands in the code you posted. You should do som reading on PSEUDOCONVERSATIONAL PROGRAMMING, which is the normal programming model.
Try Google and correct your programs according to what you have found. If any problem persist, we can help you.

Re: How to handle a program to return by PF3 key?

PostPosted: Mon Jul 22, 2013 6:19 pm
by Mehdi shri
Dear monitor
I was eliminated a matter section of my program in my last post. Here is complete:
This is my first program
LINKAGE SECTION.                                                 
 01  DFHCOMMAREA                PIC X(600).
****************************************************
PROCEDURE DIVISION.                                             
    PERFORM P2000-SEND-INIT-MAPS.                               
    EVALUATE TRUE                                               
        WHEN EIBAID = DFHPF5                                     
            PERFORM P1000-DO-PROG-ACCTOP                         
        WHEN EIBAID = DFHPF6                                     
            MOVE 'PRG FOR CREDIT IS NOT READY' TO FRSTMAPERORMESGO   
            PERFORM G1000-SEND-MSGS-MAPS                         
        WHEN EIBAID = DFHPF7                                     
            MOVE 'PRG FOR DEBIT IS NOT READY'  TO FRSTMAPERORMESGO   
            PERFORM G1000-SEND-MSGS-MAPS                         
        WHEN EIBAID = DFHENTER                               
            PERFORM P2000-SEND-INIT-MAPS                     
        WHEN OTHER                                           
            MOVE 'INVALID PF KEYS PRESSED'     TO FRSTMAPERORMESGO
            PERFORM G1000-SEND-MSGS-MAPS                     
    END-EVALUATE.                                           
MAIN-PROCESS-EXIT.                                           
    EXIT.                                                   
    GOBACK.
****************************************************   
P2000-SEND-INIT-MAPS            SECTION.                         
    MOVE LOW-VALUE              TO FRSTMAPO.                     
    MOVE CURRENT-TRANSACTION-ID TO FRSTMAPTRANIDO.                   
    MOVE EIBTRMID               TO FRSTMAPTERMIDO.                   
    MOVE 'Select your option'   TO FRSTMAPERORMESGO.                 
    EXEC CICS SEND MAP    (K-MAP-NAME)                           
                   MAPSET (K-MAPSET-NAME)                       
                   FROM   (FRSTMAPO)                             
                   CURSOR                                       
                   FREEKB                                       
                   ERASE                                         
    END-EXEC.                                                   
P2000-SEND-INIT-MAPS-EXIT.                                       
    EXIT.
****************************************************   
G1000-SEND-MSGS-MAPS            SECTION.           
    MOVE CURRENT-TRANSACTION-ID TO FRSTMAPTRANIDO.       
    MOVE EIBTRMID               TO FRSTMAPTERMIDO.       
    EXEC CICS SEND MAP    (K-MAP-NAME)             
                   MAPSET (K-MAPSET-NAME)           
                   FROM   (FRSTMAPO)               
                   CURSOR                           
                   FREEKB                           
                   ERASE                           
    END-EXEC.                                       
G1000-SEND-MSGS-MAPS-EXIT.                         
    EXIT.                                           
****************************************************
   P1000-DO-PROG-ACCTOP  SECTION.                     
    EXEC CICS LINK PROGRAM  ('ACCTOPEN')           
            COMMAREA (ACCTOPENCOMA-COMMAREA)           
            LENGTH   (ACCTOPENCOMA-COMMAREA-LENGTH)   
    END-EXEC.                                     
P1000-DO-PROG-ACCTOP-EXIT.                         
    EXIT.


XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

And this is my secound program. (ACCTOPEN)

LINKAGE SECTION.                                                 
01  DFHCOMMAREA                     PIC X.                       
****************************************************
PROCEDURE DIVISION.                                             
    PERFORM P2000-SEND-INIT-MAPS.                               
    IF  EIBAID = DFHPF2   THEN                                   
        PERFORM P2000-SEND-EMPT-MAPS.                           
    IF  EIBAID = DFHPF3   THEN                                   
        PERFORM X0000-EXIT-TO-LASTPG.                           
MAIN-PROCESS-EXIT. 
    EXIT.           
    GOBACK.         
****************************************************
P2000-SEND-INIT-MAPS            SECTION.                       
    MOVE LOW-VALUE              TO ACCTOPENMAPO.                   
    MOVE CURRENT-TRANSACTION-ID TO ACCTOPENMAP-TRANIDO.               
    MOVE EIBTRMID               TO ACCTOPENMAP-TERMIDO.               
    MOVE SET-CURSOR-POSITION    TO ACCTOPENMAP-BRANCODE-HL.           
   MOVE 'PRESS PF4=OPEN ACCOUNT | PF2=NEW DATA | PF3=EXIT'     
   TO ACCTOPENMAP-INFOMESGO.                                         
    EXEC CICS SEND MAP    (K-MAP-NAME)                             
                   MAPSET (K-MAPSET-NAME)                         
                   FROM   (ACCTOPENMAPO)                               
                   CURSOR                                         
                   FREEKB                                         
                   ERASE                                           
    END-EXEC.                                                     
P2000-SEND-EMPT-INIT-EXIT.                                         
    EXIT.                                                         
****************************************************
P2000-SEND-EMPT-MAPS            SECTION.                       
    MOVE LOW-VALUE              TO ACCTOPENMAPO.                   
    MOVE CURRENT-TRANSACTION-ID TO ACCTOPENMAP-TRANIDO.               
    MOVE EIBTRMID               TO ACCTOPENMAP-TERMIDO.               
    MOVE SET-CURSOR-POSITION    TO ACCTOPENMAP-BRANCODE-HL.           
    MOVE 'REDAY FOR INSERT NEW DATA '
    TO ACCTOPENMAP-INFOMESGO.             
    EXEC CICS SEND MAP    (K-MAP-NAME)                         
                   MAPSET (K-MAPSET-NAME)                       
                   FROM   (ACCTOPENMAPO)                           
                   CURSOR                                       
                   FREEKB                                       
                   ERASE                                       
    END-EXEC.                                                   
P2000-SEND-EMPT-MAPS-EXIT.                                     
    EXIT.
**************************************************** 
X0000-EXIT-TO-LASTPG  SECTION.               
        EXEC CICS RETURN TRANSID('ACMU')     
        END-EXEC.                             
X0000-EXIT-TO-LASTPG-EXIT.                   
    EXIT.                                     


Where ACMU is the first program tranaciotn ID.
Whit the must regards and thank you.

Re: How to handle a program to return by PF3 key?

PostPosted: Mon Jul 22, 2013 7:19 pm
by Monitor
You didnt read about Pseudo Conversation! Your program lacks some basics like RETURN TRANSID() COMMAREA and RECEIVE MAP, to mention some. I will not write a complete program.

Re: How to handle a program to return by PF3 key?

PostPosted: Mon Jul 22, 2013 8:15 pm
by Robert Sample
Mehdi shri, properly coded pseudo-conversational CICS programs will handle PF3 (or any other PF) key as part of the normal program logic. As Monitor indicated, your program is NOT properly coded hence there should be no surprise that it does not handle PF3 as it should.