2008년 07월 01일
HR BDC
*&---------------------------------------------------------------------*
*& Report ZHRB0000
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zhrb0000.
CONSTANTS : cts(5) VALUE 'GNDK*'.
************************************************************************
** 업로드할 데이타 양식 정의
************************************************************************
DATA: BEGIN OF itab OCCURS 0,
pernr TYPE persno, "교직원번호
begda TYPE begda, "시작일자
endda TYPE endda, "종료일자
END OF itab.
************************************************************************
** BDC 공통 INCLUDE
************************************************************************
INCLUDE zbdcrecx1.
************************************************************************
** BDC 처리 부분 - 각 BDC 마다 틀림
************************************************************************
LOOP AT itab.
CLEAR p0006.
MOVE-CORRESPONDING itab TO p0006.
CALL METHOD lv_ref->infotype_operation
EXPORTING
im_opera = mode
im_infty = '0006'
im_pernr = p0006-pernr
im_subty = p0006-subty
im_objps = p0006-objps
im_sprps = p0006-sprps
im_endda = p0006-endda
im_begda = p0006-begda
im_seqnr = p0006-seqnr
im_view_flag = '41'
IMPORTING
ex_message = ex_message
ex_return = ex_return.
PERFORM MESSAGE_PROCESS USING P0006-PERNR.
ENDLOOP.
**************************************************************************************
*&---------------------------------------------------------------------*
*& Include ZBDCRECX1
*&---------------------------------------------------------------------*
TABLES: e070.
DATA: subrc,
tabix(10) TYPE n,
line TYPE i.
DATA: lv_ref TYPE REF TO zcl_wd_common.
DATA: mode TYPE actio.
DATA: ex_message TYPE string,
ex_return TYPE bapireturn1.
DATA: suc_count TYPE i,
fal_count TYPE i,
tot_count TYPE i.
DATA: BEGIN OF jtab OCCURS 0,
pernr TYPE persno,
ex_message TYPE string,
END OF jtab.
TABLES: p0000, p0001, p0002, p0003, p0006, p0007, p0008,
p0009, p0014, p0015, p0171, p0183, p0543, p0542,
p2001, p2002, p2004, p2005, p2010.
SELECTION-SCREEN FUNCTION KEY 1.
SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE text-001.
PARAMETERS: filename LIKE rlgrap-filename OBLIGATORY.
* count TYPE i.
SELECTION-SCREEN END OF BLOCK a1.
* PARAMETERS NOBINPT LIKE CTU_PARAMS-NOBINPT DEFAULT ' '.
SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE text-100.
PARAMETERS: p_p RADIOBUTTON GROUP a USER-COMMAND se7,
p_a RADIOBUTTON GROUP a.
SELECTION-SCREEN SKIP 1.
PARAMETERS: p_trkorr LIKE ko008-trkorr MODIF ID se1 DEFAULT cts.
SELECTION-SCREEN END OF BLOCK bk1.
SELECTION-SCREEN BEGIN OF BLOCK bk2 WITH FRAME TITLE text-020.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS ins RADIOBUTTON GROUP md . "입력
SELECTION-SCREEN COMMENT 3(20) text-k01 FOR FIELD ins.
SELECTION-SCREEN POSITION 30.
PARAMETERS mod RADIOBUTTON GROUP md . "수정
SELECTION-SCREEN COMMENT 35(10) text-k02 FOR FIELD mod.
SELECTION-SCREEN POSITION 55.
PARAMETERS del RADIOBUTTON GROUP md . "삭제
SELECTION-SCREEN COMMENT 60(10) text-k03 FOR FIELD del.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK bk2.
*----------------------------------------------------------------------*
* data definition
*----------------------------------------------------------------------*
* Batchinputdata of single transaction
DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
* messages of call transaction
DATA: messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
* error session opened (' ' or 'X')
DATA: e_group_opened.
* message texts
DATA: opt LIKE ctu_params.
TABLES: t100,
sscrfields.
TYPE-POOLS icon.
DATA : group_name(12). "섹션의 이름 (섹션의 이름 + 순번)
DATA : tab_line TYPE i, "전체 레코드 갯수
rec_count TYPE i, "수행한 건수
w_count(6) TYPE n, "섹션내의 레코드 건수
w_countsn(6) TYPE n, "섹션의 갯수
temp_text(100),
opencheck.
DATA: ok_count TYPE i,
error_count TYPE i.
*----------------------------------------------------------------------*
INITIALIZATION.
*----------------------------------------------------------------------*
filename = 'C:\BDC\IT012.XLS'.
CONCATENATE icon_xls '양식 다운로드' INTO sscrfields-functxt_01.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR filename.
PERFORM pro_request_dir.
*----------------------------------------------------------------------*
* at selection screen *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
CASE sscrfields-ucomm.
WHEN 'FC01'.
PERFORM download_excel USING itab.
* WHEN OTHERS.
* PERFORM pro_pre_condition.
ENDCASE.
** SEL SCREEN 제어
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_trkorr.
PERFORM read_dynp_field USING p_trkorr 'P_TRKORR'.
CALL FUNCTION 'TR_F4_REQUESTS'
EXPORTING
iv_trkorr_pattern = p_trkorr
IMPORTING
ev_selected_request = p_trkorr.
*&---------------------------------------------------------------------*
*& Form pro_request_dir
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM pro_request_dir.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = filename
def_path = 'C:\DATA'
* mask = 'xlsx files,*.xlsx,xls files,*.xls,text files,*.txt,All files,*.*,.'
mask = ' xls files,*.xls,text files,*.txt,All files,*.*,.'
mode = 'O'
title = 'Select uploading file...'
IMPORTING
filename = filename
EXCEPTIONS
inv_winsys = 0
no_batch = 0
selection_cancel = 0
selection_error = 0.
ENDFORM. " pro_request_dir
*----------------------------------------------------------------------*
* Start new transaction according to parameters *
*----------------------------------------------------------------------*
FORM bdc_transaction USING tcode.
DATA: l_mstring(480).
DATA: l_subrc LIKE sy-subrc.
REFRESH messtab.
* MOVE : ctumode TO opt-dismode,
* cupdate TO opt-updmode,
* nobinpt TO opt-nobinpt.
CALL TRANSACTION tcode USING bdcdata
MODE 'N'
UPDATE 'S'
* OPTIONS FROM opt
MESSAGES INTO messtab.
l_subrc = sy-subrc.
IF ( l_subrc = 0 ).
ok_count = ok_count + 1.
ELSE.
error_count = error_count + 1.
ENDIF.
WRITE: / 'CALL_TRANSACTION',
tcode,
'returncode:'(i05), l_subrc,
'RECORD:', rec_count.
LOOP AT messtab.
SELECT SINGLE * FROM t100 WHERE sprsl = messtab-msgspra
AND arbgb = messtab-msgid
AND msgnr = messtab-msgnr.
IF sy-subrc = 0.
l_mstring = t100-text.
IF l_mstring CS '&1'.
REPLACE '&1' WITH messtab-msgv1 INTO l_mstring.
REPLACE '&2' WITH messtab-msgv2 INTO l_mstring.
REPLACE '&3' WITH messtab-msgv3 INTO l_mstring.
REPLACE '&4' WITH messtab-msgv4 INTO l_mstring.
ELSE.
REPLACE '&' WITH messtab-msgv1 INTO l_mstring.
REPLACE '&' WITH messtab-msgv2 INTO l_mstring.
REPLACE '&' WITH messtab-msgv3 INTO l_mstring.
REPLACE '&' WITH messtab-msgv4 INTO l_mstring.
ENDIF.
CONDENSE l_mstring.
WRITE: / messtab-msgtyp, l_mstring(250).
ELSE.
WRITE: / messtab.
ENDIF.
ENDLOOP.
SKIP.
REFRESH bdcdata.
ENDFORM. "BDC_TRANSACTION
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. "BDC_DYNPRO
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDFORM. "BDC_FIELD
*&---------------------------------------------------------------------*
*& Form download_exceL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_SY_REPID text excel form
*----------------------------------------------------------------------*
FORM download_excel USING p_tab.
CALL FUNCTION 'ZHR_EXCEL_FORM_DOWMLOAD'
EXPORTING
im_itab = p_tab.
ENDFORM. " download_exceL
*&---------------------------------------------------------------------*
*& Form DATA_CONVERSION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_WA_TAB_ORG text
* -->P_WA_ZPGM_CD text
*----------------------------------------------------------------------*
FORM data_conversion USING p_in
p_out.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = p_in
IMPORTING
output = p_out.
ENDFORM. " DATA_CONVERSION
*&---------------------------------------------------------------------*
*& Form READ_DYNP_FIELD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_TRKORR text
* -->P_0421 text
*----------------------------------------------------------------------*
FORM read_dynp_field USING p_trkorr p_fname.
DATA: lt_dynpfields LIKE dynpread OCCURS 0 WITH HEADER LINE,
lv_dyname LIKE d020s-prog,
lv_dynumb LIKE d020s-dnum.
lv_dyname = sy-repid.
lv_dynumb = sy-dynnr.
lt_dynpfields-fieldname = p_fname. APPEND lt_dynpfields.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = lv_dyname
dynumb = lv_dynumb
TABLES
dynpfields = lt_dynpfields.
p_trkorr = lt_dynpfields-fieldvalue.
ENDFORM. " READ_DYNP_FIELD
AT SELECTION-SCREEN OUTPUT.
PERFORM set_cts_no.
*&---------------------------------------------------------------------*
*& Form SET_CTS_NO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM set_cts_no .
IF p_a = 'X'.
LOOP AT SCREEN.
CASE screen-group1.
WHEN 'SE1'.
screen-active = '0'.
screen-required = '0'.
CLEAR: p_trkorr.
MODIFY SCREEN.
ENDCASE.
MODIFY SCREEN.
ENDLOOP.
ELSEIF p_p = 'X'.
LOOP AT SCREEN.
CASE screen-group1.
WHEN 'SE1'.
IF p_trkorr IS INITIAL.
p_trkorr = cts.
ENDIF.
screen-active = '1'.
screen-required = '1'.
MODIFY SCREEN.
ENDCASE.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
ENDFORM. " SET_CTS_NO
*&---------------------------------------------------------------------*
*& Form CHECK_CTS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM check_cts .
IF p_p = 'X'.
CLEAR: e070, subrc.
SELECT SINGLE * FROM e070 WHERE trkorr = p_trkorr.
IF sy-subrc <> 0.
subrc = sy-subrc.
ELSE.
IF e070-trfunction = 'W' AND e070-trstatus = 'D'.
subrc = '0'.
ELSEIF e070-trfunction = 'K'.
subrc = '7'.
ELSEIF e070-trstatus = 'R'.
subrc = '8'.
ELSE.
subrc = '9'.
ENDIF.
ENDIF.
ELSE.
subrc = '0'.
ENDIF.
ENDFORM. " CHECK_CTS
*&---------------------------------------------------------------------*
*& Form file_upload
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->GV_TABLE_NAME text
*----------------------------------------------------------------------*
FORM file_upload USING gv_table_name.
PERFORM progress_indicator USING 0 0
'Uploading data...'.
*-. INTERNAL TABLE 변환용
FIELD-SYMBOLS : <fs_table> TYPE STANDARD TABLE.
TYPES truxs_t_text_data(4096) TYPE c OCCURS 0.
DATA: lv_table_name LIKE feld-name,
v_data TYPE truxs_t_text_data,
lv_lines TYPE i.
*-. Internal Table Assign
CONCATENATE gv_table_name '[]' INTO lv_table_name.
ASSIGN (lv_table_name) TO <fs_table>.
TRANSLATE filename TO UPPER CASE.
FIND '.TXT' IN filename.
IF sy-subrc = 0.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
codepage = 'ASC'
filename = filename "File Location
filetype = 'DAT'
* IMPORTING
* filelength = flength
TABLES
data_tab = <fs_table>
EXCEPTIONS
file_open_error = 1
invalid_table_width = 2
invalid_type = 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.
ELSE.
FIND '.XLS' IN filename.
IF sy-subrc = 0.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR =
* I_LINE_HEADER =
i_tab_raw_data = v_data
i_filename = filename
TABLES
i_tab_converted_data = <fs_table>
EXCEPTIONS
conversion_failed = 1
OTHERS = 2
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
ENDIF.
*-. 데이타 건수 체크
DELETE <fs_table> INDEX 1.
DESCRIBE TABLE <fs_table> LINES lv_lines.
IF lv_lines = 0.
MESSAGE s000(zmhr) WITH
'화일을 체크해주세요. 데이타가 없습니다.'.
ELSE.
PERFORM progress_indicator USING 100 100
'Finish upload...'.
ENDIF.
ENDFORM. " file_upload
*&---------------------------------------------------------------------*
*& Form PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0 text
* -->P_0 text
* -->P_1078 text
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form progress_indicator
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0 text
* -->P_0 text
* -->P_0125 text
*----------------------------------------------------------------------*
FORM progress_indicator USING p_act TYPE i
p_max TYPE i
p_text TYPE any.
DATA: l_percent TYPE p,
l_ptext(80) TYPE c.
IF p_max NE 0.
l_percent = p_act / p_max * 100.
ENDIF.
l_ptext(3) = l_percent.
l_ptext+3 = '%'.
l_ptext+6(38) = p_text.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = l_percent
text = l_ptext.
ENDFORM. " progress_indicator
*&---------------------------------------------------------------------*
*& Form MESSAGE_PROCESS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM message_process USING pernr TYPE persno.
jtab-pernr = pernr.
IF ex_return-type = 'E'.
fal_count = fal_count + 1.
SELECT SINGLE text FROM t100
INTO jtab-ex_message
WHERE sprsl = sy-langu
AND arbgb = ex_return-id
AND msgnr = ex_return-number.
IF sy-subrc = 0.
IF jtab-ex_message CS '&1'.
REPLACE '&1' WITH ex_return-message_v1 INTO jtab-ex_message.
REPLACE '&2' WITH ex_return-message_v2 INTO jtab-ex_message.
REPLACE '&3' WITH ex_return-message_v3 INTO jtab-ex_message.
REPLACE '&4' WITH ex_return-message_v4 INTO jtab-ex_message.
ELSE.
REPLACE '&' WITH ex_return-message_v1 INTO jtab-ex_message.
REPLACE '&' WITH ex_return-message_v2 INTO jtab-ex_message.
REPLACE '&' WITH ex_return-message_v3 INTO jtab-ex_message.
REPLACE '&' WITH ex_return-message_v4 INTO jtab-ex_message.
ENDIF.
CONDENSE jtab-ex_message.
ENDIF.
ELSE.
suc_count = suc_count.
jtab-ex_message = '성공'.
ENDIF.
APPEND JTAB.
WRITE: /1(3) '( ',
4(8) pernr,
12(3) ' )' ,
20(100) jtab-ex_message.
tot_count = fal_count + suc_count.
ENDFORM. " MESSAGE_PROCESS
************************************************************************
** 메인 로직
************************************************************************
START-OF-SELECTION.
PERFORM check_cts.
CHECK subrc = '0'.
PERFORM file_upload USING 'ITAB'.
IF itab[] IS INITIAL.
LEAVE LIST-PROCESSING.
ENDIF.
IF lv_ref IS INITIAL.
CREATE OBJECT lv_ref.
ENDIF.
CASE 'X'.
WHEN 'INS'.
mode = 'INS'.
WHEN 'MOD'.
mode = 'MOD'.
WHEN 'DEL'.
mode = 'DEL'.
ENDCASE.
# by | 2008/07/01 04:16 | Report | 트랙백 | 덧글(0)












