포스트

데이터 자동 채번방식 2가지

데이터 자동 채번방식 2가지

💡 early numbering으로 채번하는 경우, key field 필수

1. early numbering

  • Behavior Definition 수정 ```abap … // 여기에 early numbering을 선언합니다. early numbering { create; update; delete;

field ( readonly ) ProgKey; // 사용자가 수정 못하게 readonly만 부여

// … 나머지 필드 정의 }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
> Create 에서 Ctrl + 1
![관련 이미지](/_images/20260808/2026-08-08-100424-데이터-자동-채번방식-2가지_image1.png)
> Behavior Implementation (행위 구현 클래스) 추가
```abap
METHOD earlynumbering_create.
    DATA: lv_current_date TYPE d,
          lv_year_month   TYPE c LENGTH 6,
          lv_prefix       TYPE string,
          lv_max_task_id  TYPE string,
          lv_last_num     TYPE i,
          lv_three_digit  TYPE n LENGTH 3.

    " 1. 현재 시스템 날짜 기준 년월(YYYYMM) 추출 (현재 2026년 기준 계산)
    lv_current_date = cl_abap_context_info=>get_system_date( ).
    lv_year_month   = lv_current_date(6). " 앞 6자리 (예: 202606)

    " 2. 접두사 결합 (예: TASK-202606-GSITM-)
    lv_prefix = |TASK-{ lv_year_month }-GSITM-|.

    " 3. LIKE 검색용 패턴 변수 조립
    DATA(lv_search_pattern) = |{ lv_prefix }%|.

    " 4. [문자형 변경 완료] DB 마스터 테이블에서 가장 큰 일련번호 직접 조회
    SELECT MAX( prog_key )
      FROM ztwbs_task2
      WHERE prog_key LIKE @lv_search_pattern
      INTO @lv_max_task_id.

    " 5. 기존 번호에서 뒤의 순번 3자리 추출
    IF lv_max_task_id IS NOT INITIAL.
      DATA(lv_len) = strlen( lv_max_task_id ).
      DATA(lv_start_pos) = lv_len - 3.
      lv_last_num = lv_max_task_id+lv_start_pos(3).
    ELSE.
      lv_last_num = 0.
    ENDIF.

    " 6. 루프를 돌며 신규 데이터마다 복합 키 정보 강제 주입
    LOOP AT entities ASSIGNING FIELD-SYMBOL(<fs_entity>).
      " 중복 채번 방지
      IF <fs_entity>-ProgKey IS NOT INITIAL.
        CONTINUE.
      ENDIF.

      " 일련번호 카운트 업 및 3자리 문자 변환 (001, 002...)
      lv_last_num += 1.
      lv_three_digit = lv_last_num.

      " 프레임워크 매핑 구조체에 라인 배정
      APPEND VALUE #( %cid      = <fs_entity>-%cid
                      %is_draft = <fs_entity>-%is_draft ) TO mapped-zrtwbstask2 ASSIGNING FIELD-SYMBOL(<fs_mapped>).

      " 7. [복합 키 매핑] 내부 식별용 UUID는 시스템이 자동 생성
      TRY.
          <fs_mapped>-ProgUuid = cl_system_uuid=>create_uuid_x16_static( ).
          <fs_mapped>- = cl_system_uuid=>create_uuid_x16_static( ).
        CATCH cx_uuid_error.
      ENDTRY.

      " 8. [복합 키 매핑] 사용자 화면 출력용 키 필드에는 조립된 가독성용 커스텀 번호 주입
      <fs_mapped>-ProgKey = |{ lv_prefix }{ lv_three_digit }|.
    ENDLOOP.
  ENDMETHOD.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.