db2 - tener - Caracteres numéricos que aceptan caracteres en el mapa cics
meta description seo (3)
Tengo 4 campos en mi mapa que son 9 (6), 9 (3), 9 (3), 9 (3). Escribí un código de validación como este:
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.
Pero no estoy obteniendo ningún tipo de error al insertar los valores como A12AK en la base de datos de cics. Está reemplazando A con 1, B con 2, y así sucesivamente ... ¿Por qué está sucediendo esto? Y cómo evitar esto
Agregue ATTRB = (UNPROT, NUM, FSET, IC) a los campos DFHMDF del conjunto de mapas BMS para los campos numéricos.
También necesitarás JUSTIFY = (RIGHT, ZERO).
Gilbert te está dando buenos consejos para arreglar tu mapa de CICS. ¡Tómalo!
Déjame intentar explicar los valores "extraños" ...
Cuando se coloca un carácter ( PIC X
) en un elemento de datos PIC 9
, los 4 bits superiores del byte que representan el valor del carácter se sobreescriben con ''F''x. Los 4 bits inferiores se dejan como están.
En este punto, puede ser útil mirar un gráfico de caracteres EBCDIC
Observe que la representación hexadecimal de una ''A'' es ''C1''x y 1 es'' F1''x. Cuando una ''A'' se mueve a un campo PIC 9
se convierte en un 1 (los 4 bits superiores, ''C''x, se reemplazan por'' F''x, los 4 bits inferiores se dejan tal como están). Tipo similar de cosas para todas las letras del alfabeto. Observe que la secuencia de caracteres EBCDIC para ''A'' a ''Z'' no es contigua (hay espacios vacíos cuando los 4 bits más bajos pasan al rango ''A''x -'' F''x). Esta es la razón por la que siempre obtendrá un dígito "válido" al mover una letra de un tipo de letra "X" a un campo de tipo "9".
El resultado es un valor numérico válido después de pasar de un elemento de datos de tipo "X" a "9" cuando solo están involucrados dígitos, letras y ESPACIO. Esto luego pasará una prueba IF NUMERIC
.
La raíz de su problema es que su mapa CICS permite la entrada de datos no numéricos, cuando ese valor se transfiere a su elemento de almacenamiento definido como PIC 9
, se convierte como se describió anteriormente. ¡No es lo que quieres! Como señaló Gilbert, si define el campo del mapa CICS como ''NUM'', los únicos caracteres válidos que el usuario puede ingresar son dígitos, lo que resuelve su problema.
Finalmente, observe que algunos caracteres que no son alfa, como ''@'' no se unirán en un dígito válido.
CICS también ofrece la opción BIF DEEDIT.