메뉴 건너뛰기

SAP 한국 커뮤니티



PSA -> DSO, DSO -> CUBE : HEX CODE

십년만에 2011.07.09 21:41 조회 수 : 7303

제목이 좀 어색하긴 하지만 지금은 딱히 붙힐 제목이 없어서 일단 저렇게 합니다. ^^.

 

1. PSA 에서 DSO 로 CHARACTERISTICS 을 반영 하면서 아래와 같은 메시지가 나오는 경우가 있습니다.

ABAP 에서는 표현되지 않는 문자로 화면상에는 # 으로 표시 되지만 실제로 아스키 코드값은 # 에 해당하는 코드 값이 아니라

'00' ~ '1F' 에 해당하는 값이라고 합니다.

Message no. BRAIN290

Diagnosis

Characters that have a hexadecimal display between HEX00 and HEX1F are not permitted in characteristic values. The character at position 17 is one of these characters. The value is therefore not permitted.

Note that these characters cannot be displayed and are therefore displayed as '#'. The actual character '#' has the hexadecimal display HEX23.

 

문제가 되는 문자는 사용하지 않을 문자라 ' ' 으로 아래와 같이 변환했습니다.

 

DATA : REX                  TYPE X,

                HEX_START  TYPE X VALUE '00',

                HEX_END      TYPE X VALUE '1F'.

 CALL METHOD cl_abap_conv_out_ce=>uccpi
          EXPORTING
            CHAR = INPUT_CHAR
          RECEIVING
            UCCP res
IF res >= HEX_START AND RES <= HEX_END.
          INPUT_CHAR ' '.
ENDIF.

 

2. 유사하게 DSO 에서 CUBE 로 데이터 넣을 때의 문제도 있습니다.

Diagnosis

    Only the following standard characters are valid in characteristic

    values by default:

    !"%&''()*+,-./:;<=>?_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ.

    Furthermore, characteristic values that only consist of the character #

    or that begin with ! are not valid.

 

DATAN   TYPE I,
          POS TYPE I,
          RES TYPE X,
          HEX_CHAR   TYPE VALUE '5F'"_"
          HEX_START1 TYPE VALUE '21'"!"
          HEX_END1   TYPE VALUE '3F'"?
          HEX_START2 TYPE VALUE '41'"A
          HEX_END2   TYPE VALUE '5A'"Z
          HEX_START3 TYPE VALUE '61'"a
          HEX_END3   TYPE VALUE '7A'"z

 

소문자  a ~ z 를 제외하면 일단 안내 메시지 부분에 해당하는 hex code 값 입니다.

소문자는 혹시나 해서 추가 해 봤는데, cube 에 올리는 InfoObject 에 설정이 대문자로 입력하도록 되어 있는 경우는 사용할 일이 없을 듯 합니다.

스페이스가 HEX CODE 로 20 인듯 한데 이것도 DSO 에서 CUBE 로 넣을 때 오류로 걸리는 경우가 있는듯 합니다.

IF NOT RES HEX_CHAR OR
       RES >= HEX_START1 AND RES <= HEX_END1 OR
       RES >= HEX_START2 AND RES <= HEX_END2 OR
       RES >= HEX_START3 AND RES <= HEX_END3 ).
       INPUT_CHAR  ' '.
ENDIF.