diff --git a/src/zcl_copa_topdown.clas.xml b/src/zcl_copa_topdown.clas.xml new file mode 100644 index 0000000..745da12 --- /dev/null +++ b/src/zcl_copa_topdown.clas.xml @@ -0,0 +1,389 @@ + + + + + + ZCL_COPA_TOPDOWN + E + CO-PA 하향식 배부 + 1 + X + X + X + + + + I + 001 + 경영단위를 등록하십시요. + 23 + + + I + 002 + VARIANT 코드를 등록하십시요. + 29 + + + I + 003 + VARIANT 정보를 확인하십시요. + 29 + + + I + 004 + Data saved successfully. + 48 + + + I + 005 + Error saving data. + 28 + + + I + 006 + 등록된 데이타가 존재합니다. 삭제 후 재 처리 하시겠습니까? + 66 + + + I + 007 + 데이타가 존재하지 않습니다. 확인 후 다시 처리 하십시요. + 64 + + + I + 008 + 클래스 환경 구성을 위한 Data Elements (Domain) 생성 오류 + 84 + + + I + 009 + 클래스 환경 구성을 위한 관리 테이블 생성 오류 + 52 + + + I + 010 + 클래스 환경 구성을 위한 함수 생성 오류 + 44 + + + I + 011 + 클래스 운영을 위한 환경 구성이 완료되었습니다. + 52 + + + I + 012 + 필수 Import 파라메타 값을 지정하여야 합니다. + 56 + + + I + 013 + 클래스 환경 구성 정보 추출 성공하였습니다. + 48 + + + I + 014 + 클래스 환경 구성 정보 조회시 오류가 발생하였습니다. + 58 + + + I + 015 + 데이타 조회 과정에서 오류가 발생하였습니다. + 48 + + + I + 016 + 요청 작업을 성공적으로 완료하였습니다. + 42 + + + I + 017 + 요청 작업 수행 중 오류가 발생하였습니다. + 46 + + + I + 018 + 전표 발행이 완료되어 요청 작업을 처리 할 수 없습니다. + 62 + + + I + 019 + 현재 지원하지 않는 기능 영역입니다. + 40 + + + I + 020 + 이미 처리된 내역이 존재합니다. + 27 + + + I + 021 + 레코드 유형이 존재하지 않습니다. 다시 확인 바랍니다. + 60 + + + I + 022 + 관리 테이블 정보 조회 오류 + 25 + + + I + 023 + 전표 발행 과정을 진행하지 않았습니다. CO-PA전표 발행 후, 수행하십시요. + 86 + + + I + 024 + CO-PA 전표가 존재하지 않습니다. + 40 + + + + + BUILD_DYNAMIC_QUERY + E + 데이타 추출을 위한 쿼리 수행 + + + CONSTRUCTOR + E + CONSTRUCTOR + + + DELETE_TOPDOWN_TB_DATA + E + TYPE별(센더, 리시버, 결과, 전표발행) 테이블 데이타 삭제 + + + EXECUTE_TOPDOWN_DISTRIBUTE + E + 하향식 배부 실행(Templete) + + + GENERATE_DYNAMIC_NEW_SQL + E + 데이타 추출을 위한 쿼리 수행 + + + GET_COPA_DOC_LIST + E + CO-PA 전표 조회(배부 수행 결과 전표) + + + GET_CUSTOM_TABLE_INFO + E + 센더, 리시버 테이블 정보(사용 X) + + + GET_FIELD_CATALOG + E + Variant별 사용 Field-Catalog 정보 조회 + + + GET_SENDER_RECEIVER_DATA + E + 센더, 리시버 데이타 생성(Templete) + + + GET_TABNAME + E + TABNAME 조회 + + + GET_TB_DATA_EXIST_YN + E + 테이블 데이타 존재 여부 + + + GET_VARIANT_INFO + E + 변형 정보 조회 + + + GET_VARIANT_LIST + E + 하향식 배부 변형 리스트 조회 + + + GV_DISTINFO + E + 배부 기준 세부 정보 테이블 + + + GV_DISTRULE + E + 배부 조건 Customizing + + + GV_MANAGER + E + Package 전용 테이블 관리 테이블 명 + + + GV_RECEIVER + E + 리시버(배부기준) 테이블 명 + + + GV_RESULT + E + 배부 결과 테이블 명 + + + GV_SENDER + E + 센더 테이블 명 + + + GV_SOURCE + E + 경영단위 CE1 테이블 + + + GV_TARGET + E + 전표 발행 대상 테이블 명 + + + GV_VARIANT + E + 월별 배부 기준 정보 테이블 명 + + + MANAGER_STRUCT_DESC + E + 관리 테이블 구조 + + + POST_ACTUAL_TOPDOWN_DOCUMENTS + E + 배주 전표 전기 + + + RECEIVER_STRUCT_DESC + E + 리시버 테이블 구조 + + + RESULT_STRUCT_DESC + E + 결과 테이블 구조 + + + SENDER_STRUCT_DESC + E + 센더 테이블 구조 + + + SET_AUDIT_FIELDS + E + Data 생성자(수정자) 정보 + + + SET_INFO + E + 공용정보 지정 + + + SET_SOURCE_INFO + E + 소스 테이블 지정(CE1) + + + SET_VARIANT_DESC + E + 하향식 배부 변형 설정 값 저장 + + + SOURCE_STRUCT_DESC + E + 소스(CE1) 테이블 구조 + + + TARGET_STRUCT_DESC + E + 전표 발행 대상 + + + TT_SENDER + E + 센더 데이타(구조) + + + TY_DISTINFO + E + 배부 기준 세부 정보(구조) + + + TY_DISTRULE + E + 배부 조건 Customizing(구조) + + + TY_MNG_TABLE + E + 관리 테이블 정보 + + + TY_RECEIVER + E + 배부 기준 데이타(구조) + + + TY_RESULT + E + 배부 결과 데이타(구조) + + + TY_SENDER + E + 센더 데이타(구조) + + + TY_TARGET + E + 전표 발행 대상 데이타(구조) + + + TY_VARIANT + E + 배부 기준 정보(월별)(구조) + + + TY_WORKING_INFO + E + 클래스 메소드 수행을 위한 공용 정보 + + + VARIANT_STRUCT_DESC + E + 배부기준 테이블 구조 + + + WORKING_INFO + E + 클래스 메소드 수행을 위한 공용 정보 + + + + + diff --git a/src/zcl_copa_topdown_install.clas.abap b/src/zcl_copa_topdown_install.clas.abap new file mode 100644 index 0000000..2f9da0d --- /dev/null +++ b/src/zcl_copa_topdown_install.clas.abap @@ -0,0 +1,2056 @@ +class ZCL_COPA_TOPDOWN_INSTALL definition + public + create public . + +public section. + + types: + BEGIN OF ty_bpsel, + sort TYPE rke_lfd4, + fnam TYPE fieldname, + sign TYPE raldb_sign, + option TYPE raldb_opti, + low TYPE rke_low_l, + high TYPE rke_high_l, + END OF ty_bpsel . + types: +* types: +* ty_zcotd_tab TYPE STANDARD TABLE OF zcotd1200 WITH EMPTY KEY . + ty_bpsel_tab TYPE STANDARD TABLE OF ty_bpsel WITH EMPTY KEY . + + methods CONSTRUCTOR . + methods CREATE_INIT_TABLE + importing + !ERKRS type ERKRS . + methods START_PACKAGE_INSTALL + importing + value(ERKRS) type ERKRS + value(TABNAME) type TABNAME default 'ZCOTD1000' + value(FUNCTION_GROUP) type RS38L_AREA + value(CREATE_ELEMENT_YN) type BOE_BOOL default 'X' + value(CREATE_TABLE_YN) type BOE_BOOL default 'X' + value(CREATE_FUNCTION_YN) type BOE_BOOL default 'X' + exporting + !RESULT type BAPIRET2 . + PROTECTED SECTION. + +private section. + + types: + BEGIN OF ty_mng_table, + type TYPE db2type, + tb_name TYPE tabname, + text TYPE mssviewortable, + END OF ty_mng_table . + types: + tt_dfies TYPE STANDARD TABLE OF dfies WITH DEFAULT KEY . + types: + tt_bdcdata TYPE STANDARD TABLE OF bdcdata WITH DEFAULT KEY . + types: + " 클래스내에서 필요한 기본 정보 + BEGIN OF ty_working_info, + perio TYPE jahrper, + variant TYPE covariant, + END OF ty_working_info . + types: + BEGIN OF ty_key_map, + key_string TYPE string, + dist_id TYPE PBR_SEQRE, + END OF ty_key_map . + types: + tt_key_map TYPE HASHED TABLE OF ty_key_map + WITH UNIQUE KEY key_string . + types: + tt_dd03p TYPE STANDARD TABLE OF dd03p WITH DEFAULT KEY . + + data: + gt_mng_table TYPE TABLE OF ty_mng_table . + data MT_SENDER_KEYS type TT_KEY_MAP . + data: + gv_dist_counter TYPE n LENGTH 9 value '000000000' ##NO_TEXT. + data GV_TABNAME type COVAD-TABNAME . + data GV_MESSAGE type STRING . + data GV_SOURCE type TABNAME . + data GV_MANAGER type TABNAME . + data GV_VARIANT type TABNAME . + data GV_SENDER type TABNAME . + data GV_RECEIVER type TABNAME . + data GV_RESULT type TABNAME . + data GV_TARGET type TABNAME . + data GV_DISTINFO type TABNAME . + data GV_DISTRULE type TABNAME . + data WORKING_INFO type TY_WORKING_INFO . + + methods CREATE_INIT_DATA_ELEMENTS + returning + value(RESULT) type BAPIRET2 . + methods CREATE_INIT_DATA_TABLE + importing + value(ERKRS) type ERKRS + value(TABNAME) type TABNAME + returning + value(RESULT) type BAPIRET2 . + methods CREATE_INIT_FUNCTION + importing + value(FUNCTION_GROUP) type RS38L_AREA + value(TABNAME) type TABNAME + returning + value(RESULT) type BAPIRET2 . + methods GET_PACKAGE_INFO + importing + value(ERKRS) type ERKRS + returning + value(RESULT) type BAPIRET2 . + methods GENERATE_TABLE_FIELD + importing + value(TABNAME) type TABNAME + value(TYPE) type DB2TYPE + value(POSITION_START) type TABFDPOS + exporting + !CBO_DD03P type TT_DD03P + !FIELD_EXCEPTS type TT_DD03P + returning + value(POSITION) type TABFDPOS . + methods CREATE_INIT_STRUCTURE + importing + !ERKRS type ERKRS . + methods CREATE_INIT_STRUCTURE_EX_MANDT + importing + !ERKRS type ERKRS . +ENDCLASS. + + + +CLASS ZCL_COPA_TOPDOWN_INSTALL IMPLEMENTATION. + + + METHOD constructor. + CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT' + EXPORTING + titel = '주의' + textline1 = TEXT-017 + textline2 = TEXT-018. + ENDMETHOD. + + + METHOD create_init_data_elements. + DATA: ls_domain TYPE dd01v, + ls_element TYPE dd04v, + lt_domain_values TYPE TABLE OF dd07v, + ls_domain_value TYPE dd07v, + lv_message TYPE string, + lx_error TYPE REF TO cx_root. + + DATA : iv_domain_name TYPE dom_ref VALUE 'ZTBLS', + iv_elemnt_name TYPE rollname VALUE 'ZTBLS'. +* DATA : iv_domain_name TYPE dom_ref VALUE 'ZTST', "테스트 +* iv_elemnt_name TYPE rollname VALUE 'ZTST'. "테스트 + +* 1. Domain 생성 + + " Domain 속성 정의 +* ls_domain-domname = iv_domain_name. +* ls_domain-ddlanguage = sy-langu. +* ls_domain-datatype = 'CHAR'. +* ls_domain-leng = 1. +* ls_domain-ddtext = '테이블 유형'. + + ls_domain = VALUE #( + domname = iv_domain_name + ddlanguage = sy-langu + datatype = 'CHAR' + leng = '1' + ddtext = '테이블 유형' + ). + + " 값 범위 설정 + ls_domain_value = VALUE #( + domname = iv_domain_name valpos = '0001' ddlanguage = sy-langu + domvalue_l = '1' ddtext = 'CBO 테이블 관리 테이블' ). + APPEND ls_domain_value TO lt_domain_values. + + ls_domain_value = VALUE #( + domname = iv_domain_name valpos = '0002' ddlanguage = sy-langu + domvalue_l = '2' ddtext = '배부 기준 정보(월별)' ). + APPEND ls_domain_value TO lt_domain_values. + + ls_domain_value = VALUE #( + domname = iv_domain_name valpos = '0003' ddlanguage = sy-langu + domvalue_l = '3' ddtext = '배부 대상 테이블' ). + APPEND ls_domain_value TO lt_domain_values. + + ls_domain_value = VALUE #( + domname = iv_domain_name valpos = '0004' ddlanguage = sy-langu + domvalue_l = '4' ddtext = '배부 기준 테이블' ). + APPEND ls_domain_value TO lt_domain_values. + + ls_domain_value = VALUE #( + domname = iv_domain_name valpos = '0005' ddlanguage = sy-langu + domvalue_l = '5' ddtext = '배부 결과 테이블' ). + APPEND ls_domain_value TO lt_domain_values. + + ls_domain_value = VALUE #( + domname = iv_domain_name valpos = '0006' ddlanguage = sy-langu + domvalue_l = '6' ddtext = '전표 발행 테이블' ). + APPEND ls_domain_value TO lt_domain_values. + + ls_domain_value = VALUE #( + domname = iv_domain_name valpos = '0007' ddlanguage = sy-langu + domvalue_l = '7' ddtext = '배부 조건 세부 정보' ). + APPEND ls_domain_value TO lt_domain_values. + + ls_domain_value = VALUE #( + domname = iv_domain_name valpos = '0008' ddlanguage = sy-langu + domvalue_l = '8' ddtext = '배부 조건 Customizing' ). + APPEND ls_domain_value TO lt_domain_values. + + " 도메인 생성 + CALL FUNCTION 'DDIF_DOMA_PUT' + EXPORTING + name = ls_domain-domname + dd01v_wa = ls_domain + TABLES + dd07v_tab = lt_domain_values. + + IF sy-subrc <> 0. + " 실패 메시지 추가 + result = VALUE #( + type = 'E' + id = 'FAIL' + number = '000' + message = 'Domain 생성 중 오류가 발생하였습니다.' ). + EXIT. + ENDIF. + + " 도메인 활성화 + CALL FUNCTION 'DDIF_DOMA_ACTIVATE' + EXPORTING + name = ls_domain-domname. + + IF sy-subrc <> 0. + " 실패 메시지 추가 + result = VALUE #( + type = 'E' + id = 'FAIL' + number = '000' + message = 'Domain 활성화 과정에서 오류가 발생하였습니다.' ). + EXIT. + ENDIF. + + + + +* 2. Data Elements 생성 + + " 데이터 엘리먼트 속성 정의 + ls_element = VALUE #( + rollname = iv_elemnt_name + domname = iv_domain_name + ddlanguage = sy-langu + ddtext = '유형' + headlen = 55 + scrlen1 = 10 + scrlen2 = 20 + scrlen3 = 40 ). + + " 데이터 엘리먼트 생성/업데이트 + CALL FUNCTION 'DDIF_DTEL_PUT' + EXPORTING + name = ls_element-rollname + dd04v_wa = ls_element + EXCEPTIONS + element_not_found = 1 + illegal_action = 2 + OTHERS = 3. + + IF sy-subrc <> 0. + " 실패 메시지 추가 + result = VALUE #( + type = 'E' + id = 'FAIL' + number = '000' + message = 'Data Elements 생성 중 오류가 발생하였습니다.' ). + EXIT. + ENDIF. + + " 데이터 엘리먼트 활성화 + CALL FUNCTION 'DDIF_DTEL_ACTIVATE' + EXPORTING + name = ls_element-rollname + EXCEPTIONS + not_found = 1 + put_failure = 2 + OTHERS = 3. + + IF sy-subrc <> 0. + " 실패 메시지 추가 + result = VALUE #( + type = 'E' + id = 'FAIL' + number = '000' + message = 'Data Elements 활성화 과정에서 오류가 발생하였습니다.' ). + EXIT. + ENDIF. + + " 성공 메시지 추가 + result = VALUE #( + type = 'S' + id = 'SUCCESS' + number = '000' + message = 'Domain과 Data Element가 성공적으로 생성되었습니다' ). + + + + ENDMETHOD. + + + METHOD create_init_data_table. + " 데이터 선언 + DATA: lt_dd02v TYPE TABLE OF dd02v, + ls_dd02v TYPE dd02v, + lt_dd03p TYPE TABLE OF dd03p, + ls_dd03p TYPE dd03p, + lv_rc TYPE sy-subrc, + ls_dd09v TYPE dd09v. " 기술 설정 구조체 추가. + + DATA : lv_tbtext TYPE as4text VALUE 'CO-PA Top-Down 배부 관련 테이블'. + + " 테이블 헤더 정보 설정 + ls_dd02v = VALUE #( + tabname = tabname + ddlanguage = sy-langu + tabclass = 'TRANSP' + clidep = 'X' " 클라이언트 종속 + ddtext = lv_tbtext + contflag = 'A' " 활성 + mainflag = 'X' " 메인 테이블 + ). + APPEND ls_dd02v TO lt_dd02v. + + " 테이블 필드 정보 설정 + CLEAR ls_dd03p. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'MANDT' + keyflag = 'X' + notnull = 'X' + rollname = 'MANDT' + ddlanguage = sy-langu + position = '0001' + ddtext = '클라이언트' + ). + APPEND ls_dd03p TO lt_dd03p. + + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'ERKRS' + keyflag = 'X' + notnull = 'X' + rollname = 'ERKRS' + ddlanguage = sy-langu + position = '0002' + ddtext = '경영단위' + ). + APPEND ls_dd03p TO lt_dd03p. + + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'TYPE' + keyflag = 'X' + notnull = 'X' + rollname = 'ZTBLS' + ddlanguage = sy-langu + position = '0003' + ddtext = '유형' + ). + APPEND ls_dd03p TO lt_dd03p. + + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'TBNAME' +* keyflag = 'X' +* notnull = 'X' + rollname = 'P15_ORIGT' + ddlanguage = sy-langu + position = '0004' + ddtext = 'Source table' + ). + APPEND ls_dd03p TO lt_dd03p. + + + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'TEXT' +* keyflag = 'X' +* notnull = 'X' + rollname = 'MSSVIEWORTABLE' + ddlanguage = sy-langu + position = '0005' + ddtext = 'View or table name' + ). + APPEND ls_dd03p TO lt_dd03p. + + " 기술 설정(DD09L) 정보 설정 + CLEAR ls_dd09v. + ls_dd09v-tabname = tabname. + ls_dd09v-as4local = 'A'. " 활성화 상태 + ls_dd09v-tabkat = '3'. " 일반 테이블 + ls_dd09v-tabart = 'APPL1'. " 응용 프로그램 테이블 + + " DDIC 함수를 사용하여 테이블 생성 + CALL FUNCTION 'DDIF_TABL_PUT' + EXPORTING + name = tabname + dd02v_wa = ls_dd02v + TABLES + dd03p_tab = lt_dd03p + EXCEPTIONS + tabl_not_found = 1 + name_inconsistent = 2 + tabl_inconsistent = 3 + put_failure = 4 + put_refused = 5 + OTHERS = 6. + + IF sy-subrc <> 0. + " 실패 메시지 추가 + result = VALUE #( + type = 'E' + id = 'FAIL' + number = '000' + message = 'TABLE 생성 중 오류가 발생하였습니다.' ). + EXIT. + ENDIF. + + " 테이블 활성화 + DATA: lv_as4local TYPE dd02l-as4local. + + " DDIF_TABL_ACTIVATE 함수 사용하여 테이블 활성화 + CALL FUNCTION 'DDIF_TABL_ACTIVATE' + EXPORTING + name = tabname + auth_chk = 'X' + EXCEPTIONS + not_found = 1 + put_failure = 2 + OTHERS = 3. + + IF sy-subrc <> 0. + " 실패 메시지 추가 + result = VALUE #( + type = 'E' + id = 'FAIL' + number = '000' + message = 'TABLE 활성화 과정에서 오류가 발생하였습니다.' ). + EXIT. + ENDIF. + + +* 관리테이블의 기본 데이타를 등록한다. + DATA : wa_ref TYPE REF TO data, " 동적 워크에어리어 + tab_ref TYPE REF TO data, " 동적 테이블 참조 + lt_fcat TYPE lvc_t_fcat, " 필드카탈로그 + ls_fcat TYPE lvc_s_fcat. + + FIELD-SYMBOLS: TYPE STANDARD TABLE, " 동적 테이블용 필드심볼 + TYPE any, " 동적 워크에어리어 필드심볼 + TYPE any. " 필드값 세팅용 + +* 1. 테이블 구조 메타데이터 가져오기 + CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' + EXPORTING + i_structure_name = tabname + CHANGING + ct_fieldcat = lt_fcat. + +* 2. 동적 내부테이블과 워크에어리어 생성 + CALL METHOD cl_alv_table_create=>create_dynamic_table + EXPORTING + it_fieldcatalog = lt_fcat + IMPORTING + ep_table = tab_ref. + + ASSIGN tab_ref->* TO . + + CREATE DATA wa_ref LIKE LINE OF . + ASSIGN wa_ref->* TO . + +* 3. 필드값 세팅 + ASSIGN COMPONENT 'ERKRS' OF STRUCTURE TO . + IF sy-subrc = 0. = erkrs. ENDIF. + + ASSIGN COMPONENT 'TYPE' OF STRUCTURE TO . + IF sy-subrc = 0. = '1'. ENDIF. + + ASSIGN COMPONENT 'TBNAME' OF STRUCTURE TO . + IF sy-subrc = 0. = tabname. ENDIF. + + ASSIGN COMPONENT 'TEXT' OF STRUCTURE TO . + IF sy-subrc = 0. = 'CBO테이블관리'. ENDIF. + +** 4. 동적 테이블에 데이터 삽입 + INSERT (tabname) FROM . + + IF sy-subrc NE 0. + gv_message = TEXT-005. + " 실패 메시지 추가 + result = VALUE #( + type = 'E' + id = 'FAIL' + number = '005' + message = gv_message ). + EXIT. + ELSE. + " 성공 메시지 추가 + result = VALUE #( + type = 'S' + id = 'SUCCESS' + number = '000' + message = '관리용 TABLE이 성공적으로 생성되었습니다' ). + + ENDIF. + ENDMETHOD. + + + METHOD create_init_function. + TYPES: ty_rssource TYPE TABLE OF rssource. + + DATA: lv_function_group TYPE rs38l-area, + lv_function_name TYPE rs38l-name VALUE 'ZTOPDOWN_ENV', + lv_short_text TYPE tftit-stext VALUE '테이블명 반환 함수', + lt_source TYPE ty_rssource, + lt_export TYPE TABLE OF rsexp. + + DATA: + ls_export TYPE rsexp, " RSEXP 구조체 사용 + lv_include TYPE rs38l-include. + DATA: ls_source TYPE rssource. + + LV_function_group = function_group. + + "function 그룹 존재 여부 확인 + SELECT SINGLE area FROM tlibg INTO @DATA(lv_exists) + WHERE area = @function_group. + + IF sy-subrc <> 0. + " 실패 메시지 추가 + result = VALUE #( + type = 'E' + id = 'FAIL' + number = '000' + message = 'Function 그룹이 존재하지 않습니다.' ). + EXIT. + ENDIF. + + + " Export 파라미터 정의 (정확한 RSEXP 구조체 필드만 사용) + CLEAR ls_export. + ls_export-parameter = 'TB_NAME'. " 파라미터명 + ls_export-typ = 'TABNAME'. " DB 필드명 (필수) + + " OPTIONAL/DEFAULT 필드 제거 (RSEXP 구조체에 없음) + APPEND ls_export TO lt_export. + + "생성할 function 소스 + ls_source-line = | tb_name = '{ tabname }'.|. + APPEND ls_source TO lt_source. + + " 함수 모듈 생성 + CALL FUNCTION 'RS_FUNCTIONMODULE_INSERT' + EXPORTING + funcname = lv_function_name + function_pool = lv_function_group + short_text = lv_short_text + TABLES + export_parameter = lt_export + source = lt_source + EXCEPTIONS + function_already_exists = 1 + OTHERS = 2. + + IF sy-subrc <> 0. + " 실패 메시지 추가 + result = VALUE #( + type = 'E' + id = 'FAIL' + number = '000' + message = 'Function 생성 중 오류가 발생하였습니다.' ). + EXIT. + ENDIF. + + + + " 성공 메시지 추가 + result = VALUE #( + type = 'S' + id = 'SUCCESS' + number = '000' + message = '성공적으로 Function이 생성되었습니다.' ). + + ENDMETHOD. + + + METHOD create_init_structure. + + DATA : result TYPE bapiret2, + lt_dfies TYPE TABLE OF dfies. + + " 데이터 선언 + DATA: lt_dd02v TYPE TABLE OF dd02v, + ls_dd02v TYPE dd02v, + lt_dd03p TYPE TABLE OF dd03p, "MANDT 포함한 구조(Table과 일치) + ls_dd03p TYPE dd03p, + + lv_position TYPE tabfdpos VALUE '0000'. "필드 순번 + + + LOOP AT gt_mng_table INTO DATA(ls_struct) WHERE type <> 1. "관리테이블은 생성 제외 + CLEAR : ls_dd02v, lt_dd03p. + + " 1. 소스 구조 조회 + CALL FUNCTION 'DDIF_FIELDINFO_GET' + EXPORTING + tabname = ls_struct-tb_name + TABLES + dfies_tab = lt_dfies + EXCEPTIONS + not_found = 1 + OTHERS = 2. + + "타입별로 패키지 내부 고정 명 지정(Rename) + CASE ls_struct-type. + WHEN '2'. + ls_struct-tb_name = 'ZSTOP_VARIANT'. + WHEN '3'. + ls_struct-tb_name = 'ZSTOP_SENDER'. + WHEN '4'. + ls_struct-tb_name = 'ZSTOP_RECEIVER'. + WHEN '5'. + ls_struct-tb_name = 'ZSTOP_RESULT'. + WHEN '6'. + ls_struct-tb_name = 'ZSTOP_TARGET'. + WHEN '7'. + ls_struct-tb_name = 'ZSTOP_DISTINFO'. + WHEN '8'. + ls_struct-tb_name = 'ZSTOP_DISTRULE'. + ENDCASE. + + CONCATENATE ls_struct-text '(구조)' INTO ls_struct-text. + + " 1. 구조 헤더 정보 설정 + ls_dd02v = VALUE #( + tabname = ls_struct-tb_name + ddlanguage = sy-langu + tabclass = 'INTTAB' " 구조체 + clidep = 'X' " 클라이언트 종속 + ddtext = ls_struct-text + contflag = 'A' " 활성 + mainflag = 'X' " 메인 테이블 + ). + + LOOP AT lt_dfies INTO DATA(dfies). + CLEAR ls_dd03p. + lv_position = lv_position + 1. + + ls_dd03p = VALUE #( + tabname = ls_struct-tb_name + fieldname = dfies-fieldname + rollname = dfies-rollname + + datatype = dfies-datatype + leng = dfies-leng + + reftable = SWITCH #( dfies-reftable WHEN '' THEN '' + ELSE ls_struct-tb_name ) + reffield = dfies-reffield + ddlanguage = sy-langu + position = lv_position + ddtext = dfies-fieldtext + ). + APPEND ls_dd03p TO lt_dd03p. + + ENDLOOP. + + "1. DDIC 함수를 사용하여 테이블 생성(MANDT 포함 - CRUD시 주요 사용) + CALL FUNCTION 'DDIF_TABL_PUT' + EXPORTING + name = ls_struct-tb_name + dd02v_wa = ls_dd02v + TABLES + dd03p_tab = lt_dd03p + EXCEPTIONS + tabl_not_found = 1 + name_inconsistent = 2 + tabl_inconsistent = 3 + put_failure = 4 + put_refused = 5 + OTHERS = 6. + + IF sy-subrc <> 0. + "오류 메시지 + gv_message = TEXT-016. + MESSAGE gv_message TYPE 'E'. + ENDIF. + + " 테이블 활성화 + CALL FUNCTION 'DDIF_TABL_ACTIVATE' + EXPORTING + name = ls_struct-tb_name + auth_chk = 'X' + EXCEPTIONS + not_found = 1 + put_failure = 2 + OTHERS = 3. + + IF sy-subrc <> 0. + "오류 메시지 + gv_message = TEXT-016. + MESSAGE gv_message TYPE 'E'. + ENDIF. + + ENDLOOP. + + ENDMETHOD. + + + METHOD create_init_structure_ex_mandt. + DATA : result TYPE bapiret2, + lt_dfies TYPE TABLE OF dfies. + + " 데이터 선언 + DATA: lt_dd02v TYPE TABLE OF dd02v, + ls_dd02v TYPE dd02v, + lt_dd03p TYPE TABLE OF dd03p, "MANDT 포함한 구조(Table과 일치) + ls_dd03p TYPE dd03p, + + lv_position TYPE tabfdpos VALUE '0000'. "필드 순번 + + + LOOP AT gt_mng_table INTO DATA(ls_struct) WHERE type <> 1. "관리테이블은 생성 제외 + CLEAR : ls_dd02v, lt_dd03p. + + " 1. 소스 구조 조회 + CALL FUNCTION 'DDIF_FIELDINFO_GET' + EXPORTING + tabname = ls_struct-tb_name + TABLES + dfies_tab = lt_dfies + EXCEPTIONS + not_found = 1 + OTHERS = 2. + + "타입별로 패키지 내부 고정 명 지정(Rename) + CASE ls_struct-type. + WHEN '2'. + ls_struct-tb_name = 'ZSTOP_VARIANT_M'. + WHEN '3'. + ls_struct-tb_name = 'ZSTOP_SENDER_M'. + WHEN '4'. + ls_struct-tb_name = 'ZSTOP_RECEIVER_M'. + WHEN '5'. + ls_struct-tb_name = 'ZSTOP_RESULT_M'. + WHEN '6'. + ls_struct-tb_name = 'ZSTOP_TARGET_M'. + WHEN '7'. + ls_struct-tb_name = 'ZSTOP_DISTINFO_M'. + WHEN '8'. + ls_struct-tb_name = 'ZSTOP_DISTRULE_M'. + ENDCASE. + + CONCATENATE ls_struct-text '(구조-MANDT제외)' INTO ls_struct-text. + + " 1. 구조 헤더 정보 설정 + ls_dd02v = VALUE #( + tabname = ls_struct-tb_name + ddlanguage = sy-langu + tabclass = 'INTTAB' " 구조체 + clidep = 'X' " 클라이언트 종속 + ddtext = ls_struct-text + contflag = 'A' " 활성 + mainflag = 'X' " 메인 테이블 + ). + + LOOP AT lt_dfies INTO DATA(dfies). + CHECK dfies-fieldname NE 'MANDT'. "클라이언트 필드 제외 + + CLEAR ls_dd03p. + lv_position = lv_position + 1. + + ls_dd03p = VALUE #( + tabname = ls_struct-tb_name + fieldname = dfies-fieldname + rollname = dfies-rollname + + datatype = dfies-datatype + leng = dfies-leng + + reftable = SWITCH #( dfies-reftable WHEN '' THEN '' + ELSE ls_struct-tb_name ) + reffield = dfies-reffield + ddlanguage = sy-langu + position = lv_position + ddtext = dfies-fieldtext + ). + APPEND ls_dd03p TO lt_dd03p. + + ENDLOOP. + + "1. DDIC 함수를 사용하여 테이블 생성(MANDT 포함 - CRUD시 주요 사용) + CALL FUNCTION 'DDIF_TABL_PUT' + EXPORTING + name = ls_struct-tb_name + dd02v_wa = ls_dd02v + TABLES + dd03p_tab = lt_dd03p + EXCEPTIONS + tabl_not_found = 1 + name_inconsistent = 2 + tabl_inconsistent = 3 + put_failure = 4 + put_refused = 5 + OTHERS = 6. + + IF sy-subrc <> 0. + "오류 메시지 + gv_message = TEXT-016. + MESSAGE gv_message TYPE 'E'. + ENDIF. + + " 테이블 활성화 + CALL FUNCTION 'DDIF_TABL_ACTIVATE' + EXPORTING + name = ls_struct-tb_name + auth_chk = 'X' + EXCEPTIONS + not_found = 1 + put_failure = 2 + OTHERS = 3. + + IF sy-subrc <> 0. + "오류 메시지 + gv_message = TEXT-016. + MESSAGE gv_message TYPE 'E'. + ENDIF. + + ENDLOOP. + ENDMETHOD. + + + METHOD create_init_table. + DATA: lv_source_table TYPE tabname, + lt_dfies TYPE TABLE OF dfies. + + DATA : result TYPE bapiret2. + + " 데이터 선언 + DATA: lt_dd02v TYPE TABLE OF dd02v, + ls_dd02v TYPE dd02v, + lt_dd03p TYPE TABLE OF dd03p, + ls_dd03p TYPE dd03p, + lt_exceipt TYPE TABLE OF dd03p, "제외할 필드 + lv_rc TYPE sy-subrc, + ls_dd09v TYPE dd09v, " 기술 설정 구조체 추가 + lv_as4local TYPE dd02l-as4local, + lv_position TYPE tabfdpos VALUE '0000'. "필드 순번 + +* DATA : ls_crtable-tb_name TYPE tabname VALUE 'ZCOTD1300'. + + " 관리 테이블 정보를 전역 Internal 테이블(gt_mng_table)에 업데이트. (생성 테이블 목록) + CALL METHOD me->get_package_info + EXPORTING + erkrs = erkrs + RECEIVING + result = result. + + IF result-type NE 'S'. + "오류 발생. + gv_message = TEXT-010. + MESSAGE gv_message TYPE 'E'. + ENDIF. + + " 1. 소스 구조 조회 + CALL FUNCTION 'DDIF_FIELDINFO_GET' + EXPORTING + tabname = gv_source + TABLES + dfies_tab = lt_dfies + EXCEPTIONS + not_found = 1 + OTHERS = 2. + + IF sy-subrc <> 0. + "오류 발생. + gv_message = TEXT-015. + MESSAGE gv_message TYPE 'E'. + ENDIF. + + LOOP AT gt_mng_table INTO DATA(ls_crtable) WHERE type <> '1'. "관리테이블은 생성된 상태이므로 제외. + CLEAR : ls_dd02v, lt_dd02v[], lt_dd03p. + + + " 1. 테이블 헤더 정보 설정 + ls_dd02v = VALUE #( + tabname = ls_crtable-tb_name + ddlanguage = sy-langu + tabclass = 'TRANSP' " 투명 테이블 + clidep = 'X' " 클라이언트 종속 + ddtext = ls_crtable-text + contflag = 'A' " 활성 + mainflag = 'X' " 메인 테이블 + ). +* APPEND ls_dd02v TO lt_dd02v. + + " 2. 테이블 필드 정보 설정 + CLEAR : ls_dd03p, lv_position. + + CALL METHOD me->generate_table_field + EXPORTING + tabname = ls_crtable-tb_name + type = ls_crtable-type + position_start = lv_position + IMPORTING + cbo_dd03p = lt_dd03p + field_excepts = lt_exceipt + RECEIVING + position = lv_position. + + "배부 관련 테이블은 경영단위 구조를 참조하여 추가한다. + IF ls_crtable-type = '3' OR ls_crtable-type = '4' OR ls_crtable-type = '5' OR ls_crtable-type = '6'. + LOOP AT lt_dfies INTO DATA(dfies). "참조 테이블 필드 추가(센더/리시버/결과/전표발행 테이블 ONly) + + READ TABLE lt_exceipt WITH KEY tabname = ls_crtable-tb_name + fieldname = dfies-fieldname + TRANSPORTING NO FIELDS. + CHECK sy-subrc NE 0. " 제외 필드 인 경우에는 제외. + + CLEAR ls_dd03p. + lv_position = lv_position + 1. + ls_dd03p = VALUE #( + tabname = ls_crtable-tb_name + fieldname = dfies-fieldname + keyflag = dfies-keyflag + notnull = dfies-keyflag + rollname = dfies-rollname + reftable = SWITCH #( dfies-reftable WHEN '' THEN '' + ELSE ls_crtable-tb_name ) + reffield = dfies-reffield + ddlanguage = sy-langu + position = lv_position + ddtext = dfies-fieldtext + ). + APPEND ls_dd03p TO lt_dd03p. + ENDLOOP. + ENDIF. + + " 기술 설정(DD09L) 정보 설정 + CLEAR ls_dd09v. + ls_dd09v-tabname = ls_crtable-tb_name. + ls_dd09v-as4local = 'A'. " 활성화 상태 + ls_dd09v-tabkat = '3'. " 일반 테이블 + ls_dd09v-tabart = 'APPL1'. " 응용 프로그램 테이블 + + " DDIC 함수를 사용하여 테이블 생성 + CALL FUNCTION 'DDIF_TABL_PUT' + EXPORTING + name = ls_crtable-tb_name + dd02v_wa = ls_dd02v + dd09l_wa = ls_dd09v " 기술설정 추가 + TABLES + dd03p_tab = lt_dd03p + EXCEPTIONS + tabl_not_found = 1 + name_inconsistent = 2 + tabl_inconsistent = 3 + put_failure = 4 + put_refused = 5 + OTHERS = 6. + + IF sy-subrc <> 0. + "오류 메시지 + gv_message = TEXT-016. + MESSAGE gv_message TYPE 'E'. + ENDIF. + + " 테이블 활성화 + CALL FUNCTION 'DDIF_TABL_ACTIVATE' + EXPORTING + name = ls_crtable-tb_name + auth_chk = 'X' + EXCEPTIONS + not_found = 1 + put_failure = 2 + OTHERS = 3. + + IF sy-subrc <> 0. + "오류 메시지 + gv_message = TEXT-016. + MESSAGE gv_message TYPE 'E'. + ENDIF. + + + ENDLOOP. + + "배부 관련 테이블 구조 생성 + CALL METHOD me->create_init_structure + EXPORTING + erkrs = erkrs. + + "배부 관련 테이블 구조 생성(mandt 제외) + CALL METHOD me->create_init_structure_ex_mandt + EXPORTING + erkrs = erkrs. + + "정상 처리 완료 메시지 + gv_message = TEXT-011. + MESSAGE gv_message TYPE 'S'. + ENDMETHOD. + + + METHOD generate_table_field. + DATA : ls_dd03p TYPE dd03p. + + position = position_start. + + "공통 필드 + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'MANDT' + keyflag = 'X' + notnull = 'X' + rollname = 'MANDT' + ddlanguage = sy-langu + position = '0001' + ddtext = '클라이언트' + ). + APPEND ls_dd03p TO cbo_dd03p. + APPEND ls_dd03p TO field_excepts. + + + CASE type. + WHEN '2'. "배부 기준 정보(월별) 테이블 + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'ERKRS' + keyflag = 'X' + notnull = 'X' + rollname = 'ERKRS' + ddlanguage = sy-langu + position = position + ddtext = '경영 단위' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'PERIO' + keyflag = 'X' + notnull = 'X' + rollname = 'JAHRPER' + ddlanguage = sy-langu + position = position + ddtext = '기간/연도' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'APPLCLASS' + keyflag = 'X' + notnull = 'X' + rollname = 'APPLCLASS' + ddlanguage = sy-langu + position = position + ddtext = 'DD 오브젝트에 대한 어플리케이션 클래스 (사용되지 않음)' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'SUBCLASS' + keyflag = 'X' + notnull = 'X' + rollname = 'SUBCLASS' + ddlanguage = sy-langu + position = position + ddtext = '어플리케이션 클래스별 하위그룹' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'TABNAME' + keyflag = 'X' + notnull = 'X' + rollname = 'TABNAME' + ddlanguage = sy-langu + position = position + ddtext = '테이블이름' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'FUNC' + keyflag = 'X' + notnull = 'X' + rollname = 'COFUNC' + ddlanguage = sy-langu + position = position + ddtext = '기능' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'VARIANT' + keyflag = 'X' + notnull = 'X' + rollname = 'COVARIANT' + ddlanguage = sy-langu + position = position + ddtext = '변형' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'VTEXT' + keyflag = '' + notnull = '' + rollname = 'COVARITXT' + ddlanguage = sy-langu + position = position + ddtext = '변형이름' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'SENDER' + datatype = 'CHAR' + INTTYPE = 'C' +* INTLEN = '1' + LENG = '1' + ddlanguage = sy-langu + position = position + ddtext = '센더 데이타 추출 진행 여부' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'RECEIVER' + datatype = 'CHAR' + INTTYPE = 'C' +* INTLEN = '1' + LENG = '1' + ddlanguage = sy-langu + position = position + ddtext = '배부 기준 데이타 추출 진행 여부' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'PROC_DIST' + datatype = 'CHAR' + INTTYPE = 'C' +* INTLEN = '1' + LENG = '1' + ddlanguage = sy-langu + position = position + ddtext = '배부 수행 여부' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'POST' + datatype = 'CHAR' + INTTYPE = 'C' +* INTLEN = '1' + LENG = '1' + ddlanguage = sy-langu + position = position + ddtext = '전표 발행 수행 여부' + ). + APPEND ls_dd03p TO cbo_dd03p. + + + + WHEN '3'. "센더 테이블 + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'VARIANT' + keyflag = 'X' + notnull = 'X' + rollname = 'COVARIANT' + ddlanguage = sy-langu + position = position + ddtext = '변형' + ). + APPEND ls_dd03p TO cbo_dd03p. + APPEND ls_dd03p TO field_excepts. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'DIST_ID' + keyflag = 'X' + notnull = 'X' + rollname = 'PBR_SEQRE' + ddlanguage = sy-langu + position = position + ddtext = '배부키' + ). + APPEND ls_dd03p TO cbo_dd03p. + APPEND ls_dd03p TO field_excepts. + + + + WHEN '4'. "리시버/배부 기준 테이블 + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'VARIANT' + keyflag = 'X' + notnull = 'X' + rollname = 'COVARIANT' + ddlanguage = sy-langu + position = position + ddtext = '변형' + ). + APPEND ls_dd03p TO cbo_dd03p. + APPEND ls_dd03p TO field_excepts. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'DIST_ID' + keyflag = 'X' + notnull = 'X' + rollname = 'PBR_SEQRE' + ddlanguage = sy-langu + position = position + ddtext = '배부키' + ). + APPEND ls_dd03p TO cbo_dd03p. + APPEND ls_dd03p TO field_excepts. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'SEQ' + keyflag = 'X' + notnull = 'X' + rollname = 'PU12_SEQNR' + ddlanguage = sy-langu + position = position + ddtext = '순번' + ). + APPEND ls_dd03p TO cbo_dd03p. + APPEND ls_dd03p TO field_excepts. + + + + WHEN '5'. "배부 결과 테이블 + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'VARIANT' + keyflag = 'X' + notnull = 'X' + rollname = 'COVARIANT' + ddlanguage = sy-langu + position = position + ddtext = '변형' + ). + APPEND ls_dd03p TO cbo_dd03p. + APPEND ls_dd03p TO field_excepts. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'DIST_ID' + keyflag = 'X' + notnull = 'X' + rollname = 'PBR_SEQRE' + ddlanguage = sy-langu + position = position + ddtext = '배부키' + ). + APPEND ls_dd03p TO cbo_dd03p. + APPEND ls_dd03p TO field_excepts. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'SEQ' + keyflag = 'X' + notnull = 'X' + rollname = 'PU12_SEQNR' + ddlanguage = sy-langu + position = position + ddtext = '순번' + ). + APPEND ls_dd03p TO cbo_dd03p. + APPEND ls_dd03p TO field_excepts. + + + + WHEN '6'. "전표 발행 대상 테이블 + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'VARIANT' + keyflag = 'X' + notnull = 'X' + rollname = 'COVARIANT' + ddlanguage = sy-langu + position = position + ddtext = '변형' + ). + APPEND ls_dd03p TO cbo_dd03p. + APPEND ls_dd03p TO field_excepts. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'DIST_ID' + keyflag = 'X' + notnull = 'X' + rollname = 'PBR_SEQRE' + ddlanguage = sy-langu + position = position + ddtext = '배부키' + ). + APPEND ls_dd03p TO cbo_dd03p. + APPEND ls_dd03p TO field_excepts. + + + + WHEN '7'. "배부 기준 세부 정보 테이블(STD->CBO) + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'ERKRS' + keyflag = 'X' + notnull = 'X' + rollname = 'ERKRS' + ddlanguage = sy-langu + position = position + ddtext = '경영 단위' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'PERIO' + keyflag = 'X' + notnull = 'X' + rollname = 'JAHRPER' + ddlanguage = sy-langu + position = position + ddtext = '기간/연도' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'APPLCLASS' + keyflag = 'X' + notnull = 'X' + rollname = 'APPLCLASS' + ddlanguage = sy-langu + position = position + ddtext = 'DD 오브젝트에 대한 어플리케이션 클래스 (사용되지 않음)' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'SUBCLASS' + keyflag = 'X' + notnull = 'X' + rollname = 'SUBCLASS' + ddlanguage = sy-langu + position = position + ddtext = '어플리케이션 클래스별 하위그룹' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'TABNAME' + keyflag = 'X' + notnull = 'X' + rollname = 'TABNAME' + ddlanguage = sy-langu + position = position + ddtext = '테이블이름' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'FUNC' + keyflag = 'X' + notnull = 'X' + rollname = 'COFUNC' + ddlanguage = sy-langu + position = position + ddtext = '기능' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'VARIANT' + keyflag = 'X' + notnull = 'X' + rollname = 'COVARIANT' + ddlanguage = sy-langu + position = position + ddtext = '변형' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'SORT' + keyflag = 'X' + notnull = 'X' + rollname = 'RKE_LFD4' + ddlanguage = sy-langu + position = position + ddtext = '순번' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'FNAM' + keyflag = 'X' + notnull = 'X' + rollname = 'FIELDNAME' + ddlanguage = sy-langu + position = position + ddtext = '필드 이름' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'SIGN' + keyflag = 'X' + notnull = 'X' + rollname = 'RALDB_SIGN' + ddlanguage = sy-langu + position = position + ddtext = 'SELECT-OPTIONS 테이블생성에서 부호필드' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'OPTIONN' + keyflag = 'X' + notnull = 'X' + rollname = 'RALDB_OPTI' + ddlanguage = sy-langu + position = position + ddtext = 'SELECT-OPTIONS 테이블구조의 OPTION 필드' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'LOW' + keyflag = 'X' + notnull = 'X' + rollname = 'RKE_LOW_L' + ddlanguage = sy-langu + position = position + ddtext = '특성 값 하한' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'HIGH' + keyflag = 'X' + notnull = 'X' + rollname = 'RKE_HIGH_L' + ddlanguage = sy-langu + position = position + ddtext = '특성값 상한선 (간격내에서만)' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'LOWTX' + keyflag = '' + notnull = '' + rollname = 'SCRTEXT_M' + ddlanguage = sy-langu + position = position + ddtext = '중간 필드 레이블' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'HIGHTX' + keyflag = '' + notnull = '' + rollname = 'SCRTEXT_M' + ddlanguage = sy-langu + position = position + ddtext = '중간 필드 레이블' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'CDATE' + keyflag = '' + notnull = '' + rollname = 'CDATE' + ddlanguage = sy-langu + position = position + ddtext = '생성일' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'CTIME' + keyflag = '' + notnull = '' + rollname = 'CTME' + ddlanguage = sy-langu + position = position + ddtext = '생성 시간' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'CNAME' + keyflag = '' + notnull = '' + rollname = 'CRNAM' + ddlanguage = sy-langu + position = position + ddtext = '생성자' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'UDATE' + keyflag = '' + notnull = '' + rollname = 'RTC_DATE_M' + ddlanguage = sy-langu + position = position + ddtext = '수정일' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'UTIME' + keyflag = '' + notnull = '' + rollname = 'AEZET' + ddlanguage = sy-langu + position = position + ddtext = '최종변경시간' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'UNAME' + keyflag = '' + notnull = '' + rollname = 'UPNAME' + ddlanguage = sy-langu + position = position + ddtext = '최종변경인' + ). + APPEND ls_dd03p TO cbo_dd03p. + + + + + WHEN '8'. "배부 조건 Custimizing 테이블 + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'ERKRS' + keyflag = 'X' + notnull = 'X' + rollname = 'ERKRS' + ddlanguage = sy-langu + position = position + ddtext = '경영 단위' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'PERFROM' + keyflag = 'X' + notnull = 'X' + rollname = 'JAHRPER' + ddlanguage = sy-langu + position = position + ddtext = '기간/연도 FROM' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'PERTO' + keyflag = 'X' + notnull = 'X' + rollname = 'JAHRPER' + ddlanguage = sy-langu + position = position + ddtext = '기간/연도 TO' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'APPLCLASS' + keyflag = 'X' + notnull = 'X' + rollname = 'APPLCLASS' + ddlanguage = sy-langu + position = position + ddtext = 'DD 오브젝트에 대한 어플리케이션 클래스 (사용되지 않음)' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'SUBCLASS' + keyflag = 'X' + notnull = 'X' + rollname = 'SUBCLASS' + ddlanguage = sy-langu + position = position + ddtext = '어플리케이션 클래스별 하위그룹' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'TABNAME' + keyflag = 'X' + notnull = 'X' + rollname = 'TABNAME' + ddlanguage = sy-langu + position = position + ddtext = '테이블이름' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'FUNC' + keyflag = 'X' + notnull = 'X' + rollname = 'COFUNC' + ddlanguage = sy-langu + position = position + ddtext = '기능' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'VARIANT' + keyflag = 'X' + notnull = 'X' + rollname = 'COVARIANT' + ddlanguage = sy-langu + position = position + ddtext = '변형' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'SORT' + keyflag = 'X' + notnull = 'X' + rollname = 'RKE_LFD4' + ddlanguage = sy-langu + position = position + ddtext = '순번' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'FNAM' + keyflag = 'X' + notnull = 'X' + rollname = 'FIELDNAME' + ddlanguage = sy-langu + position = position + ddtext = '필드 이름' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'SIGN' + keyflag = 'X' + notnull = 'X' + rollname = 'RALDB_SIGN' + ddlanguage = sy-langu + position = position + ddtext = 'SELECT-OPTIONS 테이블생성에서 부호필드' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'OPTIONN' + keyflag = 'X' + notnull = 'X' + rollname = 'RALDB_OPTI' + ddlanguage = sy-langu + position = position + ddtext = 'SELECT-OPTIONS 테이블구조의 OPTION 필드' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'LOW' + keyflag = 'X' + notnull = 'X' + rollname = 'RKE_LOW_L' + ddlanguage = sy-langu + position = position + ddtext = '특성 값 하한' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'HIGH' + keyflag = 'X' + notnull = 'X' + rollname = 'RKE_HIGH_L' + ddlanguage = sy-langu + position = position + ddtext = '특성값 상한선 (간격내에서만)' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'LOWTX' + keyflag = '' + notnull = '' + rollname = 'SCRTEXT_M' + ddlanguage = sy-langu + position = position + ddtext = '중간 필드 레이블' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'HIGHTX' + keyflag = '' + notnull = '' + rollname = 'SCRTEXT_M' + ddlanguage = sy-langu + position = position + ddtext = '중간 필드 레이블' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'CDATE' + keyflag = '' + notnull = '' + rollname = 'CDATE' + ddlanguage = sy-langu + position = position + ddtext = '생성일' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'CTIME' + keyflag = '' + notnull = '' + rollname = 'CTME' + ddlanguage = sy-langu + position = position + ddtext = '생성 시간' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'CNAME' + keyflag = '' + notnull = '' + rollname = 'CRNAM' + ddlanguage = sy-langu + position = position + ddtext = '생성자' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'UDATE' + keyflag = '' + notnull = '' + rollname = 'RTC_DATE_M' + ddlanguage = sy-langu + position = position + ddtext = '수정일' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'UTIME' + keyflag = '' + notnull = '' + rollname = 'AEZET' + ddlanguage = sy-langu + position = position + ddtext = '최종변경시간' + ). + APPEND ls_dd03p TO cbo_dd03p. + + position = position + 1. + ls_dd03p = VALUE #( + tabname = tabname + fieldname = 'UNAME' + keyflag = '' + notnull = '' + rollname = 'UPNAME' + ddlanguage = sy-langu + position = position + ddtext = '최종변경인' + ). + APPEND ls_dd03p TO cbo_dd03p. + + ENDCASE. + ENDMETHOD. + + + METHOD get_package_info. + DATA: ls_mng_table TYPE ty_mng_table, + lv_tabname TYPE tabname. + + FIELD-SYMBOLS: TYPE ANY TABLE. + + IF erkrs IS INITIAL . + gv_message = TEXT-012. + MESSAGE gv_message TYPE 'E'. + ENDIF. + + gv_source = |CE1{ erkrs }|. + + CALL FUNCTION 'ZTOPDOWN_ENV' + IMPORTING + tb_name = lv_tabname. + + SELECT type, + tbname, + text + FROM (lv_tabname) + WHERE erkrs = @erkrs + INTO TABLE NEW @DATA(lt_mng_table). "런타임시 구조 결정 + + IF sy-subrc NE 0. + " 오류 메시지 추가 + result = VALUE #( + type = 'E' + id = 'FAIL' + number = '000' + message = '관리 테이블 정보 조회 오류' ). + EXIT. + ENDIF. + + ASSIGN lt_mng_table->* TO . + + FIELD-SYMBOLS : TYPE any, + TYPE any, + TYPE any. + + LOOP AT ASSIGNING FIELD-SYMBOL(). + "TYPE 필드 동적 할당 + ASSIGN COMPONENT 'TYPE' OF STRUCTURE TO . + ASSIGN COMPONENT 'TBNAME' OF STRUCTURE TO . + ASSIGN COMPONENT 'TEXT' OF STRUCTURE TO . + CASE . + WHEN '1'. + gv_manager = . + WHEN '2'. + gv_variant = . + WHEN '3'. + gv_sender = . + WHEN '4'. + gv_receiver = . + WHEN '5'. + gv_result = . + WHEN '6'. + gv_target = . + WHEN '7'. + gv_distinfo = . + WHEN '8'. + gv_distrule = . + ENDCASE. + + ls_mng_table = VALUE #( + type = + tb_name = + text = ). + APPEND ls_mng_table TO gt_mng_table. + + ENDLOOP. + + " 성공 메시지 추가 + gv_message = TEXT-013. + result = VALUE #( + type = 'S' + id = 'SUCCESS' + number = '000' + message = gv_message ). + ENDMETHOD. + + + METHOD start_package_install. + + IF erkrs IS INITIAL OR tabname IS INITIAL OR function_group IS INITIAL. + gv_message = TEXT-012. + MESSAGE gv_message TYPE 'E'. + ENDIF. + + + +* 1. Domain & Data Elements 생성 + IF create_element_yn EQ 'X'. + CALL METHOD me->create_init_data_elements + RECEIVING + result = result. + + IF result-type <> 'S'. + "오류 발생. + gv_message = TEXT-008. + MESSAGE gv_message TYPE 'E'. + ENDIF. + ENDIF. + +* 2. 관리 테이블 생성 + IF create_table_yn EQ 'X'. + CALL METHOD me->create_init_data_table + EXPORTING + erkrs = erkrs + tabname = tabname + RECEIVING + result = result. + + IF result-type <> 'S'. + "오류 발생. + gv_message = TEXT-009. + MESSAGE gv_message TYPE 'E'. + ENDIF. + ENDIF. + +* 3. 관리 테이블 코드값 리턴 함수 생성. + IF create_function_yn EQ 'X'. + CALL METHOD me->create_init_function + EXPORTING + function_group = function_group + tabname = tabname + RECEIVING + result = result. + + IF result-type <> 'S'. + "오류 발생. + gv_message = TEXT-010. + MESSAGE gv_message TYPE 'E'. + ENDIF. + ENDIF. + + + + "정상 처리 완료 메시지 + gv_message = TEXT-011. + MESSAGE gv_message TYPE 'S'. + ENDMETHOD. +ENDCLASS. diff --git a/src/zcl_copa_topdown_install.clas.xml b/src/zcl_copa_topdown_install.clas.xml new file mode 100644 index 0000000..7851161 --- /dev/null +++ b/src/zcl_copa_topdown_install.clas.xml @@ -0,0 +1,203 @@ + + + + + + ZCL_COPA_TOPDOWN_INSTALL + E + ZCL_COPA_TOPDOWN 환경 구성(초기세팅) + 1 + X + X + X + + + + I + 001 + 경영단위를 등록하십시요. + 23 + + + I + 002 + VARIANT 코드를 등록하십시요. + 29 + + + I + 003 + VARIANT 정보를 확인하십시요. + 29 + + + I + 004 + Data saved successfully. + 48 + + + I + 005 + Error saving data. + 28 + + + I + 006 + 등록된 데이타가 존재합니다. 삭제 후 재 처리 하시겠습니까? + 66 + + + I + 007 + 데이타가 존재하지 않습니다. 확인 후 다시 처리 하십시요. + 64 + + + I + 008 + 클래스 환경 구성을 위한 Data Elements (Domain) 생성 오류 + 84 + + + I + 009 + 클래스 환경 구성을 위한 관리 테이블 생성 오류 + 52 + + + I + 010 + 클래스 환경 구성을 위한 함수 생성 오류 + 44 + + + I + 011 + 클래스 운영을 위한 환경 구성이 완료되었습니다. + 52 + + + I + 012 + 필수 Import 파라메타 값을 지정하여야 합니다. + 56 + + + I + 013 + 클래스 환경 구성 정보 추출 성공하였습니다. + 48 + + + I + 014 + 클래스 환경 구성 정보 조회시 오류가 발생하였습니다. + 58 + + + I + 015 + 데이타 조회 과정에서 오류가 발생하였습니다. + 48 + + + I + 016 + 처리 중 오류가 발생하였습니다. + 27 + + + I + 017 + CO-PA 하향식 배부 추가 기능을 지원하기 위한 환경 구축 작업을 수행합니다. + 88 + + + I + 018 + 이미 서비스를 사용중인 경우에는 다시 수행하지 마십시요. 재 수행시 심각한 문제가 발생할 수 있습니다. + 114 + + + + + CONSTRUCTOR + E + CONSTRUCTOR + + + CREATE_INIT_STRUCTURE + E + 2-1. 구조(Structure) 생성 + + + CREATE_INIT_STRUCTURE_EX_MANDT + E + 2-1. 구조(Structure) 생성(MANDT제외) + + + CREATE_INIT_TABLE + E + 2. 패키지 운영 DB TABLE 생성 + + + GV_DISTINFO + E + 배부 기준 세부 정보 테이블 + + + GV_DISTRULE + E + 배부 조건 Customizing + + + GV_MANAGER + E + Package 전용 테이블 관리 테이블 명 + + + GV_RECEIVER + E + 리시버(배부기준) 테이블 명 + + + GV_RESULT + E + 배부 결과 테이블 명 + + + GV_SENDER + E + 센더 테이블 명 + + + GV_SOURCE + E + 경영단위 CE1 테이블 + + + GV_TARGET + E + 전표 발행 대상 테이블 명 + + + GV_VARIANT + E + 월별 배부 기준 정보 테이블 명 + + + START_PACKAGE_INSTALL + E + 1. 패키지 기본 환경 구축 + + + WORKING_INFO + E + 클래스 메소드 수행을 위한 공용 정보 + + + + +