SAP 엑셀 업로드 코드 분석

J._NA 개발일지·2024년 7월 11일
0
FORM UPLOAD_EXCEL .
  DATA : LT_ALSMEX TYPE TABLE OF ALSMEX_TABLINE. "ALSMEX_TABLINE는 ABAP에서 사용되는 테이블 형식의 데이터 구조체
         " LS_ALSMEX TYPE ALSMEX_TABLINE.

  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      FILENAME                = PA_FILE  " 받아온 파일 "
      I_BEGIN_COL             = 1        " 시작 할 열번호 "
      I_BEGIN_ROW             = 2        " 시작 할 행번호 "
      I_END_COL               = 256      " 명시한 필드갯수 "
      I_END_ROW               = 500      " 최대 행갯수 "
    TABLES
      INTERN                  = LT_ALSMEX " 해당 테이블에 값 넣기. "
    EXCEPTIONS
      INCONSISTENT_PARAMETERS = 1
      UPLOAD_OLE              = 2        " UPLOAD_OLE은 ABAP에서 사용되는 함수, OLE (Object Linking and Embedding) 기술을 사용하여 외부 파일을 업로드
      OTHERS                  = 3.


   DATA: LT_DFIES TYPE TABLE OF DFIES.

    CALL FUNCTION 'DDIF_FIELDINFO_GET'
      EXPORTING
        TABNAME  = 'ZSFLIGHT'
      TABLES
        DFIES_TAB = LT_DFIES.

  IF LT_DFIES[] IS NOT INITIAL.
    DELETE LT_DFIES[] WHERE FIELDNAME = 'MANDT'.
  ENDIF.


  LOOP AT LT_ALSMEX INTO DATA(LS_ALSMEX).
    ASSIGN COMPONENT LS_ALSMEX-COL OF STRUCTURE GS_EXCEL TO FIELD-SYMBOL(<FS_FIELD>).
    READ TABLE LT_DFIES INTO DATA(LS_DFIES) INDEX LS_ALSMEX-COL.

    IF SY-SUBRC EQ 0.

      CASE LS_DFIES-INTTYPE.
        WHEN 'P'.
          REPLACE ALL OCCURRENCES OF ',' IN LS_ALSMEX-VALUE WITH SPACE.
        WHEN 'D'.
          REPLACE ALL OCCURRENCES OF '-' IN LS_ALSMEX-VALUE WITH SPACE.
        WHEN OTHERS.

      ENDCASE.

      IF LS_DFIES-CONVEXIT IS NOT INITIAL.
        DATA(FUNCTION_NAME) = 'CONVERSION_EXIT_' && LS_DFIES-CONVEXIT && '_INPUT'.

        CALL FUNCTION FUNCTION_NAME
          EXPORTING
            INPUT  = LS_ALSMEX-VALUE
          IMPORTING
            OUTPUT = LS_ALSMEX-VALUE.

      ENDIF.

    <FS_FIELD> = LS_ALSMEX-VALUE.

    ENDIF.

    AT END OF ROW.
         APPEND GS_EXCEL TO GT_EXCEL.
    ENDAT.

  ENDLOOP.

  GT_LIST[] = CORRESPONDING #( GT_EXCEL[] MAPPING CURRCODE = CURRENCY ).

ENDFORM.

PROFORM만 분석

  1. 위에 선언한 DATA들이 무슨 역할을 하는지.
    ( DATA : LT_ALSMEX TYPE TABLE OF ALSMEX_TABLINE. / DATA: LT_DFIES TYPE TABLE OF DFIES. )
  • LT_ALSMEX : LT_ALSMEX는 TABLE OF ALSMEX_TABLINE 형식으로 선언된 데이터 객체이다. 여기서 ALSMEX_TABLINE은 ABAP에서 정의된 특정 구조체로, 보통 Excel 파일과 같은 외부 데이터를 ABAP 내부 테이블로 가져오기 위해 사용됨.

LT_ALSMEX는 업로드된 Excel 파일의 데이터를 저장하는 데 사용될 내부 테이블이다. ALSM_EXCEL_TO_INTERNAL_TABLE 함수를 통해 업로드된 데이터가 이 테이블에 저장될 것이다.

  • LT_DFIES: LT_DFIES는 TABLE OF DFIES 형식으로 선언된 데이터 객체이다.
    DFIES는 ABAP에서 데이터 사전(DDIC)의 필드 정보를 가져오는 데 사용되는 구조체이다. DDIF_FIELDINFO_GET 함수를 호출하여 특정 테이블(TABNAME = 'ZSFLIGHT')의 필드 정보를 LT_DFIES에 저장된다. 일반적으로 이 정보는 필드의 이름, 데이터 형식, 길이, 키 여부 등을 포함하며, 필요에 따라 데이터 사전의 메타 데이터를 프로그램에서 처리하는 데 사용됨

즉, LT_ALSMEX: 엑셀 파일의 데이터를 저장하는 ABAP 내부 테이블 이고
LT_DFIES: 데이터 사전에서 특정 테이블의 필드 정보를 저장하는 ABAP 내부 테이블 이다.

데이터 사전이 무엇일까
데이터 사전(Data Dictionary)은 SAP 시스템에서 데이터 구조와 관련된 모든 정보를 관리하고 저장하는 중요한 부분임.
데이터 사전은 데이터베이스 개체(테이블, 뷰, 인덱스 등)의 정의와 메타데이터(데이터에 대한 데이터)를 포함하며, SAP 시스템에서 데이터 관리와 관련된 다양한 기능을 제공 함.

a. 테이블 정의: 데이터베이스 테이블의 구조와 관련된 정보를 정의합니다. 이는 필드의 이름, 데이터 형식(문자열, 숫자 등), 길이, 키 여부(기본 키, 외래 키) 등을 포함합니다.

b. 도메인: 데이터 유형(예: 문자열, 숫자, 날짜 등)에 대한 정의를 포함하며, 이는 특정 테이블 필드의 데이터 형식을 정의하는 데 사용됩니다.

c. 뷰(View): 하나 이상의 기본 테이블로부터 데이터를 검색하는 논리적 구조를 정의합니다. 뷰는 복잡한 데이터 추출이나 보고서 작성 등에 사용될 수 있습니다.

d. 인덱스(Index): 테이블에서 데이터 접근을 빠르게 하기 위해 필드의 정렬된 집합을 정의합니다. 인덱스는 검색 속도를 향상시키며, 특정 필드의 고유성을 보장하는 데도 사용됩니다.

e. 구조체 및 유형(Type): ABAP 프로그램에서 사용할 수 있는 복합 데이터 형식을 정의합니다. 예를 들어, 여러 필드를 하나의 논리적 단위로 그룹화하는 구조체를 정의할 수 있습니다.

f. 도메인 메타데이터: 도메인에 대한 추가 메타데이터 정보를 포함합니다. 예를 들어, 도메인에 대한 설명, 입력 도움말, 값 범위 등을 정의할 수 있습니다.

데이터 사전은 SAP 시스템의 데이터 일관성과 유지 보수를 보장하며, 데이터 모델링 및 개발 과정에서 중요한 역할을 한다. 개발자는 데이터 사전을 사용하여 데이터 구조를 정의하고 이를 기반으로 프로그램을 개발하며, 데이터의 정확성과 일관성을 유지할 수 있다.

GT_LIST[] = CORRESPONDING #( GT_EXCEL[] MAPPING CURRCODE = CURRENCY ).
  • GT_EXCEL과 GT_LIST는 둘 다 내부 테이블이며, 각각의 행은 여러 필드로 구성
  • CORRESPONDING 연산자는 GT_EXCEL의 각 행에서 CURRCODE 필드 값을 찾아서 GT_LIST의 동일한 인덱스 위치의 행의 CURRENCY 필드에 할당 함
profile
아밥 & 프론트엔드 개발자

0개의 댓글