Number Range( 넘버레인지 )란...
Number Range에 대해서는 쉽게 말하면 자동으로 번호를 증가시켜 주는 것이라고 보면 된다.
예를 들어) 어느 버튼을 눌렀을 때
1
2
3
.
.
이런 식으로 특수한 행동을 했을 때 번호를 증가시켜주는 기능이다.
# 생성하는 방법과 자세한 내용은 다음에 쓰겠다....
여기서 알아볼 것은
하나의 프로그램에서 CRUD 기능이 있다고 해보자.
거기서 Create 버튼을 눌렀을 때 Number Range 현재 번호를 가져오는 방법을 알아보자.
( NUMBER_GET_INFO )
시나리오 : 게시물 Table 만들어서 게시물 ID를 증번 시켜라.
조건)
- 라인추가 버튼 : 클릭 시 상단에 라인 생기고 신규 데이터 등록( 1씩 증가 )
# 간단하게 Table을 만들어보자.
# Number Range Info
# ALV
시작해 보자.
# 생성버튼 눌렀을 경우.
1. 우선 생성 버튼 클릭 시 Table 데이터에 있는지 없는지 체크를 해줘야 한다.
# 단) 상단에서부터 라인이 생기는 조건이기 때문에 이런 식으로 체크했다.
2. 테이블에 데이터가 없을 경우와 있을 경우를 나누어주고
# 없을 경우에는 NUMBER_GET_INFO을 통해서 Number Range 현재 번호를 가져오자. 그다음 0을 Function을 통해서 0을 삭제해 주자.
# 있을 경우에는 +1을 해주자.
# 참고로 NUMBER_GET_INFO는 자동으로 증번을 하지 않는다. 현재 번호를 가져오는 Function Module이다.
# 0을 제거하지 않으면 LS_NUM-NRLEVEL( NUMC20 )인데 LS_LIST-ID( CHAR3 )이라서 값이 제대로 안 들어간다.
3. 이제 ALV Table( Internal Table ) 값을 넣어주자.
4. 실행해 보면 당연히 안된다.. ALV Refresh는 필수이다.
# 원래는 4, 4-1을 Perform에 묶어서 활용을 했지만, 가독성을 위해서 Perform문을 쓰지 않았다.
4-1. 만약 ID 필드를 Disabled 모드( 보기 모드 )로 변경하고 싶으면 다음과 같은 로직을 같이 넣어주면 된다.
필드에 대한 Enabled or Disabled에 대해서 궁금하다면
2022.04.15 - [.SAP/..ABAP] - SAP ALV cell edit 설정( Enabled, Disabled )
실행을 해보면?
# 다음과 같이 위에서부터 라인이 생기는 걸 확인할 수 있다.
로직이 궁금하다면.
READ TABLE GT_LIST01 INDEX 1 INTO DATA(LS_LIST).
IF SY-SUBRC EQ 0.
LS_LIST-ID += 1.
ELSE.
DATA: LS_NUM TYPE NRIV.
CALL FUNCTION 'NUMBER_GET_INFO'
EXPORTING
NR_RANGE_NR = '01' " 알고싶은 Number Range No "
OBJECT = 'ZID_GJ' " Number Range 등록 할 때 Object ID "
IMPORTING
INTERVAL = LS_NUM.
" 0 제거하고 옮기기 "
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = LS_NUM-NRLEVEL
IMPORTING
OUTPUT = LS_LIST-ID.
ENDIF.
INSERT LS_LIST INTO GT_LIST01 INDEX 1.
DATA:
L_TABIX TYPE SY-TABIX.
LOOP AT GT_LIST01 INTO DATA(LV_LIST).
PERFORM FCAT_CELL1
USING
'ID'
CL_GUI_ALV_GRID=>MC_STYLE_DISABLED
CHANGING
LV_LIST.
MODIFY GT_LIST01 FROM LV_LIST
TRANSPORTING
CELLSTYL.
CLEAR:
LV_LIST-CELLSTYL,
LV_LIST-CELLSCOL.
ENDLOOP.
DATA:
LS_STABLE TYPE LVC_S_STBL.
LS_STABLE-ROW = 'X'.
LS_STABLE-COL = 'X'.
CALL METHOD G_ALV_GRID01->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LS_STABLE.
끝.
도움이 되셨으면 하단에 있는 광고 한번씩 눌러주세유!!
'.ABAP > ..모든 것' 카테고리의 다른 글
SAP 달의 첫 날에서 마지막 날 구하기( 1일부터 28,30,31일 ) (0) | 2023.08.18 |
---|---|
SAP 파일 선택 or 파일 경로 알아보기 (2) | 2023.07.10 |
SAP Radio Button( 라디오 버튼 )에 따른 스크린 제어 (26) | 2023.06.22 |
SAP Radio Button( 라디오 버튼 ) or Check Box( 체크 박스 ) 가로 배치하기 (16) | 2023.06.21 |
SAP Table 데이터 유효성 검사 방법 (2) | 2023.06.15 |