精通COBOL--16.6.3 MAP的应用

  在COBOL中对MAP的应用,主要可分为发送MAP和接受MAP两种情况。其中发送MAP就是将MAPCICS屏幕中显示出来。发送MAP时可选择只发送物理MAP还是只发送符号MAP。其中只发送物理MAP的代码如下:

EXEC  CICS  SEND  MAP(‘TESTMA’)

                      MAPSET(‘MAPSETA’)

                      MAPONLY                                        /*此处指定只发送物理MAP*/

                      END-EXEC.

只发送符号MAP的代码如下:

EXEC  CICS  SEND  MAP(‘TESTMA’)

                      MAPSET(‘MAPSETA’)

                      DATAONLY                                      /*此处指定只发送符号MAP*/

                      END-EXEC.

如果不指定“MAPONLY”和“DATAONLY”选项,CICS将把物理MAP和符号MAP合并发送。同时,在实际发送MAP中,通常还会指定一些其他选项,如清屏、释放存储空间、指定光标位置等。以下为通常对整个MAP进行发送的代码:

EXEC   CICS  SEND  MAP(‘TESTMA’)

                       MAPSET(‘MAPSETA’)

                       CURSOR(720)

                       ERASE

                       FREEKB

                       END-EXEC

对于MAP的接受,主要是用于接受用户在MAP中输入的数据。这些数据实际上存放在符号MAP的变量中。以下为接受MAP的代码,其中涉及到对接受时的异常捕获:

EXEC  CICS   RECEIVE  MAP(‘TESTMA’)

                          MAPSET(‘MAPSETA’)

                          RESP(RCVERR)

                          END-EXEC

下面程序综合应用了MAP的发送和接受。当用户在MAP中输入完成数据时,该数据将高亮显示,同时输出相应提示信息。需要注意的是,此处使用了伪会话,但作为一个单独的程序,并没利用到参数传递的功能。假设该程序对应的交易为“TRMP”,则程序代码如下:

IDENTIFICATION  DIVISION.

PROGRAM-ID.  MAPPGM.                                 

*

 ENVIRONMENT  DIVISION.

*

 DATA  DIVISION.

 WORKING-STORAGE  SECTION.

 01   RCVERR        PIC S9(8)   COMP.

 01   COM-FLDS.

      05   T-CODE    PIC  X(10).

      05   T-NAME       PIC  X(20).

 COPY  DFHAID.

 COPY  DFHBMSCA.

 COPY  MAPSETA.

 LINKAGE  SECTION.

 01  DFHCOMMAREA.

     05  C-CODE  PIC  X(10).

     05  C-NAME     PIC  X(20).

*

 PROCEDURE  DIVISION.

       IF  EIBCALEN  =  0

           EXEC  CICS  SEND  MAP(‘TESTMA’)

                                 MAPSET(‘MAPSETA’)

                                 MAPONLY

                                 ERASE

                                 FREEKB

                                 END-EXEC

           EXEC  CICS   RETURN  TRANSID(‘TRMP’)

                                     COMMAREA(COM-FLDS)

                                     LENGTH(30)

                                     END-EXEC.

*

       IF  EIBAID  =  DFHCLEAR 

           MOVE  LOW-VALUES  TO  TESTMAO

           MOVE  ‘CLEAR KEY PRESSED: SESSION ENDED’  TO  MSGO

           EXEC  CICS  SEND    MAP(‘TESTMA’)

                                   MAPSET(‘MAPSETA’)

                                   DATAONLY

                                   FREEKB

                                   END-EXEC

           EXEC  CICS  RETURN  END-EXEC.

*

       IF  EIBAID  =  DFHENTER

            EXEC  CICS   RECEIVE  MAP(‘TESTMA’)

                                      MAPSET(‘MAPSETA’)

                                      RESP(RCVERR)

                                      END-EXEC

            IF  RCVERR  =  DFHRESP(MAPFAIL)

                    PERFORM  100-ERROR-ROUTINE.

            MOVE  CODEI  TO  CODEO

            MOVE  NAMEI   TO  NAMEO

            MOVE  DFHBMBRY  TO  CODEA

            MOVE  DFHBMBRY  TO  NAMEA

            MOVE  ‘SESSION  COMPLETED!’  TO  MSGO

            EXEC  CICS  SEND    MAP(‘TESTMA’)

                                    MAPSET(‘MAPSETA’)

                                    DATAONLY

                                    FREEKB

                                    END-EXEC

            EXEC  CICS  RETURN  END-EXEC.

                GOBACK.

*

 100-ERROR-ROUTINE.

MOVE  ‘PLS  ENTER  DATA’  TO  MSGO

            EXEC  CICS  SEND  MAP(‘TESTMA’)

                                  MAPSET(‘MAPSETA’)

                                  DATAONLY

                                  FREEKB

                                  END-EXEC

            EXEC  CICS   RETURN  TRANSID(‘TRMP’)

                                      COMMAREA(COM-FLDS)

                                      LENGTH(30)

                                      END-EXEC.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值