CICS的基本结构和命令

1. 映射表(Map/Mapset)的属性(Attribute)字节

1. 第一列总不会被实质内容占据;最多是属性字节。所以实质内容总最多从第二列开始。

2. 每个映射域均要以一个属性字节起始。

3. 输入域(UNPROT)还要以一个属性字节结束,而这个属性字节应当为ASKIP。

属性字节排布:

比特位置 功能 比特设置
0-1 根据2~7比特  
2-3 保护性和转移

00 = UNPROT ALPHANUM (左对齐)
01 = UNPROT NUM (NUM开,右对齐)
10 = PROT
11 = SKIP

4-5 亮度

00 = 普通
01 = 普通
10 = 高亮
11 = 黑(无显示)

6   必须为0
7 MDT 1表示更改过

另有扩展属性,用于如颜色,高亮,输入预审等

一个MAP中的域(例如名叫USERNME)对应COBOL(Symbolic Map符号映射)的变量包括

注,此处用比较接近的ABAP源码框显示COBOL代码

1 USERNMEI   PIC ...      // 输入
2 USERNMEO   PIC ...      // 输出,其实是和输入重叠的
3 USERNMEL   PIC S9(4) COMP.  // 长度; -1可以设光标
4 USERNMEF   PIC X.       // 0x80如果用户修改了输入域但没有录入数据;否则一般为Low-value
5 FILLER REDEFINES USERNMEF.
6    USERNMEA   PIC X.   // 可见属性字节A和标记字节F是重叠的,它是用来设置并送出MAP的
7 USERNMEC   PIC X.      // 色彩扩展属性,只有DSATTS=COLOR开启时才有
8 USEENMEH   PIC X.      // 高亮扩展属性,只有DSATTS=HILIGHT开启才有

关于程序发送MAP的一些模式,详见附加的CICS命令和编程方法

2. 典型的MAPSET实例

 1          PRINT NOGEN                                // 表示开始,告诉汇编器不要打印展开后语句
 2 GLMS6H1  DFHMSD TYPE=&SYSPARM,                                         X // 整个MAPSET
 3                LANG=COBOL,                                             X // 用COBOL语言
 4                MODE=INOUT,                                             X
 5                TERM=3270-2,                                            X
 6                CTRL=FREEKB,                                            X
 7                STORAGE=AUTO,                                           X
 8 // 这两行开启扩展属性使得能够用颜色等特性               
 9                DSATTS=(COLOR,HILIGHT),                                 X   
10                MAPATTS=(COLOR,HILIGHT),                                X   
11                TIOAPFX=YES
12 ***********************************************************************
13 GLMS6H1  DFHMDI SIZE=(24,80),                                          X // 覆盖整个界面
14                LINE=1,                                                 X
15                COLUMN=1
16 ***********************************************************************
17          DFHMDF POS=(1,1),                                             X // 第2列开始
18                LENGTH=7,                                               X // 长度7
19                ATTRB=(NORM,PROT),                                      X // 只读;常规亮度
20                COLOR=BLUE,                                             X // 内容
21                INITIAL='GLMS6H1'
22          DFHMDF POS=(1,20),                                            X
23                LENGTH=20,                                              X
24                ATTRB=(NORM,PROT),                                      X
25                COLOR=GREEN,                                            X
26                INITIAL='Customer Maintenance'
27 TRANID1  DFHMDF POS=(1,76),                                            X
28                LENGTH=4,                                               X
29                ATTRB=(NORM,PROT),                                      X
30                COLOR=BLUE,                                             X
31                INITIAL='GL6H'
32 ***********************************************************************
33 INSTR1   DFHMDF POS=(3,1),                                             X
34                LENGTH=64,                                              X
35                ATTRB=(NORM,PROT),                                      X
36                COLOR=GREEN,                                            X
37                INITIAL='Type a customer number.  Then select an action X
38                and press Enter.'
39 ***********************************************************************
40          DFHMDF POS=(5,1),                                             X
41                LENGTH=24,                                              X
42                ATTRB=(NORM,PROT),                                      X
43                COLOR=GREEN,                                            X
44                INITIAL='Customer number. . . . .'
45 CUSTNO1  DFHMDF POS=(5,26),                                            X
46                LENGTH=7,                                               X
47 // UNPROT表示输入域,FSET表示MDT总开启于是数据总送回程序
48 
49                ATTRB=(NORM,UNPROT,FSET,IC),                            X 
50                COLOR=TURQUOISE,                                        X
51                HILIGHT=UNDERLINE                                         // 使用实际底线
52                DFHMDF POS=(5,34),                                      X // 输入域结尾
53                LENGTH=1,                                               X // 长度总为1
54                ATTRB=ASKIP                                               // 总是跳转记号
55 ***********************************************************************
56          DFHMDF POS=(7,1),                                             X
57                LENGTH=24,                                              X
58                ATTRB=(NORM,PROT),                                      X
59                COLOR=NEUTRAL,                                          X
60                INITIAL='Action . . . . . . . . .'
61 ACTION   DFHMDF POS=(7,26),                                            X
62                LENGTH=1,                                               X
63                ATTRB=(NORM,UNPROT,FSET),                               X
64                COLOR=TURQUOISE,                                        X
65                HILIGHT=UNDERLINE
66          DFHMDF POS=(7,28),                                            X
67                LENGTH=21,                                              X
68                ATTRB=(NORM,PROT),                                      X
69                COLOR=NEUTRAL,                                          X
70                INITIAL='1. Add a new customer'
71 ***********************************************************************
72          DFHMDF POS=(8,28),                                            X
73                LENGTH=30,                                              X
74                ATTRB=(NORM,PROT),                                      X
75                COLOR=NEUTRAL,                                          X
76                INITIAL='2. Change an existing customer'
77 ***********************************************************************
78          DFHMDF POS=(9,28),                                            X
79                LENGTH=30,                                              X
80                ATTRB=(NORM,PROT),                                      X
81                COLOR=NEUTRAL,                                          X
82                INITIAL='3. Delete an existing customer'
83 ***********************************************************************
84 MSG1     DFHMDF POS=(23,1),                                            X
85                LENGTH=79,                                              X
86                COLOR=YELLOW,                                           X
87                ATTRB=(BRT,PROT)                                          // BRT表示高亮
88          DFHMDF POS=(24,1),                                            X
89                LENGTH=20,                                              X
90                ATTRB=(NORM,PROT),                                      X
91                COLOR=BLUE,                                             X
92                INITIAL='F3=Exit F12=Cancel'
93 DUMMY    DFHMDF POS=(24,79),                                           X
94                LENGTH=1,                                               X
95                ATTRB=(DRK,PROT,FSET),                                  X
96                INITIAL=' '
97 ***********************************************************************
98          DFHMSD TYPE=FINAL                                              // MAPSET结束
99                END                                                      // 汇编终止

3. 映射表交换

1 EXEC CICS
2     RECEIVE MAP('INQMAP1')     // 映射名称
3             MAPSET('INQSET1')  // 映射集名称
4             INTO(INQMAP1I)     // 屏幕数据对应的域
5 END-EXEC.

映射表发送可见附加的CICS命令和编程方法

4. VSAM文件读取

1 EXEC CICS
2     READ  FILE(filename)         // VSAM文件名,在CICS中定义
3           INTO(data-name)        // 将读得的记录放入变量
4           RIDFLD(data-name)      // 含有记录ID的变量
5           [UPDATE]               // 该记录用于更新(后接REWRITE/DELETE,就对这个记录操作)
6           [RESP(response-code)]  // 返回响应值
7 END-EXEC

常见返回值条件测试

1 IF RESPONSE-CODE = DFHRESP(NORMAL)
2 IF RESPONSE-CODE = DFHRESP(NOTFND)

5. VSAM文件写入

添加记录

1 WRITE FILE(DATASET-NAME)
2       FROM(RECORD-NAME)
3       RIDFLD(ID)
4       RESP(RESPONSE-CODE)

覆盖到UPDATE模式READ的记录上

1 REWRITE FILE(DATASET-NAME)
2         FROM(RECORD)
3         RESP(RESPONSE-CODE)

常见返回条件:

IF RESONSE-CODE = DFHRESP(DUPREC)

6. VSAM文件记录删除

1 DELETE FILE(DATASET-NAME) RESP(RESPONSE-CODE)

7. 返回

1 EXEC CICS
2     RETURN TRANSID(INQ1)
3            COMMAREA(COMMUNICATION-AREA) // 将WORKING-STORAGE中的本次操作的数据再放回到跨执行区
4 END-EXEC.

 

8. 平行转移

1 EXEC CICS
2     XCTL PROGRAM('INVMENU')  // 程序名,定义在COBOL的PROGRAM-ID,并在CICS同名注册
3 END-EXEC.

9. 进一级调用

1 EXEC CICS
2     LINK  PROGRAM(program-name)              // 程序名,定义在COBOL的PROGRAM-ID,并在CICS中同名注册
3           [COMMAREA(data-name)]              // 同转移跨执行数据
4           [DATALENGTH(data-name | literal)]  // 指定跨执行数据长度
5 END-EXEC

要不是看在CICS/COBOL有一把年纪了,否则这样的语言叫人见了就想抽它两耳刮子(ABAP?)

 

posted @ 2011-11-23 12:08  quanben  阅读(1013)  评论(0编辑  收藏  举报