Числовое поле, принимающее символы в карте cics

У меня на карте 4 поля: 9(6),9(3),9(3),9(3). Я написал код проверки следующим образом:

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.

Но я не получаю никаких ошибок при вставке таких значений, как A12AK, в базу данных из cics. Это замена А на 1, Б на 2 и так далее... Почему это происходит? И как этого избежать


person Pramod    schedule 30.04.2012    source источник
comment
Указываете ли вы ATTRB=(UNPROT,NUM) в полях DFHMDF набора карт BMS для числовых полей?   -  person Gilbert Le Blanc    schedule 30.04.2012
comment
@Gilber Le Blanc Нет. Я дал так: ATTRB=(UNPROT,FSET,IC),PICIN='9(6)',LENGTH=6   -  person Pramod    schedule 30.04.2012
comment
Добавьте NUM и посмотрите, решит ли это вашу проблему.   -  person Gilbert Le Blanc    schedule 30.04.2012


Ответы (3)


Добавьте ATTRB=(UNPROT,NUM,FSET,IC) к полям DFHMDF набора карт BMS для числовых полей.

Вам также понадобится JUSTIFY=(RIGHT,ZERO).

person Gilbert Le Blanc    schedule 30.04.2012

Гилберт дает вам хороший совет по исправлению вашей карты CICS. Возьми это!

Попробую объяснить "странные" значения...

Когда символ (PIC X) помещается в элемент данных PIC 9, верхние 4 бита байта, представляющего значение символа, замещаются 'F'x. Младшие 4 бита оставляются как есть.

На этом этапе может быть полезно взглянуть на таблицу символов EBCDIC.

Обратите внимание, что шестнадцатеричное представление «A» — это «C1»x, а 1 — это «F1»x. Когда 'A' перемещается в поле PIC 9, он становится 1 (старшие 4 бита, 'C'x, заменяются на 'F'x, младшие 4 бита оставляются как есть). Подобные вещи для всех букв алфавита. Обратите внимание, что последовательность символов EBCDIC от 'A' до 'Z' не является непрерывной (есть пробелы, когда младшие 4 бита переходят в диапазон от 'A'x до 'F'x). Вот почему вы всегда будете получать «действительную» цифру при перемещении буквы из поля типа «X» в поле типа «9».

Результатом является допустимое числовое значение после перехода от элемента данных типа «X» к элементу данных «9», когда задействованы только цифры, буквы и ПРОБЕЛ. Затем он пройдет тест IF NUMERIC.

Корень вашей проблемы заключается в том, что ваша карта CICS позволяет вводить нечисловые данные, когда это значение передается в ваш элемент рабочего хранилища, определенный как PIC 9, оно преобразуется, как описано выше. Не то, что вы хотите! Как указал Гилберт, если вы определяете поле карты CICS как «ЧИСЛО», единственными допустимыми символами, которые пользователь может вводить, являются цифры, что решает вашу проблему.

Наконец, обратите внимание, что некоторые небуквенные символы, такие как '@', не будут соответствовать допустимой цифре.

person NealB    schedule 30.04.2012

CICS также предлагает опцию BIF DEEDIT.

person Joe Zitzelberger    schedule 01.05.2012