Numeric field accepting characters in cics map

故事扮演 提交于 2019-12-12 01:32:04

问题


I have 4 fields in my map which are 9(6),9(3),9(3),9(3). I wrote validation code like this:

IF ROLLNUM IS NOT NUMERIC                          
MOVE DFHRED TO ROLLNUMC                         
MOVE 'INVALID DATA' TO RESMSGO                  
MOVE ROLLNUMI TO ROLLNUMO                       
PERFORM SEND-MAP THRU SEND-MAP-EXIT             
PERFORM KEY-VALIDATION THRU KEY-VALIDATION-EXIT.

But I am not getting any kind of error while inserting the values like A12AK into the database from cics. It is replacing A with 1, B with 2, and so on... Why is this happening? And how to avoid this


回答1:


Add ATTRB=(UNPROT,NUM,FSET,IC) to the DFHMDF fields of the BMS mapset for the numeric fields.

You'll also need JUSTIFY=(RIGHT,ZERO).




回答2:


Gilbert is giving you good advice on fixing your CICS map. Take it!

Let me try to explain the "strange" values...

When a character (PIC X) is placed in a PIC 9 data item the upper 4 bits of the byte representing the character value are overwitten with 'F'x. The lower 4 bits are left as-is.

At this point it might be useful to look at an EBCDIC character chart

Notice that the hex representation of an 'A' is 'C1'x and 1 is 'F1'x. When an 'A' is moved to a PIC 9 field it becomes a 1 (the upper 4 bits, 'C'x, are replaced with 'F'x, the lower 4 bits are left as-is). Similar type of thing for all letters of the alphabet. Notice that the EBCDIC character sequence for 'A' through 'Z' is not contiguous (there are gaps when the lower 4 bits roll into the 'A'x - 'F'x range). This is why you will always get a 'valid' digit when moving a letter from an 'X' type to a '9' type field.

The result is a valid numeric value after a move from an 'X' to '9' type data item when only digits, letters and SPACE are involved. This will then pass an IF NUMERIC test.

The root of your problem is that your CICS map allows for non numeric data entry, when that value is transferred to your working storage item defined as PIC 9 it is converted as described above. Not what you want! As Gilbert pointed out, if you define the CICS map field as 'NUM' the only valid characters the user can enter are digits, which solves your problem.

Finally, notice that some non alpha characters, such as '@' will not coherse into a valid digit.




回答3:


CICS also offers the BIF DEEDIT option.



来源:https://stackoverflow.com/questions/10385065/numeric-field-accepting-characters-in-cics-map

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!