일괄 번역 편집기
MASS_TRANSLATE
다국어 적용을 위해 ABAP Object(Program, Function, Class, Table 등) 이나 Roll에 다른 언어의 텍스트를 입력하고자 할 경우 SAP 표준 기능을 가지고 하기에는 상당히 번거롭고 작업 여부를 체크하기에도 편리하지 않습니다.
다국어 적용을 위해 많은 프로젝트에서 CBO로 프로그램을 만들어 Package내의 모든 항목을 일괄로 조회/변경하는 식으로 작업을 합니다.
CBO 프로그램에서 타 언어의 텍스트를 저장한 후 T-Code : SLXT 에서 Package별로 Workbench CTS를 생성하는 방식으로 사용하면 됩니다.
해당 소스코드에 사용된 공통 기능들은 블로그내의 아래 게시물 내용을 참고하면 됩니다.
ALV Common Include
2023.09.05 - [ABAP/소스코드] - [Include] ALV용 Common Include
Excel 파일 업로드 Function
2023.07.10 - [ABAP/소스코드] - [Function] ZCM_EXCEL_UPLOAD - 필드 점검 및 변환 엑셀 업로드
Internal Table Excel 다운로드 Class
2023.11.15 - [ABAP/소스코드] - [Class] Internal Table 엑셀 다운로드(XLSX 형식)
# 소스코드
*&---------------------------------------------------------------------*
*& Report ZMASS_TRANSLATE
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZMASS_TRANSLATE MESSAGE-ID YISPIMS01.
INCLUDE ZCM_ALV.
INCLUDE ZMASS_TRANSLATE_TOP.
INCLUDE ZMASS_TRANSLATE_ALV.
INCLUDE ZMASS_TRANSLATE_C01.
INCLUDE ZMASS_TRANSLATE_F01.
INCLUDE ZMASS_TRANSLATE_I01.
INCLUDE ZMASS_TRANSLATE_O01.
"Initialization
INITIALIZATION.
PERFORM INITIALIZATION.
"Selection Screen의 PBO
AT SELECTION-SCREEN OUTPUT.
PERFORM AT_SELECTION_SCREEN_OUTPUT.
"Selection Screen의 PAI
AT SELECTION-SCREEN.
PERFORM AT_SELECTION_SCREEN.
AT SELECTION-SCREEN ON S_OBJE.
IF S_OBJE-LOW IS NOT INITIAL AND NOT LINE_EXISTS( GT_F4_OBJ[ OBJECT = S_OBJE-LOW ] ).
MESSAGE E004.
ENDIF.
IF S_OBJE-HIGH IS NOT INITIAL AND NOT LINE_EXISTS( GT_F4_OBJ[ OBJECT = S_OBJE-HIGH ] ).
MESSAGE E004.
ENDIF.
AT SELECTION-SCREEN ON S_LOBJ.
IF S_LOBJ-LOW IS NOT INITIAL AND NOT LINE_EXISTS( GT_F4_LXE[ LXE_OBJTYPE = S_LOBJ-LOW ] ).
MESSAGE E004.
ENDIF.
IF S_LOBJ-HIGH IS NOT INITIAL AND NOT LINE_EXISTS( GT_F4_LXE[ LXE_OBJTYPE = S_LOBJ-HIGH ] ).
MESSAGE E004.
ENDIF.
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR <selection screen field>. "Field F4
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILEN.
PERFORM F4_FILE USING P_FILEN.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_OBJE-LOW .
PERFORM F4_OBJECT.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_OBJE-HIGH .
PERFORM F4_OBJECT.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_LOBJ-LOW.
PERFORM F4_LXE_OBJTYPE.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_LOBJ-HIGH.
PERFORM F4_LXE_OBJTYPE.
"Start of Selection(F8)
START-OF-SELECTION.
IF P_OBJ IS NOT INITIAL AND S_DEVC[] IS INITIAL.
MESSAGE S055(00) DISPLAY LIKE 'E'.
EXIT.
ENDIF.
PERFORM GET_DATA .
IF P_FILEN IS NOT INITIAL.
PERFORM EXCEL_UPLOAD.
ENDIF.
"End of Selection(Screen Display)
END-OF-SELECTION.
IF GT_DISP[] IS INITIAL.
MESSAGE S005 DISPLAY LIKE 'E'.
ELSE.
PERFORM CM_ALV_REFRESH USING GO_GRID SPACE 'A'.
CALL SCREEN 100.
ENDIF.
*&---------------------------------------------------------------------*
*& Include ZMASS_TRANSLATE_TOP
*&---------------------------------------------------------------------*
TYPE-POOLS : ICON.
TABLES: SSCRFIELDS, LXE_ATTOB, TADIR, AGR_DEFINE.
TYPES: BEGIN OF T_OBJ_LXE_MAP,
LXE_OBJTYPE TYPE LXE_ATTOB-OBJ_TYPE, "번역 오브젝트 유형
KTEXT TYPE LXE_ATTOBT-KTEXT,
OBJECT TYPE TADIR-OBJECT, "오브젝트 유형
OBJECT_T TYPE AS4TEXT,
END OF T_OBJ_LXE_MAP.
TYPES: BEGIN OF T_OBJ_F4,
OBJECT TYPE TADIR-OBJECT, "오브젝트 유형
OBJECT_T TYPE AS4TEXT,
END OF T_OBJ_F4.
TYPES: BEGIN OF T_LXE_F4,
LXE_OBJTYPE TYPE LXE_ATTOB-OBJ_TYPE,
KTEXT TYPE LXE_ATTOBT-KTEXT,
END OF T_LXE_F4.
TYPES: BEGIN OF T_LXE_OBJECT,
DEVCLASS TYPE DEVCLASS, "개발클래스
OBJECT TYPE TADIR-OBJECT, "오브젝트 유형
OBJ_NAME TYPE TADIR-OBJ_NAME, "오브젝트
OBJ_DESC TYPE AS4TEXT, "오브젝트 내역
LXE_OBJTYPE TYPE LXE_ATTOB-OBJ_TYPE, "번역 오브젝트 유형
LXE_KTEXT TYPE AS4TEXT, "번역 오브젝트 유형 내역
LXE_OBJNAME TYPE LXEOBJNAME, "번역 오브젝트
TEXTKEY TYPE LXE_PCX_S1-TEXTKEY, "번역 오브젝트 텍스트 키
M_LANG TYPE TADIR-MASTERLANG, "Master Language
S_LANG TYPE T002-SPRAS, "Source Language
S_TEXT TYPE LXE_PCX_S1-S_TEXT,
T_LANG TYPE T002-SPRAS, "Target Language
T_TEXT TYPE LXE_PCX_S1-T_TEXT,
END OF T_LXE_OBJECT.
TYPES: BEGIN OF T_DISP.
INCLUDE TYPE T_LXE_OBJECT.
TYPES: LXE_COLLNAME TYPE LXECOLLNAM, "언어 컬렉션
STATUS TYPE ICONNAME,
MESSAGE TYPE BAPI_MSG.
TYPES: INFO_FIELD(4) TYPE C,
EXCP_FIELD TYPE C,
END OF T_DISP.
DATA: GT_DISP TYPE STANDARD TABLE OF T_DISP WITH EMPTY KEY WITH NON-UNIQUE SORTED KEY EXCP COMPONENTS EXCP_FIELD,
GS_DISP LIKE LINE OF GT_DISP.
DATA: GT_OBJ_LXE_MAP TYPE SORTED TABLE OF T_OBJ_LXE_MAP WITH UNIQUE KEY OBJECT LXE_OBJTYPE,
GT_F4_OBJ TYPE STANDARD TABLE OF T_OBJ_F4,
GT_F4_LXE TYPE STANDARD TABLE OF T_LXE_F4.
DATA: GT_EXCEL TYPE STANDARD TABLE OF T_LXE_OBJECT.
DATA: GR_OBJECT TYPE RANGE OF TADIR-OBJECT,
GR_LXE_OBJTYPE TYPE RANGE OF LXE_ATTOB-OBJ_TYPE.
DATA: GV_SLANG TYPE LXEISOLANG,
GV_TLANG TYPE LXEISOLANG.
DATA: GT_STATUS_EXCLUDE TYPE TABLE OF SY-UCOMM.
DATA: OK_CODE TYPE SY-UCOMM.
*-----------------------------------------------------------------------
* ALV Global Variants
*-----------------------------------------------------------------------
CONSTANTS: GC_HANDLE_0100 TYPE SLIS_HANDL VALUE '0100'.
*-----------------------------------------------------------------------
* DEFINE
*-----------------------------------------------------------------------
DEFINE _MAKE_RANGE.
&1-SIGN = &2.
&1-OPTION = &3.
&1-LOW = &4.
&1-HIGH = &5.
APPEND &1. CLEAR &1.
END-OF-DEFINITION.
DEFINE _EXCP_FIELD.
&3 = COND #( WHEN &2 IS INITIAL THEN '1'
WHEN &1 EQ &2 THEN '2'
ELSE '3' ).
END-OF-DEFINITION.
*-----------------------------------------------------------------------
* SELECTION-SCREEN
*-----------------------------------------------------------------------
SELECTION-SCREEN FUNCTION KEY 1. "Function Key1 (SSCRFIELDS-FUNCTXT_01)
SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-BL1.
PARAMETERS: P_OBJ RADIOBUTTON GROUP RB1 USER-COMMAND RB1,
P_ROL RADIOBUTTON GROUP RB1.
SELECTION-SCREEN END OF BLOCK BL1.
SELECTION-SCREEN BEGIN OF BLOCK BL2 WITH FRAME TITLE TEXT-BL2.
SELECT-OPTIONS: S_DEVC FOR TADIR-DEVCLASS MODIF ID OB0, " Package
S_OBJE FOR TADIR-OBJECT MODIF ID OB1, " 오브젝트 유형
S_NAME FOR TADIR-OBJ_NAME MODIF ID OB1. " 오브젝트
PARAMETERS P_OBJE TYPE TADIR-OBJECT DEFAULT 'ACGR' MODIF ID RO2.
SELECT-OPTIONS: S_ROLL FOR AGR_DEFINE-AGR_NAME MODIF ID RO1, " ROLL
S_USER FOR TADIR-AUTHOR, " 오브젝트 생성자
S_LOBJ FOR LXE_ATTOB-OBJ_TYPE MODIF ID OB1. " 번역 오브젝트 유형
PARAMETERS P_LOBJ TYPE LXE_ATTOB-OBJ_TYPE DEFAULT 'ACGR' MODIF ID RO2.
SELECTION-SCREEN SKIP .
PARAMETERS: P_SLANG TYPE T002-SPRAS OBLIGATORY, " Source Language
P_TLANG TYPE T002-SPRAS OBLIGATORY, " Target Language
P_FILEN LIKE RLGRAP-FILENAME MODIF ID UPL,
P_CHECK AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK BL2.
*&---------------------------------------------------------------------*
*& Include ZMASS_TRANSLATE_ALV
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form HANDLE_TOOLBAR
*&---------------------------------------------------------------------*
* ALV 툴바에 버튼 추가
*----------------------------------------------------------------------*
FORM HANDLE_TOOLBAR USING ALV_ID "각 ALV 구분을 위한 값
E_OBJECT Type Ref To CL_ALV_EVENT_TOOLBAR_SET
E_INTERACTIVE Type CHAR01.
CASE ALV_ID.
WHEN GC_HANDLE_0100.
APPEND VALUE #( BUTN_TYPE = 0
FUNCTION = 'EXCEL'
ICON = ICON_XLS
QUICKINFO = SWITCH #( SY-LANGU WHEN '3' THEN '엑셀' ELSE 'Excel' )
TEXT = SWITCH #( SY-LANGU WHEN '3' THEN '엑셀 다운로드' ELSE 'Download Excel' ) ) TO E_OBJECT->MT_TOOLBAR.
APPEND VALUE #( BUTN_TYPE = 3 ) TO E_OBJECT->MT_TOOLBAR.
APPEND VALUE #( BUTN_TYPE = 0 "0 : 버튼, 3 : Separator
FUNCTION = 'CP_TEXT' "ALV User-Command 의 E_UCOMM 값
ICON = ICON_SYSTEM_COPY "버튼에 표시할 아이콤
QUICKINFO = SWITCH #( SY-LANGU WHEN '3' THEN '텍스트 복사' ELSE 'Text Copy' ) "툴팁
TEXT = SWITCH #( SY-LANGU WHEN '3' THEN '선택 텍스트 복사' ELSE 'Copy selected text' ) ) TO E_OBJECT->MT_TOOLBAR.
APPEND VALUE #( BUTN_TYPE = 0
FUNCTION = 'SAVE'
ICON = ICON_SYSTEM_SAVE
QUICKINFO = SWITCH #( SY-LANGU WHEN '3' THEN '저장' ELSE 'Save' )
TEXT = SWITCH #( SY-LANGU WHEN '3' THEN '선택 항목 저장' ELSE 'Save selected rows' ) ) TO E_OBJECT->MT_TOOLBAR.
APPEND VALUE #( BUTN_TYPE = 3 ) TO E_OBJECT->MT_TOOLBAR.
APPEND VALUE #( BUTN_TYPE = 0
FUNCTION = 'REFRESH'
ICON = ICON_REFRESH
QUICKINFO = SWITCH #( SY-LANGU WHEN '3' THEN '새로고침' ELSE 'Refresh' )
TEXT = SWITCH #( SY-LANGU WHEN '3' THEN '새로고침' ELSE 'Refresh' ) ) TO E_OBJECT->MT_TOOLBAR.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form HANDLE_USER_COMMAND
*&---------------------------------------------------------------------*
* ALV User Command
*----------------------------------------------------------------------*
FORM HANDLE_USER_COMMAND USING ALV_ID "각 ALV 구분을 위한 값
E_UCOMM TYPE SY-UCOMM.
CASE ALV_ID.
WHEN GC_HANDLE_0100.
GO_GRID->CHECK_CHANGED_DATA( ).
GO_GRID->GET_SELECTED_ROWS( IMPORTING ET_INDEX_ROWS = DATA(LT_ROWS) ).
DELETE LT_ROWS WHERE ROWTYPE IS NOT INITIAL.
DATA: LS_ROWS LIKE LINE OF LT_ROWS,
LV_ANSWER TYPE C.
FIELD-SYMBOLS <LFS_DISP> LIKE LINE OF GT_DISP.
CASE E_UCOMM.
WHEN 'CP_TEXT'.
IF LT_ROWS[] IS INITIAL.
MESSAGE S006 DISPLAY LIKE 'E'.
EXIT.
ENDIF.
LOOP AT LT_ROWS INTO LS_ROWS.
READ TABLE GT_DISP ASSIGNING <LFS_DISP> INDEX LS_ROWS-INDEX.
IF SY-SUBRC NE 0.
CONTINUE.
ENDIF.
<LFS_DISP>-T_TEXT = <LFS_DISP>-S_TEXT.
ENDLOOP.
WHEN 'SAVE'.
IF LT_ROWS[] IS INITIAL.
MESSAGE S006 DISPLAY LIKE 'E'.
EXIT.
ENDIF.
PERFORM SAVE_TRANSLATE USING LT_ROWS.
WHEN 'EXCEL'.
GT_EXCEL = CORRESPONDING #( GT_DISP ).
"엑셀 다운로드
ZCL_ITAB_TO_EXCEL=>DOWNLOAD( EXPORTING IT_ITAB = GT_EXCEL
IT_FIELDCAT = GT_FIELD_CAT
IV_AUTO_OPEN = 'X' ).
EXIT.
WHEN 'REFRESH'.
CLEAR LT_ROWS.
PERFORM GET_DATA.
GO_GRID->SET_GRIDTITLE( GV_GRID_TITLE ).
ENDCASE.
PERFORM CM_ALV_REFRESH USING GO_GRID ' ' 'A'.
IF LT_ROWS[] IS NOT INITIAL.
GO_GRID->SET_SELECTED_ROWS( EXPORTING IT_INDEX_ROWS = LT_ROWS ).
ENDIF.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form HANDLE_ONF4
*&---------------------------------------------------------------------*
* ALV Field F4
*----------------------------------------------------------------------*
FORM HANDLE_ONF4 USING ALV_ID "각 ALV 구분을 위한 값
E_FIELDNAME Type LVC_FNAME
E_FIELDVALUE Type LVC_VALUE
ES_ROW_NO Type LVC_S_ROID
ER_EVENT_DATA Type Ref To CL_ALV_EVENT_DATA
ET_BAD_CELLS Type LVC_T_MODI
E_DISPLAY Type CHAR01.
DATA: LT_RETURN TYPE STANDARD TABLE OF DDSHRETVAL,
LS_RETURN LIKE LINE OF LT_RETURN.
FIELD-SYMBOLS : <LFT> TYPE LVC_T_MODI.
"Event was Handled 속성
ER_EVENT_DATA->M_EVENT_HANDLED = 'X'.
CASE ALV_ID.
WHEN GC_HANDLE_0100.
CASE E_FIELDNAME.
WHEN 'OBJECT'.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'OBJECT'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = GT_F4_OBJ
RETURN_TAB = LT_RETURN
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
WHEN 'LXE_OBJTYPE'.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'LXE_OBJTYPE'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = GT_F4_LXE
RETURN_TAB = LT_RETURN
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
ENDCASE.
ENDCASE.
IF E_DISPLAY NE 'X'.
READ TABLE LT_RETURN INTO LS_RETURN INDEX 1.
"탐색도움말에서 선택한 값으로 화면 업데이트
ASSIGN ER_EVENT_DATA->M_DATA->* TO <LFT>.
IF <LFT> IS ASSIGNED.
APPEND VALUE #( ROW_ID = ES_ROW_NO-ROW_ID
FIELDNAME = E_FIELDNAME
VALUE = LS_RETURN-FIELDVAL ) TO <LFT>.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CREATE_OBJECT_ALV_0100
*&---------------------------------------------------------------------*
* Docking Container - Full screen
*----------------------------------------------------------------------*
FORM CREATE_OBJECT_ALV_0100 .
CHECK GO_DOCKING_CONTAINER IS INITIAL.
"Container Create
PERFORM CM_CREATE_DOCKING_CONTAINER USING GO_DOCKING_CONTAINER 'TOP' 2000.
"ALV Object Create
PERFORM CM_CREATE_ALV_GRID USING GO_DOCKING_CONTAINER GO_GRID.
"ALV Variant
GS_VARIANT = VALUE #( REPORT = SY-REPID
HANDLE = GC_HANDLE_0100
USERNAME = SY-UNAME ).
"ALV LAUOUT
GS_LAYOUT = VALUE #( ZEBRA = ' ' "줄무늬 패턴
SEL_MODE = 'A' "선택 모드
CWIDTH_OPT = 'X' "열너비 최적화
SMALLTITLE = 'X' "작은 ALV 제목
GRID_TITLE = GV_GRID_TITLE
INFO_FNAME = 'INFO_FIELD'
EXCP_FNAME = 'EXCP_FIELD'
).
"Field Catalog - Default Values
PERFORM CM_CREATE_FIELD_CAT_BY_ITAB USING GT_DISP CHANGING GT_FIELD_CAT.
"ALV Function key Exclude
PERFORM CM_SET_ALV_EXCLUDE_DEFAULT USING GT_EXCLUDE.
"ALV Sort
PERFORM CM_SET_ALV_SORT USING: GT_SORT 'DEVCLASS' 'X' SPACE SPACE,
GT_SORT 'OBJECT' 'X' SPACE SPACE,
GT_SORT 'OBJ_NAME' 'X' SPACE SPACE.
*S> 로컬 서브루틴 - 각 프로그램의 상황에 맞도록 로컬 서브루틴을 만들어서 진행
"Field Catalog - User Define
PERFORM SET_FIELD_CATALOG_0100 CHANGING GT_FIELD_CAT.
"ALV F4 Fields
PERFORM SET_ALV_F4_FIELD_0100 USING GO_GRID CHANGING GT_FIELD_CAT.
*E> 로컬 서브루틴
"ALV의 초기 편집/조회 상태
* GO_GRID->SET_READY_FOR_INPUT( 0 ). "O : 조회, 1 : 편집
"Event Handler
PERFORM CM_SET_EVENT_HANDLER USING GO_GRID GC_HANDLE_0100
'X' "TOOLBAR
'X' "USER_COMMAND
' ' "DATA_CHANGED
' ' "DATA_CHANGED_FINISHED
' ' "DOUBLE_CLICK
' ' "HOTSPOT_CLICK
'X' "ON_F4
' ' "BUTTON_CLICK
' ' "EVT_ENTER
' ' ."EVT_MODIFIED.
PERFORM CM_DISPLAY_ALV_GRID USING GO_GRID "ALV GRID
GS_VARIANT "ALV Variant
'A' "레이아웃 저장 옵션
'X' "기본 레이아웃 저장 여부
GS_LAYOUT "ALV Layout Setting
GT_EXCLUDE "ALV Function Key Exclude
GT_DISP[]
GT_FIELD_CAT
GT_SORT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_FIELD_CATALOG_0100
*&---------------------------------------------------------------------*
* 필드카타로그 수정
*----------------------------------------------------------------------*
FORM SET_FIELD_CATALOG_0100 CHANGING PT_FIELDCAT TYPE LVC_T_FCAT.
LOOP AT PT_FIELDCAT ASSIGNING FIELD-SYMBOL(<LFS>).
CASE <LFS>-FIELDNAME.
WHEN 'LXE_COLLNAME'.
<LFS>-TECH = 'X'.
WHEN 'M_LANG'.
<LFS>-EMPHASIZE = 'C500'.
WHEN 'S_LANG'.
<LFS>-COLTEXT = TEXT-F01.
<LFS>-EMPHASIZE = 'C600'.
WHEN 'S_TEXT'.
<LFS>-COLTEXT = TEXT-F02.
WHEN 'T_LANG'.
<LFS>-COLTEXT = TEXT-F03.
<LFS>-EMPHASIZE = 'C700'.
WHEN 'T_TEXT'.
<LFS>-COLTEXT = TEXT-F04.
<LFS>-EDIT = 'X'.
WHEN 'STATUS'.
<LFS>-COLTEXT = TEXT-F05.
<LFS>-JUST = 'C'.
ENDCASE.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_ALV_F4_FIELD_0100
*&---------------------------------------------------------------------*
* ALV 필드 탐색도움말 사용 필드 설정
*----------------------------------------------------------------------*
FORM SET_ALV_F4_FIELD_0100 USING PO_GRID TYPE REF TO CL_GUI_ALV_GRID
CHANGING PT_FIELDCAT TYPE LVC_T_FCAT.
DATA(LT_F4) = VALUE LVC_T_F4(
( FIELDNAME = 'OBJECT' REGISTER = 'X' ) "탐색도움말을 사용할 필드
( FIELDNAME = 'LXE_OBJTYPE' REGISTER = 'X' )
).
PO_GRID->REGISTER_F4_FOR_FIELDS( LT_F4 ).
"필드카타로그에 f4availabl 설정
LOOP AT LT_F4 INTO DATA(LS_F4).
READ TABLE PT_FIELDCAT ASSIGNING FIELD-SYMBOL(<LFS>) WITH KEY FIELDNAME = LS_F4-FIELDNAME.
IF SY-SUBRC EQ 0.
<LFS>-F4AVAILABL = 'X'.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Include ZMASS_TRANSLATE_C01
*&---------------------------------------------------------------------*
CLASS LCL_OBJECT DEFINITION.
PUBLIC SECTION.
TYPES: BEGIN OF T_OBJLIST,
DEVCLASS TYPE DEVCLASS,
OBJECT TYPE TADIR-OBJECT, "오브젝트 유형
OBJ_NAME TYPE TADIR-OBJ_NAME, "오브젝트
LXE_OBJNAME TYPE LXEOBJNAME, "번역 오브젝트
M_LANG TYPE TADIR-MASTERLANG, "Master Language
END OF T_OBJLIST,
TT_OBJLIST TYPE STANDARD TABLE OF T_OBJLIST WITH EMPTY KEY,
TT_OBJLIST_SORT TYPE SORTED TABLE OF T_OBJLIST WITH NON-UNIQUE KEY OBJECT.
TYPES: BEGIN OF T_OBJ_DESC,
SPRAS TYPE SPRAS,
OBJECT TYPE TROBJTYPE,
OBJ_NAME TYPE SOBJ_NAME,
OBJ_DESC TYPE REPTI,
END OF T_OBJ_DESC,
TT_OBJS TYPE SORTED TABLE OF T_OBJ_DESC WITH NON-UNIQUE KEY OBJECT,
TT_OBJ_DESC TYPE STANDARD TABLE OF T_OBJ_DESC WITH EMPTY KEY.
CLASS-METHODS: GET_OBJECT_LIST RETURNING VALUE(ET_OBJLIST) TYPE TT_OBJLIST_SORT,
GET_OBJECT_DESCRIPT RETURNING VALUE(ET_OBJ_DESC) TYPE TT_OBJ_DESC.
PRIVATE SECTION.
CLASS-DATA: LV_OBJECT TYPE TADIR-OBJECT,
LV_LXE_OBJNAME TYPE LXEOBJNAME,
LV_CHAR20 TYPE C LENGTH 20,
LV_CHAR30 TYPE C LENGTH 30,
LV_CHAR40 TYPE C LENGTH 40,
ES_OBJLIST TYPE T_OBJLIST.
CLASS-METHODS: GET_TADIR_MAIN RETURNING VALUE(ET_OBJLIST) TYPE TT_OBJLIST, "일반 오브젝트
GET_TADIR_FUNC RETURNING VALUE(ET_OBJLIST) TYPE TT_OBJLIST, "펑션 모듈
GET_TADIR_MESS RETURNING VALUE(ET_OBJLIST) TYPE TT_OBJLIST, "메시지
GET_TADIR_TADC RETURNING VALUE(ET_OBJLIST) TYPE TT_OBJLIST, "Tables (Customizing - Maintenance
GET_TADIR_SCREEN RETURNING VALUE(ET_OBJLIST) TYPE TT_OBJLIST, "Screen
GET_TADIR_ROLL RETURNING VALUE(ET_OBJLIST) TYPE TT_OBJLIST. "Roll
ENDCLASS.
CLASS LCL_OBJECT IMPLEMENTATION.
METHOD GET_OBJECT_LIST.
DATA LT_OBJLIST TYPE TT_OBJLIST.
LT_OBJLIST = GET_TADIR_MAIN( ).
IF 'FUNC' IN GR_OBJECT.
APPEND LINES OF GET_TADIR_FUNC( ) TO LT_OBJLIST.
ENDIF.
IF 'MESS' IN GR_OBJECT.
APPEND LINES OF GET_TADIR_MESS( ) TO LT_OBJLIST.
ENDIF.
IF 'TABL' IN GR_OBJECT.
APPEND LINES OF GET_TADIR_TADC( ) TO LT_OBJLIST.
ENDIF.
IF 'FUGR' IN GR_OBJECT OR 'PROG' IN GR_OBJECT.
APPEND LINES OF GET_TADIR_SCREEN( ) TO LT_OBJLIST.
ENDIF.
IF 'ACGR' IN GR_OBJECT.
APPEND LINES OF GET_TADIR_ROLL( ) TO LT_OBJLIST.
ENDIF.
ET_OBJLIST = CORRESPONDING #( LT_OBJLIST ).
ENDMETHOD.
METHOD GET_TADIR_MAIN.
SELECT
A~DEVCLASS,
A~OBJECT,
A~OBJ_NAME,
A~OBJ_NAME AS LXE_OBJNAME,
A~MASTERLANG AS M_LANG
FROM TADIR AS A
WHERE A~PGMID EQ 'R3TR'
AND A~OBJECT IN @GR_OBJECT
AND A~DEVCLASS IN @S_DEVC
AND A~OBJ_NAME IN @S_NAME
AND A~AUTHOR IN @S_USER
INTO CORRESPONDING FIELDS OF TABLE @ET_OBJLIST.
ENDMETHOD.
METHOD GET_TADIR_FUNC.
SELECT
A~DEVCLASS,
'FUNC' AS OBJECT,
A~OBJ_NAME,
A~MASTERLANG AS M_LANG,
B~FUNCNAME
FROM TADIR AS A
INNER JOIN TFDIR AS B ON 'SAPL' && A~OBJ_NAME EQ B~PNAME
WHERE A~PGMID EQ 'R3TR'
AND A~OBJECT EQ 'FUGR'
AND A~DEVCLASS IN @S_DEVC
AND B~FUNCNAME IN @S_NAME
AND A~AUTHOR IN @S_USER
AND ( B~FUNCNAME LIKE 'Z%' OR B~FUNCNAME LIKE 'Y%' )
INTO TABLE @DATA(LT_OBJLIST).
LOOP AT LT_OBJLIST INTO DATA(LS_OBJLIST).
ES_OBJLIST = CORRESPONDING #( LS_OBJLIST ).
CONCATENATE LS_OBJLIST-FUNCNAME ES_OBJLIST-OBJ_NAME INTO ES_OBJLIST-LXE_OBJNAME RESPECTING BLANKS.
ES_OBJLIST-OBJ_NAME = LS_OBJLIST-FUNCNAME.
APPEND ES_OBJLIST TO ET_OBJLIST.
ENDLOOP.
ENDMETHOD.
METHOD GET_TADIR_MESS.
SELECT
A~DEVCLASS,
'MESS' AS OBJECT,
A~OBJ_NAME,
A~MASTERLANG AS M_LANG,
B~MSGNR
FROM TADIR AS A
INNER JOIN T100 AS B ON A~OBJ_NAME = B~ARBGB AND B~SPRSL = @P_SLANG
WHERE A~PGMID EQ 'R3TR'
AND A~OBJECT EQ 'MSAG'
AND A~DEVCLASS IN @S_DEVC
AND A~OBJ_NAME IN @S_NAME
* AND ( A~OBJ_NAME LIKE 'Z%' OR A~OBJ_NAME LIKE 'Y%' )
AND A~AUTHOR IN @S_USER
INTO TABLE @DATA(LT_OBJLIST).
LOOP AT LT_OBJLIST INTO DATA(LS_OBJLIST).
ES_OBJLIST = CORRESPONDING #( LS_OBJLIST ).
LV_CHAR20 = ES_OBJLIST-OBJ_NAME.
CONCATENATE LV_CHAR20 LS_OBJLIST-MSGNR INTO ES_OBJLIST-LXE_OBJNAME RESPECTING BLANKS.
APPEND ES_OBJLIST TO ET_OBJLIST.
ENDLOOP.
ENDMETHOD.
METHOD GET_TADIR_TADC.
SELECT
A~DEVCLASS,
A~OBJECT,
A~OBJ_NAME,
A~OBJ_NAME AS LXE_OBJNAME,
A~MASTERLANG AS M_LANG
FROM TADIR AS A
WHERE A~PGMID EQ 'R3TR'
AND A~OBJECT EQ 'TABL'
AND A~DEVCLASS IN @S_DEVC
AND A~OBJECT IN @S_OBJE
AND A~OBJ_NAME IN @S_NAME
* AND ( A~OBJ_NAME LIKE 'Z%' OR A~OBJ_NAME LIKE 'Y%' )
AND A~AUTHOR IN @S_USER
INTO TABLE @DATA(LT_OBJLIST).
LOOP AT LT_OBJLIST INTO DATA(LS_OBJLIST).
ES_OBJLIST = CORRESPONDING #( LS_OBJLIST ).
LV_CHAR30 = ES_OBJLIST-OBJ_NAME.
CONCATENATE SY-MANDT LV_CHAR30 '+' INTO ES_OBJLIST-LXE_OBJNAME RESPECTING BLANKS.
APPEND ES_OBJLIST TO ET_OBJLIST.
ENDLOOP.
ENDMETHOD.
METHOD GET_TADIR_SCREEN. " Screen
SELECT
A~DEVCLASS,
A~OBJECT,
A~OBJ_NAME,
A~OBJ_NAME AS LXE_OBJNAME,
A~MASTERLANG AS M_LANG,
B~PROG,
B~DNUM
FROM TADIR AS A
INNER JOIN D020S AS B ON
CASE WHEN A~OBJECT EQ 'FUGR' THEN 'SAPL' && A~OBJ_NAME ELSE A~OBJ_NAME END EQ B~PROG
WHERE A~PGMID EQ 'R3TR'
AND A~OBJECT IN @GR_OBJECT
AND A~DEVCLASS IN @S_DEVC
AND A~OBJ_NAME IN @S_NAME
* AND ( A~OBJ_NAME LIKE 'Z%' OR A~OBJ_NAME LIKE 'Y%' )
AND A~AUTHOR IN @S_USER
AND B~TYPE NE 'S'
INTO TABLE @DATA(LT_OBJLIST).
LOOP AT LT_OBJLIST INTO DATA(LS_OBJLIST).
ES_OBJLIST = CORRESPONDING #( LS_OBJLIST ).
LV_CHAR40 = ES_OBJLIST-OBJ_NAME.
CONCATENATE LV_CHAR40 LS_OBJLIST-DNUM INTO ES_OBJLIST-LXE_OBJNAME RESPECTING BLANKS.
APPEND ES_OBJLIST TO ET_OBJLIST.
ENDLOOP.
ENDMETHOD.
METHOD GET_TADIR_ROLL. " Role definition
SELECT
'ACGR' AS OBJECT,
AGR_NAME AS OBJ_NAME
FROM AGR_DEFINE
WHERE AGR_NAME IN @S_ROLL
AND AGR_NAME LIKE 'Z%'
AND ( CREATE_USR IN @S_USER OR CHANGE_USR IN @S_USER )
INTO TABLE @DATA(LT_OBJLIST).
LOOP AT LT_OBJLIST INTO DATA(LS_OBJLIST).
ES_OBJLIST = CORRESPONDING #( LS_OBJLIST ).
CONCATENATE SY-MANDT ES_OBJLIST-OBJ_NAME INTO ES_OBJLIST-LXE_OBJNAME.
APPEND ES_OBJLIST TO ET_OBJLIST.
ENDLOOP.
ENDMETHOD.
METHOD GET_OBJECT_DESCRIPT.
DATA LR_OBJ_NAME TYPE RANGE OF TRDIR-NAME.
DATA(LT_DISP_DUP) = GT_DISP[].
SORT LT_DISP_DUP BY OBJECT OBJ_NAME.
DELETE ADJACENT DUPLICATES FROM LT_DISP_DUP COMPARING OBJECT OBJ_NAME.
DATA(LT_OBJ) = CORRESPONDING TT_OBJS( LT_DISP_DUP ).
LOOP AT LT_OBJ INTO DATA(LS_OBJ) GROUP BY ( OBJECT = LS_OBJ-OBJECT ) ASCENDING ASSIGNING FIELD-SYMBOL(<LFS_GROUP>).
LR_OBJ_NAME[] = VALUE #( FOR LS IN GROUP <LFS_GROUP> ( SIGN = 'I' OPTION = 'EQ' LOW = LS-OBJ_NAME ) ).
"오브젝트별 텍스트 조회
CASE <LFS_GROUP>-OBJECT.
WHEN 'DEVC'. "Package
SELECT @<LFS_GROUP>-OBJECT AS OBJECT,
SPRAS AS SPRAS,
DEVCLASS AS OBJ_NAME,
CTEXT AS OBJ_DESC
FROM TDEVCT AS A
WHERE DEVCLASS IN @LR_OBJ_NAME
AND SPRAS IN ( @SY-LANGU, 'E', '3' )
APPENDING CORRESPONDING FIELDS OF TABLE @ET_OBJ_DESC.
WHEN 'PROG'. "Program
SELECT @<LFS_GROUP>-OBJECT AS OBJECT,
SPRSL AS SPRAS,
NAME AS OBJ_NAME,
TEXT AS OBJ_DESC
FROM TRDIRT AS A
WHERE NAME IN @LR_OBJ_NAME
AND SPRSL IN ( @SY-LANGU, 'E', '3' )
APPENDING CORRESPONDING FIELDS OF TABLE @ET_OBJ_DESC.
WHEN 'FUGR'. "Function Group
SELECT @<LFS_GROUP>-OBJECT AS OBJECT,
SPRAS,
AREA AS OBJ_NAME,
AREAT AS OBJ_DESC
FROM TLIBT
WHERE AREA IN @LR_OBJ_NAME
AND SPRAS IN ( @SY-LANGU, 'E', '3' )
APPENDING CORRESPONDING FIELDS OF TABLE @ET_OBJ_DESC.
WHEN 'FUNC'. "Function Module
SELECT @<LFS_GROUP>-OBJECT AS OBJECT,
SPRAS,
FUNCNAME AS OBJ_NAME,
STEXT AS OBJ_DESC
FROM TFTIT
WHERE FUNCNAME IN @LR_OBJ_NAME
AND SPRAS IN ( @SY-LANGU, 'E', '3' )
APPENDING CORRESPONDING FIELDS OF TABLE @ET_OBJ_DESC.
WHEN 'MSAG' OR 'MESS'. " Message Class
SELECT @<LFS_GROUP>-OBJECT AS OBJECT,
SPRSL AS SPRAS,
ARBGB AS OBJ_NAME,
STEXT AS OBJ_DESC
FROM T100T
WHERE ARBGB IN @LR_OBJ_NAME
AND SPRSL IN ( @SY-LANGU, 'E', '3' )
APPENDING CORRESPONDING FIELDS OF TABLE @ET_OBJ_DESC.
WHEN 'TABL'. " Table
SELECT @<LFS_GROUP>-OBJECT AS OBJECT,
DDLANGUAGE AS SPRAS,
TABNAME AS OBJ_NAME,
DDTEXT AS OBJ_DESC
FROM DD02T
WHERE TABNAME IN @LR_OBJ_NAME
AND DDLANGUAGE IN ( @SY-LANGU, 'E', '3' )
AND AS4LOCAL EQ 'A'
APPENDING CORRESPONDING FIELDS OF TABLE @ET_OBJ_DESC.
WHEN 'DTEL'. " Data Element
SELECT @<LFS_GROUP>-OBJECT AS OBJECT,
DDLANGUAGE AS SPRAS,
ROLLNAME AS OBJ_NAME,
DDTEXT AS OBJ_DESC
FROM DD04T
WHERE ROLLNAME IN @LR_OBJ_NAME
AND DDLANGUAGE IN ( @SY-LANGU, 'E', '3' )
AND AS4LOCAL EQ 'A'
APPENDING CORRESPONDING FIELDS OF TABLE @ET_OBJ_DESC.
WHEN 'VIEW'. " VIEW
SELECT @<LFS_GROUP>-OBJECT AS OBJECT,
DDLANGUAGE AS SPRAS,
VIEWNAME AS OBJ_NAME,
DDTEXT AS OBJ_DESC
FROM DD25T
WHERE VIEWNAME IN @LR_OBJ_NAME
AND DDLANGUAGE IN ( @SY-LANGU, 'E', '3' )
AND AS4LOCAL EQ 'A'
APPENDING CORRESPONDING FIELDS OF TABLE @ET_OBJ_DESC.
WHEN 'SHLP'. "SEARCH HELP
SELECT @<LFS_GROUP>-OBJECT AS OBJECT,
DDLANGUAGE AS SPRAS,
SHLPNAME AS OBJ_NAME,
DDTEXT AS OBJ_DESC
FROM DD30T
WHERE SHLPNAME IN @LR_OBJ_NAME
AND DDLANGUAGE IN ( @SY-LANGU, 'E', '3' )
AND AS4LOCAL EQ 'A'
APPENDING CORRESPONDING FIELDS OF TABLE @ET_OBJ_DESC.
WHEN 'DOMA'. "DOMAIN
SELECT @<LFS_GROUP>-OBJECT AS OBJECT,
DDLANGUAGE AS SPRAS,
DOMNAME AS OBJ_NAME,
DDTEXT AS OBJ_DESC
FROM DD01T
WHERE DOMNAME IN @LR_OBJ_NAME
AND DDLANGUAGE IN ( @SY-LANGU, 'E', '3' )
AND AS4LOCAL EQ 'A'
APPENDING CORRESPONDING FIELDS OF TABLE @ET_OBJ_DESC.
WHEN 'ENQU'. "Lock Object
SELECT @<LFS_GROUP>-OBJECT AS OBJECT,
DDLANGUAGE AS SPRAS,
VIEWNAME AS OBJ_NAME,
DDTEXT AS OBJ_DESC
FROM DD25T
WHERE VIEWNAME IN @LR_OBJ_NAME
AND DDLANGUAGE IN ( @SY-LANGU, 'E', '3' )
AND AS4LOCAL EQ 'A'
APPENDING CORRESPONDING FIELDS OF TABLE @ET_OBJ_DESC.
WHEN 'TTYP'. "Table Type
SELECT @<LFS_GROUP>-OBJECT AS OBJECT,
DDLANGUAGE AS SPRAS,
TYPENAME AS OBJ_NAME,
DDTEXT AS OBJ_DESC
FROM DD40T
WHERE TYPENAME IN @LR_OBJ_NAME
AND DDLANGUAGE IN ( @SY-LANGU, 'E', '3' )
AND AS4LOCAL EQ 'A'
APPENDING CORRESPONDING FIELDS OF TABLE @ET_OBJ_DESC.
WHEN 'TRAN'. "TRANSACTION
SELECT @<LFS_GROUP>-OBJECT AS OBJECT,
SPRSL AS SPRAS,
TCODE AS OBJ_NAME,
TTEXT AS OBJ_DESC
FROM TSTCT
WHERE TCODE IN @LR_OBJ_NAME
AND SPRSL IN ( @SY-LANGU, 'E', '3' )
APPENDING CORRESPONDING FIELDS OF TABLE @ET_OBJ_DESC.
WHEN 'CLAS' OR 'INTF'. "CLASS "Interface (ABAP Objects)
SELECT @<LFS_GROUP>-OBJECT AS OBJECT,
LANGU AS SPRAS,
CLSNAME AS OBJ_NAME,
DESCRIPT AS OBJ_DESC
FROM SEOCLASSTX
WHERE CLSNAME IN @LR_OBJ_NAME
AND LANGU IN ( @SY-LANGU, 'E', '3' )
APPENDING CORRESPONDING FIELDS OF TABLE @ET_OBJ_DESC.
WHEN 'SSFO'. "Smartform
SELECT @<LFS_GROUP>-OBJECT AS OBJECT,
LANGU AS SPRAS,
FORMNAME AS OBJ_NAME,
CAPTION AS OBJ_DESC
FROM STXFADMT
WHERE FORMNAME IN @LR_OBJ_NAME
AND LANGU IN ( @SY-LANGU, 'E', '3' )
APPENDING CORRESPONDING FIELDS OF TABLE @ET_OBJ_DESC.
WHEN 'PARA'. "SPA/GPA Parameters
SELECT @<LFS_GROUP>-OBJECT AS OBJECT,
SPRACHE AS SPRAS,
PARAMID AS OBJ_NAME,
PARTEXT AS OBJ_DESC
FROM TPARAT
WHERE PARAMID IN @LR_OBJ_NAME
AND SPRACHE IN ( @SY-LANGU, 'E', '3' )
APPENDING CORRESPONDING FIELDS OF TABLE @ET_OBJ_DESC.
WHEN 'SHI3'. "General structure storage: Definition of a structure
SELECT @<LFS_GROUP>-OBJECT AS OBJECT,
B~SPRAS,
A~TREE_ID AS OBJ_NAME,
B~TEXT AS OBJ_DESC
FROM TMENU01 AS A
INNER JOIN TMENU01T AS B ON A~TREE_ID EQ B~TREE_ID
AND A~EXTENSION EQ B~EXTENSION
AND A~NODE_ID EQ B~NODE_ID
AND A~EXT_KEY EQ B~EXT_KEY
WHERE A~TREE_ID IN @LR_OBJ_NAME
AND A~PARENT_ID EQ @SPACE
AND B~SPRAS IN ( @SY-LANGU, 'E', '3' )
APPENDING CORRESPONDING FIELDS OF TABLE @ET_OBJ_DESC.
WHEN 'ACGR'. "Role
SELECT @<LFS_GROUP>-OBJECT AS OBJECT,
SPRAS AS SPRAS,
AGR_NAME AS OBJ_NAME,
TEXT AS OBJ_DESC
FROM AGR_TEXTS
WHERE AGR_NAME IN @LR_OBJ_NAME
AND SPRAS IN ( @SY-LANGU, 'E', '3' )
AND LINE EQ 0
APPENDING CORRESPONDING FIELDS OF TABLE @ET_OBJ_DESC.
ENDCASE.
ENDLOOP.
SORT ET_OBJ_DESC BY SPRAS OBJECT OBJ_NAME.
ENDMETHOD.
ENDCLASS.
*&---------------------------------------------------------------------*
*& Include ZMASS_TRANSLATE_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form INITIALIZATION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM INITIALIZATION .
SSCRFIELDS-FUNCTXT_01 = |{ ICON_TRANSPORT }Translation Export|.
P_SLANG = SY-LANGU.
P_TLANG = SWITCH #( SY-LANGU WHEN '3' THEN 'E' ELSE '3' ).
P_OBJ = 'X'.
"사용 가능 오브젝트
GT_OBJ_LXE_MAP = VALUE #(
( LXE_OBJTYPE = 'ACGR' OBJECT = 'ACGR' ) " Roles
( LXE_OBJTYPE = 'CA1' OBJECT = 'FUGR' ) " Interface Texts (FUGR)
( LXE_OBJTYPE = 'CA4' OBJECT = 'PROG' ) " Interface Texts (PROG)
( LXE_OBJTYPE = 'CAD1' OBJECT = 'FUGR' ) " Developer Interface Docu (FUGR)
( LXE_OBJTYPE = 'CAD4' OBJECT = 'PROG' ) " Developer Interface Docu (PROG)
( LXE_OBJTYPE = 'CLAS' OBJECT = 'CLAS' ) " Classes
( LXE_OBJTYPE = 'DEVC' OBJECT = 'DEVC' ) " Packages
( LXE_OBJTYPE = 'DOMA' OBJECT = 'DOMA' ) " Domains
( LXE_OBJTYPE = 'DTEL' OBJECT = 'DTEL' ) " Data Elements
( LXE_OBJTYPE = 'ENQU' OBJECT = 'ENQU' ) " Lock Objects
( LXE_OBJTYPE = 'FNC1' OBJECT = 'FUNC' ) " Function
( LXE_OBJTYPE = 'INTF' OBJECT = 'INTF' ) " Class Interfaces
( LXE_OBJTYPE = 'MESS' OBJECT = 'MESS' ) " Messages
( LXE_OBJTYPE = 'MSAG' OBJECT = 'MSAG' ) " Message Classes
( LXE_OBJTYPE = 'RPT1' OBJECT = 'FUGR' ) " Text Elements (FUGR)
( LXE_OBJTYPE = 'RPT4' OBJECT = 'PROG' ) " Text Elements (PROG)
( LXE_OBJTYPE = 'RPT8' OBJECT = 'CLAS' ) " Text Elements (CLAS)
( LXE_OBJTYPE = 'SCT1' OBJECT = 'FUGR' ) " Screen Control (FUGR)
( LXE_OBJTYPE = 'SCT4' OBJECT = 'PROG' ) " Screen Control (PROG)
( LXE_OBJTYPE = 'SGPA' OBJECT = 'PARA' ) " SET/GET Parameters
( LXE_OBJTYPE = 'SHI3' OBJECT = 'SHI3' ) " Area Menu
( LXE_OBJTYPE = 'SHLP' OBJECT = 'SHLP' ) " Search Helps
* ( LXE_OBJTYPE = 'SOTR' OBJECT = 'SOTR' ) " Web Dynpr(OTR Short Texts)
( LXE_OBJTYPE = 'SRH1' OBJECT = 'FUGR' ) " Screen Painter Headers (FUGR)
( LXE_OBJTYPE = 'SRH4' OBJECT = 'PROG' ) " Screen Painter Headers (PROG)
( LXE_OBJTYPE = 'SRH8' OBJECT = 'CLAS' ) " Screen Painter Headers (CLAS)
( LXE_OBJTYPE = 'SRT1' OBJECT = 'FUGR' ) " Screen Painter Texts (FUGR)
( LXE_OBJTYPE = 'SRT4' OBJECT = 'PROG' ) " Screen Painter Texts (PROG)
( LXE_OBJTYPE = 'SRT8' OBJECT = 'CLAS' ) " Screen Painter Texts (CLAS)
( LXE_OBJTYPE = 'TABT' OBJECT = 'TABL' ) " Table Descriptions
( LXE_OBJTYPE = 'TADC' OBJECT = 'TABL' ) " Tables 값, 언어키별 테이블 값
( LXE_OBJTYPE = 'TRAN' OBJECT = 'TRAN' ) " Transaction
( LXE_OBJTYPE = 'TTYP' OBJECT = 'TTYP' ) " Table Types
( LXE_OBJTYPE = 'VALU' OBJECT = 'DOMA' ) " Fixed Values for Domains
( LXE_OBJTYPE = 'VIEW' OBJECT = 'VIEW' ) " View
( LXE_OBJTYPE = 'SSF' OBJECT = 'SSFO' ) " Smartform
).
DATA LT_OBJECT_TEXT TYPE TABLE OF KO100.
CALL FUNCTION 'TR_OBJECT_TABLE'
TABLES
WT_OBJECT_TEXT = LT_OBJECT_TEXT.
.
SORT LT_OBJECT_TEXT BY OBJECT.
SELECT OBJ_TYPE, KTEXT FROM LXE_ATTOBT WHERE LANG EQ @SY-LANGU INTO TABLE @DATA(LT_LXE_ATTOBT).
SORT LT_LXE_ATTOBT BY OBJ_TYPE.
LOOP AT GT_OBJ_LXE_MAP ASSIGNING FIELD-SYMBOL(<LFS>).
READ TABLE LT_OBJECT_TEXT INTO DATA(LS_OBJECT_TEXT) WITH KEY OBJECT = <LFS>-OBJECT BINARY SEARCH.
IF SY-SUBRC EQ 0.
<LFS>-OBJECT_T = LS_OBJECT_TEXT-TEXT.
ENDIF.
READ TABLE LT_LXE_ATTOBT INTO DATA(LS_LXE_ATTOBT) WITH KEY OBJ_TYPE = <LFS>-LXE_OBJTYPE BINARY SEARCH.
IF SY-SUBRC EQ 0.
<LFS>-KTEXT = LS_LXE_ATTOBT-KTEXT.
ENDIF.
ENDLOOP.
GT_F4_OBJ = CORRESPONDING #( GT_OBJ_LXE_MAP ).
SORT GT_F4_OBJ. DELETE ADJACENT DUPLICATES FROM GT_F4_OBJ COMPARING ALL FIELDS.
GT_F4_LXE = CORRESPONDING #( GT_OBJ_LXE_MAP ).
SORT GT_F4_LXE. DELETE ADJACENT DUPLICATES FROM GT_F4_LXE COMPARING ALL FIELDS.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form AT_SELECTION_SCREEN_OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM AT_SELECTION_SCREEN_OUTPUT .
LOOP AT SCREEN.
CHECK SCREEN-GROUP1 IS NOT INITIAL.
IF SCREEN-GROUP1 EQ 'OB0'.
SCREEN-REQUIRED = '2'.
ENDIF.
IF SCREEN-GROUP1 EQ 'RO2'.
SCREEN-INPUT = '0'.
ENDIF.
CASE SCREEN-GROUP1.
WHEN 'OB0' OR 'OB1'.
SCREEN-ACTIVE = SWITCH #( P_OBJ WHEN 'X' THEN 1 ELSE 0 ).
WHEN 'RO1' OR 'RO2'.
SCREEN-ACTIVE = SWITCH #( P_ROL WHEN 'X' THEN 1 ELSE 0 ).
ENDCASE.
MODIFY SCREEN.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form AT_SELECTION_SCREEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM AT_SELECTION_SCREEN .
CASE SSCRFIELDS-UCOMM.
WHEN 'FC01'.
CALL TRANSACTION 'SLXT'.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F4_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM F4_FILE USING P_FILE.
DATA: LT_FTAB TYPE FILETABLE,
LV_RC TYPE I.
CLEAR LT_FTAB.
CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG(
EXPORTING
FILE_FILTER = CL_GUI_FRONTEND_SERVICES=>FILETYPE_EXCEL
MULTISELECTION = ABAP_FALSE
CHANGING
FILE_TABLE = LT_FTAB
RC = LV_RC
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
NOT_SUPPORTED_BY_GUI = 4
others = 5
).
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
IF LT_FTAB[] IS NOT INITIAL.
P_FILE = LT_FTAB[ 1 ]-FILENAME.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_DATA .
DATA: LT_PCX_S1 TYPE TABLE OF LXE_PCX_S1,
LV_COLLNAM TYPE LXECOLLNAM,
LV_PSTATUS TYPE LXESTATPRC.
CLEAR: GT_DISP, GV_SLANG, GV_TLANG.
CLEAR: GR_OBJECT, GR_LXE_OBJTYPE.
"오브젝트 유형, 번역 오브젝트 유형 제한
IF P_OBJ IS NOT INITIAL. "ABAP OBJECT
GR_OBJECT = VALUE #( FOR LS IN GT_OBJ_LXE_MAP
WHERE ( OBJECT IN S_OBJE AND LXE_OBJTYPE IN S_LOBJ AND OBJECT NE P_OBJE AND LXE_OBJTYPE NE P_LOBJ )
( SIGN = 'I' OPTION = 'EQ'
LOW = LS-OBJECT ) ).
SORT GR_OBJECT. DELETE ADJACENT DUPLICATES FROM GR_OBJECT COMPARING ALL FIELDS.
GR_LXE_OBJTYPE = VALUE #( FOR LS IN GT_OBJ_LXE_MAP
WHERE ( OBJECT IN S_OBJE AND LXE_OBJTYPE IN S_LOBJ AND OBJECT NE P_OBJE AND LXE_OBJTYPE NE P_LOBJ )
( SIGN = 'I' OPTION = 'EQ'
LOW = LS-LXE_OBJTYPE ) ).
SORT GR_LXE_OBJTYPE. DELETE ADJACENT DUPLICATES FROM GR_LXE_OBJTYPE COMPARING ALL FIELDS.
ELSE. "ROLL
GR_OBJECT = VALUE #( ( SIGN = 'I' OPTION = 'EQ' LOW = P_OBJE ) ).
GR_LXE_OBJTYPE = VALUE #( ( SIGN = 'I' OPTION = 'EQ' LOW = P_LOBJ ) ).
ENDIF.
IF GR_OBJECT[] IS INITIAL OR GR_LXE_OBJTYPE[] IS INITIAL.
EXIT.
ENDIF.
"Languages in the Translation Environment
SELECT
R3_LANG,
LANGUAGE
FROM LXE_T002X
WHERE R3_LANG IN ( @P_SLANG, @P_TLANG )
AND IS_R3_LANG EQ 'X'
INTO TABLE @DATA(LT_LXE_T002X).
IF SY-SUBRC EQ 0.
TRY.
GV_SLANG = LT_LXE_T002X[ R3_LANG = P_SLANG ]-LANGUAGE.
GV_TLANG = LT_LXE_T002X[ R3_LANG = P_TLANG ]-LANGUAGE.
CATCH CX_SY_ITAB_LINE_NOT_FOUND INTO DATA(LV_CX).
MESSAGE S000 WITH TEXT-E02 DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING .
ENDTRY.
ENDIF.
DATA(LO_PROGRESS) = NEW ZCL_PROGRESS( 2 ).
LO_PROGRESS->SET_STEP( 'Object Text Read' ).
"번역 오브젝트별로 개별 오브젝트 조회
DATA(LT_TADIR) = LCL_OBJECT=>GET_OBJECT_LIST( ).
"번역 오브젝트 리스트
LOOP AT GT_OBJ_LXE_MAP INTO DATA(LS_OBJ_LXE_MAP) WHERE LXE_OBJTYPE IN GR_LXE_OBJTYPE AND OBJECT IN GR_OBJECT.
LOOP AT LT_TADIR INTO DATA(LS_TADIR) WHERE OBJECT EQ LS_OBJ_LXE_MAP-OBJECT.
"번역 오브젝트
IF LS_OBJ_LXE_MAP-LXE_OBJTYPE NE 'SSF'. "번역 오브젝트 유형이 스마트폼이 아닌 경우
CLEAR: LT_PCX_S1, LV_COLLNAM, LV_PSTATUS.
" Source language -> Target language
CALL FUNCTION 'LXE_OBJ_TEXT_PAIR_READ'
EXPORTING
T_LANG = GV_TLANG
S_LANG = GV_SLANG
CUSTMNR = '999999'
OBJTYPE = LS_OBJ_LXE_MAP-LXE_OBJTYPE
OBJNAME = LS_TADIR-LXE_OBJNAME
READ_ONLY = 'X'
IMPORTING
COLLNAM = LV_COLLNAM
PSTATUS = LV_PSTATUS
TABLES
LT_PCX_S1 = LT_PCX_S1
.
LOOP AT LT_PCX_S1 INTO DATA(LS_PCX_S1).
GS_DISP = CORRESPONDING #( LS_TADIR ).
MOVE-CORRESPONDING LS_PCX_S1 TO GS_DISP.
GS_DISP-LXE_OBJTYPE = LS_OBJ_LXE_MAP-LXE_OBJTYPE.
GS_DISP-LXE_KTEXT = LS_OBJ_LXE_MAP-KTEXT.
GS_DISP-LXE_COLLNAME = LV_COLLNAM.
" Web dynpro ## SOTR object# Alias# Textkey# ##
IF LS_OBJ_LXE_MAP-LXE_OBJTYPE EQ 'SOTR'.
GS_DISP-TEXTKEY = LS_TADIR-OBJ_NAME.
ENDIF.
"상태 표시
_EXCP_FIELD GS_DISP-S_TEXT GS_DISP-T_TEXT GS_DISP-EXCP_FIELD.
APPEND GS_DISP TO GT_DISP.
ENDLOOP.
ELSE. "스마트폼일 경우
SELECT DISTINCT
A~FORMNAME AS LXE_OBJNAME,
A~INAME,
A~LINENR,
A~TDFORMAT,
COALESCE( T1~TDLINE, @SPACE ) AS S_TEXT,
COALESCE( T2~TDLINE, @SPACE ) AS T_TEXT
FROM STXFTXT AS A
LEFT OUTER JOIN STXFTXT AS T1 ON A~TXTYPE EQ T1~TXTYPE AND A~FORMNAME EQ T1~FORMNAME
AND A~INAME EQ T1~INAME AND A~VARI EQ T1~VARI
AND A~LINENR EQ T1~LINENR AND T1~SPRAS EQ @P_SLANG
LEFT OUTER JOIN STXFTXT AS T2 ON A~TXTYPE EQ T2~TXTYPE AND A~FORMNAME EQ T2~FORMNAME
AND A~INAME EQ T2~INAME AND A~VARI EQ T2~VARI
AND A~LINENR EQ T2~LINENR AND T2~SPRAS EQ @P_TLANG
WHERE A~FORMNAME EQ @LS_TADIR-OBJ_NAME
AND A~SPRAS IN ( @P_SLANG, @P_TLANG )
AND A~TXTYPE EQ 'F'
INTO TABLE @DATA(LT_STXFTXT).
LOOP AT LT_STXFTXT INTO DATA(LS_STXFTXT).
GS_DISP = CORRESPONDING #( LS_TADIR ).
GS_DISP-LXE_OBJTYPE = LS_OBJ_LXE_MAP-LXE_OBJTYPE.
GS_DISP-LXE_KTEXT = LS_OBJ_LXE_MAP-KTEXT.
GS_DISP-S_TEXT = LS_STXFTXT-S_TEXT.
GS_DISP-T_TEXT = LS_STXFTXT-T_TEXT.
GS_DISP-LXE_OBJNAME = LS_STXFTXT-LXE_OBJNAME.
CONCATENATE LS_STXFTXT-INAME LS_STXFTXT-LINENR LS_STXFTXT-TDFORMAT
INTO GS_DISP-TEXTKEY SEPARATED BY SPACE.
"상태 표시
_EXCP_FIELD GS_DISP-S_TEXT GS_DISP-T_TEXT GS_DISP-EXCP_FIELD.
APPEND GS_DISP TO GT_DISP.
ENDLOOP.
ENDIF.
ENDLOOP.
ENDLOOP.
"기 번역항목 제어
IF P_CHECK IS NOT INITIAL.
DELETE GT_DISP WHERE EXCP_FIELD EQ '3'.
ENDIF.
"건수 표시
DATA: LV_CNT_R TYPE I VALUE IS INITIAL,
LV_CNT_Y TYPE I VALUE IS INITIAL,
LV_CNT_G TYPE I VALUE IS INITIAL.
LO_PROGRESS->SET_STEP( 'Object Description Read' ).
"오브젝트 내역
DATA(LT_OBJ_DESC) = LCL_OBJECT=>GET_OBJECT_DESCRIPT( ).
LOOP AT GT_DISP ASSIGNING FIELD-SYMBOL(<LFS_DISP>).
LV_CNT_R = LV_CNT_R + SWITCH #( <LFS_DISP>-EXCP_FIELD WHEN '1' THEN 1 ELSE 0 ).
LV_CNT_Y = LV_CNT_Y + SWITCH #( <LFS_DISP>-EXCP_FIELD WHEN '2' THEN 1 ELSE 0 ).
LV_CNT_G = LV_CNT_G + SWITCH #( <LFS_DISP>-EXCP_FIELD WHEN '3' THEN 1 ELSE 0 ).
READ TABLE LT_OBJ_DESC INTO DATA(LS_OBJ_DESC) WITH KEY SPRAS = SY-LANGU
OBJECT = <LFS_DISP>-OBJECT
OBJ_NAME = <LFS_DISP>-OBJ_NAME BINARY SEARCH.
IF SY-SUBRC NE 0.
READ TABLE LT_OBJ_DESC INTO LS_OBJ_DESC WITH KEY SPRAS = '3'
OBJECT = <LFS_DISP>-OBJECT
OBJ_NAME = <LFS_DISP>-OBJ_NAME BINARY SEARCH.
IF SY-SUBRC NE 0.
READ TABLE LT_OBJ_DESC INTO LS_OBJ_DESC WITH KEY SPRAS = 'E'
OBJECT = <LFS_DISP>-OBJECT
OBJ_NAME = <LFS_DISP>-OBJ_NAME BINARY SEARCH.
ENDIF.
ENDIF.
IF SY-SUBRC EQ 0.
<LFS_DISP>-OBJ_DESC = LS_OBJ_DESC-OBJ_DESC.
ENDIF.
<LFS_DISP>-S_LANG = P_SLANG.
<LFS_DISP>-T_LANG = P_TLANG.
ENDLOOP.
SORT GT_DISP BY DEVCLASS OBJECT OBJ_NAME LXE_OBJTYPE LXE_OBJNAME TEXTKEY.
MESSAGE S007 WITH CONV STRING( LINES( GT_DISP ) ) CONV STRING( LV_CNT_G ) CONV STRING( LV_CNT_Y ) CONV STRING( LV_CNT_R ) INTO GV_GRID_TITLE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F4_OBJECT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F4_OBJECT .
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'OBJECT'
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
DYNPROFIELD = 'S_OBJE'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = GT_F4_OBJ
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F4_LXE_OBJTYPE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F4_LXE_OBJTYPE .
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'LXE_OBJTYPE'
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
DYNPROFIELD = 'S_LOBJ'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = GT_F4_LXE
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SAVE_TRANSLATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SAVE_TRANSLATE USING PT_ROWS TYPE LVC_T_ROW.
DATA: LS_STXFTXT TYPE STXFTXT,
LS_LXE_LOG TYPE LXE_LOG.
DATA: LV_LXESTATPRC TYPE LXESTATPRC,
LT_LXE_PCX_S1 TYPE STANDARD TABLE OF LXE_PCX_S1.
DATA: LV_ANSWER TYPE C,
LV_CNT_E TYPE I,
LV_CNT_S TYPE I.
CALL FUNCTION 'POPUP_CONTINUE_YES_NO'
EXPORTING
TEXTLINE1 = TEXT-Q01
TITEL = TEXT-Q02
IMPORTING
ANSWER = LV_ANSWER
.
CHECK LV_ANSWER EQ 'J'.
CLEAR: LV_CNT_E, LV_CNT_S.
DATA(LO_PROGRESS) = NEW ZCL_PROGRESS( LINES( PT_ROWS ) ).
LOOP AT PT_ROWS INTO DATA(LS_ROWS).
LO_PROGRESS->SET_PERCENT( TEXT-T01 ).
READ TABLE GT_DISP ASSIGNING FIELD-SYMBOL(<LFS_DISP>) INDEX LS_ROWS-INDEX.
IF SY-SUBRC NE 0.
CONTINUE.
ENDIF.
IF <LFS_DISP>-LXE_OBJTYPE EQ 'SSF'. "SMARTFORM
LS_STXFTXT = VALUE #( SPRAS = <LFS_DISP>-T_LANG
TXTYPE = 'F'
FORMNAME = <LFS_DISP>-LXE_OBJNAME
TDLINE = <LFS_DISP>-T_TEXT ).
SPLIT <LFS_DISP>-TEXTKEY AT SPACE INTO LS_STXFTXT-INAME
LS_STXFTXT-LINENR
LS_STXFTXT-TDFORMAT
IN CHARACTER MODE.
LS_LXE_LOG = VALUE #( CUSTMNR = '999999'
TARGLNG = GV_TLANG
OBJTYPE = <LFS_DISP>-LXE_OBJTYPE
OBJNAME = <LFS_DISP>-LXE_OBJNAME
UNAME = SY-UNAME
UDATE = SY-DATLO
UTIME = SY-TIMLO ).
MODIFY STXFTXT FROM LS_STXFTXT.
IF SY-SUBRC NE 0.
ROLLBACK WORK.
<LFS_DISP>-STATUS = ICON_MESSAGE_ERROR.
ELSE.
MODIFY LXE_LOG FROM LS_LXE_LOG.
IF SY-SUBRC NE 0.
ROLLBACK WORK.
<LFS_DISP>-STATUS = ICON_MESSAGE_ERROR.
ELSE.
COMMIT WORK AND WAIT.
<LFS_DISP>-STATUS = ICON_SYSTEM_OKAY.
ENDIF.
ENDIF.
ELSE.
CLEAR: LT_LXE_PCX_S1.
CALL FUNCTION 'LXE_OBJ_TEXT_PAIR_READ'
EXPORTING
T_LANG = GV_TLANG
S_LANG = GV_SLANG
CUSTMNR = '999999'
OBJTYPE = <LFS_DISP>-LXE_OBJTYPE
OBJNAME = <LFS_DISP>-LXE_OBJNAME
READ_ONLY = ''
IMPORTING
PSTATUS = LV_LXESTATPRC
TABLES
LT_PCX_S1 = LT_LXE_PCX_S1.
SORT LT_LXE_PCX_S1 BY TEXTKEY.
READ TABLE LT_LXE_PCX_S1 ASSIGNING FIELD-SYMBOL(<LFS_PCX>) WITH KEY TEXTKEY = <LFS_DISP>-TEXTKEY BINARY SEARCH.
IF SY-SUBRC EQ 0.
<LFS_PCX>-T_TEXT = <LFS_DISP>-T_TEXT.
ENDIF.
CALL FUNCTION 'LXE_OBJ_TEXT_PAIR_WRITE'
EXPORTING
T_LANG = GV_TLANG
S_LANG = GV_SLANG
CUSTMNR = '999999'
OBJTYPE = <LFS_DISP>-LXE_OBJTYPE
OBJNAME = <LFS_DISP>-LXE_OBJNAME
IMPORTING
PSTATUS = LV_LXESTATPRC
TABLES
LT_PCX_S1 = LT_LXE_PCX_S1.
IF LV_LXESTATPRC EQ 'S'.
<LFS_DISP>-STATUS = ICON_SYSTEM_OKAY.
ELSE.
<LFS_DISP>-STATUS = ICON_MESSAGE_ERROR.
ENDIF.
ENDIF.
IF <LFS_DISP>-STATUS EQ ICON_SYSTEM_OKAY.
<LFS_DISP>-MESSAGE = 'OK'.
ADD 1 TO LV_CNT_S.
ELSE.
<LFS_DISP>-MESSAGE = 'ERROR'.
ADD 1 TO LV_CNT_E.
ENDIF.
ENDLOOP.
DATA(LV_MSGTY) = COND SY-MSGTY( WHEN LV_CNT_S > 0 AND LV_CNT_E > 0 THEN 'W'
WHEN LV_CNT_E = 0 THEN 'S'
ELSE 'E' ).
MESSAGE I008 WITH CONV STRING( LV_CNT_E + LV_CNT_S ) CONV STRING( LV_CNT_S ) CONV STRING( LV_CNT_E ) DISPLAY LIKE LV_MSGTY.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form EXCEL_UPLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM EXCEL_UPLOAD .
DATA: LV_END_COL TYPE I.
LV_END_COL = LINES( CL_SALV_DDIC=>GET_BY_DATA( GT_EXCEL ) ).
CLEAR GT_EXCEL.
CALL FUNCTION 'ZCM_EXCEL_UPLAOD'
EXPORTING
I_FILENAME = P_FILEN
I_BEGIN_COL = 1
I_BEGIN_ROW = 2
I_END_COL = LV_END_COL
* I_END_ROW =
* I_FIELD_ELEMENT_MSG = 'X'
* I_ENABLE_CONV_EXIT = 'X'
* I_CHECK_CONV_EXIT = ' '
* I_STOP_FIRST_ERROR = ' '
TABLES
OUTTAB = GT_EXCEL
* INTERN =
.
IF GT_EXCEL[] IS INITIAL.
EXIT.
ENDIF.
SORT GT_EXCEL BY DEVCLASS OBJECT OBJ_NAME LXE_OBJTYPE LXE_OBJNAME TEXTKEY.
LOOP AT GT_DISP ASSIGNING FIELD-SYMBOL(<LFS_DISP>).
READ TABLE GT_EXCEL INTO DATA(LS_EXCEL) WITH KEY DEVCLASS = <LFS_DISP>-DEVCLASS
OBJECT = <LFS_DISP>-OBJECT
OBJ_NAME = <LFS_DISP>-OBJ_NAME
LXE_OBJTYPE = <LFS_DISP>-LXE_OBJTYPE
LXE_OBJNAME = <LFS_DISP>-LXE_OBJNAME
TEXTKEY = <LFS_DISP>-TEXTKEY BINARY SEARCH.
IF SY-SUBRC EQ 0.
IF <LFS_DISP>-T_LANG EQ LS_EXCEL-T_LANG.
<LFS_DISP>-T_TEXT = LS_EXCEL-T_TEXT.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Include ZMASS_TRANSLATE_I01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100_EXIT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100_EXIT INPUT.
CASE OK_CODE.
WHEN 'BACK' OR 'CANC'.
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
LEAVE PROGRAM.
ENDCASE.
CLEAR OK_CODE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Include ZMASS_TRANSLATE_O01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS '100'.
SET TITLEBAR '100'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module CREATE_OBJECT_ALV_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE CREATE_OBJECT_ALV_0100 OUTPUT.
PERFORM CREATE_OBJECT_ALV_0100.
ENDMODULE.
*GUI Texts
*----------------------------------------------------------
* 100 --> Mass Translation Editor
* 100 --> Mass Translation Editor
*Text elements
*----------------------------------------------------------
* BL1 선택조건
* BL2 조회조건
* E01 선택#가능한#오브젝트#타입이#없습니다
* E02 입력한 언어가 올바르지 않습니다
* F01 원어
* F02 원본 언어 텍스트
* F03 대어
* F04 대상 언어 텍스트
* F05 처리상태
* Q01 선택한 항목의 텍스트를 적용 하시겠습니까?
* Q02 질문
* T01 오브젝트 언어 업데이트
*Selection texts
*----------------------------------------------------------
* P_CHECK 기 번역항목 제거
* P_OBJ ABAP Object
* P_ROL Roll
* P_SLANG 원본 언어
* P_TLANG 대상 언어
* S_NAME 오브젝트이름
* P_FILEN D .
* P_LOBJ D .
* P_OBJE D .
* S_DEVC D .
* S_LOBJ D .
* S_OBJE D .
* S_ROLL D .
* S_USER D .
*Messages
*----------------------------------------------------------
*
* Message class: 00
*055 모든 필수 입력 필드에 값을 입력하십시오.
*
* Message class: YISPIMS01
*000 &1 &2 &3 &4
*004 입력값이 유효하지 않습니다
*005 데이터가 존재하지 않습니다
*006 선택한 항목이 없습니다
*007 Total: &1 , Green: &2 , Yellow: &3 , Red: &4
*008 &1 건의 데이터가 처리되었습니다(성공 : &2, 실패 : &3)
'ABAP > 소스코드' 카테고리의 다른 글
[Class] Internal Table/Structure 일괄 Conversion - ZCL_MASS_CONV_ALPHA (0) | 2023.11.22 |
---|---|
[Class] Excel 업로드/다운로드 통합 Class - ZCL_EXCEL_UPDOWN (1) | 2023.11.22 |
[Class] Internal Table 엑셀 다운로드(XLSX 형식) (0) | 2023.11.15 |
[Form] Report 프로그램에 백그라운드 작업 정보 표시 (0) | 2023.09.20 |
[Report] 엑셀 데이터로 Table Insert(Modify) 프로그램 (0) | 2023.09.06 |
댓글