bdc programming bywono77
TRANSCRIPT
![Page 1: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/1.jpg)
BDC Programming
정리 by wono77. 2005.09.02금요일
우리가 만들고자 하는 화면 :
다음은 Guide to BDC (Batch Data Communication)로, 화면 녹화를 하는 부분부터 차례대로 설명.
![Page 2: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/2.jpg)
1. 수행절차 요약
Transaction Recording
BDC Source 생성
Input File Layout 정의 BDC Source 수정
원시DATA작성 (Excel)
Text File로 변환
BDC 실행
DBMS
1단계
2단계
3단계
4단계
![Page 3: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/3.jpg)
2. 단계별 설명
1 단계 Transaction Recording
내용: 화면 입력 절차, 입력 요소 등을 Code화 하는 작업
메뉴: 시스템 -> 서비스 -> Batch 입력 -> 레코더
1. New Recording 버튼 clikc -> 레코딩,트랜잭션코드 지정 /nSHDB에서 -> Start recording버튼 click
New Recording을 눌러 나오는 다음 팝업창에서 다음과 같이 입력.
![Page 4: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/4.jpg)
![Page 5: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/5.jpg)
2. Start recording버튼 click하면 지정된 트랜잭션코드의 화면이 나타남
우리는 FK01에서 테스트하므로 /nFK01에서 다음과 같이 입력해보자.
구매처는 이전에 없는 아무번호나 넣고 시작하면 된다.
![Page 6: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/6.jpg)
(다음 화면)
나중에 구분을 쉽게 하기 위해 이름 필드에는 ‘이름’, 검색조건에 ‘검색조건’이라고 입력한다. 저장하고 빠져나온 후, 트랜잭션 SHDB에 다시 간다.
![Page 7: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/7.jpg)
-> 화면 입력작업을 수행하고 종료하면 다음과 같이 BDC 기본코드가생성된다 -> 저장후 화면을 빠져나온다
![Page 8: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/8.jpg)
2 단계 BDC Source 생성
1. SHDB 트랜잭션 화면에서 리스트 중 방금 저장한 recording을 선택하고 Program버튼을 click하여 BDC 프로그램 SOURCE를 생성한다
다음 화면에서 제목을 입력하고 소스코드 버튼을 클릭한다.
![Page 9: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/9.jpg)
![Page 10: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/10.jpg)
2. 위 화면에서 제목,유형등을 지정한 후 소스코드 버튼을 CLICK
-> Development class(또는 자신의 Package)를 지정하고 저장한다
![Page 11: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/11.jpg)
3 단계 BDC Source 수정
생성된 소스 코드는 그대로 두고, 또 하나의 프로그램을 띄워서 자동 생성된 소스 코드 중
필요한 부분을 가져와서 코딩 하도록 한다.
일단 자동 생성된 소스를 고쳐서 대강 완성된 소스를 먼저 보자.
*&-----------------------------------------------------------
-
*& Report ZBDC_AGAIN_WONO77
*
*&
*
*&-----------------------------------------------------------
*
REPORT zbdc_again_wono77
.
* it_bdc으로 하는 사람도 있음.
DATA : bdc_tab LIKE bdcdata OCCURS 0 WITH HEADER LINE.
*-----------------------------------------------------------*
* GLOBAL VALIABLE
*------------------------------------------------------------
*
DATA : gv_msgtab TYPE TABLE OF bdcmsgcoll,
gv_cnt TYPE i,
gv_value1(10).
DATA : gv_fullname LIKE rlgrap-filename,
gv_filename LIKE rlgrap-filename,
gv_filepath LIKE rlgrap-filename,
gv_file LIKE rcgfiletr-ftfront.
![Page 12: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/12.jpg)
* 왼쪽 하단에 WORK-TIME을 표시해 주는 변수
DATA : gv_wk_guk_msg(100),
gv_lines TYPE i,
gv_percent TYPE i.
***
DATA: BEGIN OF it_record OCCURS 0,
* data element: LIF16
lifnr(016),
* data element: KTOKK
ktokk(004),
* data element: NAME1_GP
name1(035),
* data element: SORTL
sortl(010),
* data element: LAND1_GP
land1(003),
END OF it_record.
***
* 원래 과정 : CALL Transaction --> Field value Input* BDC 는 거꾸로한다.
**
* ,첫번째
PERFORM bdc_dynpro USING 'SAPMF02K' '0105'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RF02K-KTOKK'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'RF02K-LIFNR'
it_record-lifnr.
PERFORM bdc_field USING 'RF02K-KTOKK'
it_record-ktokk.
*두번째
PERFORM bdc_dynpro USING 'SAPMF02K' '0110'.
![Page 13: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/13.jpg)
PERFORM bdc_field USING 'BDC_CURSOR'
'LFA1-LAND1'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=UPDA'.
PERFORM bdc_field USING 'LFA1-NAME1'
it_record-name1.
PERFORM bdc_field USING 'LFA1-SORTL'
it_record-sortl.
PERFORM bdc_field USING 'LFA1-LAND1'
it_record-land1.
"perform bdc_transaction using 'FK01'.
**
*------------------------------------------------------------
*
* Selection-Screen
*------------------------------------------------------------
*
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-
b01.
PARAMETERS : pa_infil LIKE rlgrap-filename "업로드파일경로지정
DEFAULT 'c:\temp\' LOWER CASE,
pa_erfil LIKE rlgrap-filename. "Error 파일 다운로드 경로
PARAMETERS : pa_bmode LIKE ctu_params-dismode DEFAULT 'N'
"BDC Mode
AS LISTBOX VISIBLE LENGTH 20 OBLIGATORY.
SELECTION-SCREEN END OF BLOCK bl1.
*------------------------------------------------------------
*
* at Selection-Screen output
![Page 14: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/14.jpg)
*------------------------------------------------------------
*
AT SELECTION-SCREEN OUTPUT.
CONCATENATE 'c:\temp\' sy-datum '_error.xls' INTO pa_erfil.
LOOP AT SCREEN.
IF screen-name = 'PA_ERFIL'. "패쓰_에러파일 screen-input = 0. MODIFY SCREEN. ENDIF. ENDLOOP.
*------------------------------------------------------------** at Selection-Screen Value-Request*------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pa_infil."패쓰_인풋파일 gv_value1 = 'c:\temp'. pa_bmode = 'O'. "열기(OPEN) PERFORM get_file_f4_help USING pa_infil gv_value1 pa_bmode.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pa_erfil.
gv_value1 = 'c:\temp\'.
pa_bmode = 'S'. "저장(SAVE)
PERFORM get_file_f4_help USING pa_erfil gv_value1 pa_bmode.
INCLUDE zbdc_again_wono77_fun.
*&-----------------------------------------------------------
*
*& Form get_file_f4_help
*&-----------------------------------------------------------
*
FORM get_file_f4_help USING pa_infile
![Page 15: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/15.jpg)
gv_value1
pa_bmode.
DATA : lv_pa LIKE rcgfiletr-ftfront.
DATA : lv_mask(120), "MSAK를 입력해야 대화상자가 뜬다(파일형식 지정함)
lv_x(50).
lv_mask = ',EXCEL file(*.XLS), *.XLS.'.
* lv_mask = ',텍스트문서(*.TXT), *.TXT.'.* lv_mask = ',모든파일(*.*), *.*.'.
***************************************************************** 함수 : Function 'WS_FILENAME_GET'* 설명 : Call File Selector** 예제 : CALL FUNCTION 'WS_FILENAME_GET'* EXPORTING
* DEF_FILENAME = EFN
* DEF_PATH = '/'
* MASK = ',*.*,*.*.'* MODE = 'O'* TITLE = 'Get filename'* IMPORTING* FILENAME = EFN** rc =
* EXCEPTIONS
* INV_WINSYS = 01
* NO_BATCH = 02
* SELECTION_CANCEL = 03* SELECTION_ERROR = 04.*
*************************************************************
**
![Page 16: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/16.jpg)
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = pa_infil "업로드 파일 경로 def_path = gv_value1 "초기 PATH 설정 mask = lv_mask "파일 종류 mode = pa_bmode "BDC_M ODE 파일 OPEN
IMPORTING
filename = lv_pa
rc = lv_x
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
IF sy-subrc <> 0. EXIT. ENDIF.
IF pa_bmode = 'O'.
pa_infil = lv_pa.
ELSEIF pa_bmode = 'S'.
pa_erfil = lv_pa.
ENDIF.
gv_fullname = lv_pa.
IF NOT gv_fullname IS INITIAL.
* SO_SPLIT_FILE_AND_PATH Split a fully pathed filename into
a filename
* and a path.
CALL FUNCTION 'SO_SPLIT_FILE_AND_PATH'
EXPORTING
![Page 17: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/17.jpg)
full_name = gv_fullname
IMPORTING
stripped_name = gv_filename
file_path = gv_filepath.
* EXCEPTIONS
* X_ERROR = 1
* OTHERS = 2
ENDIF.
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. " get_file_f4_help
![Page 18: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/18.jpg)
다음은 include문.
*&-----------------------------------------------------------**& Include ZBDC_AGAIN_WONO77_FUN
*&-----------------------------------------------------------
*
*&-----------------------------------------------------------
*
*& Form bdc_dynpro
*&-----------------------------------------------------------
*
* Start New Screen
*------------------------------------------------------------
*
* -->P_0035 text
* -->P_0036 text
*------------------------------------------------------------
*
FORM bdc_dynpro USING program dynpro.
CLEAR bdc_tab.
bdc_tab-program = program.
bdc_tab-dynpro = dynpro.
bdc_tab-dynbegin = 'X'.
APPEND bdc_tab.
ENDFORM. " bdc_dynpro
*&-----------------------------------------------------------
*
*& Form bdc_field
*&-----------------------------------------------------------
*
* text
*------------------------------------------------------------
*
![Page 19: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/19.jpg)
* -->FNAM FIELD NAME
* -->FVAL FIELD VALUE
*------------------------------------------------------------
*
FORM bdc_field USING fnam
fval.
"IF fval <> NODATA.
CLEAR bdc_tab.
bdc_tab-fnam = fnam.
bdc_tab-fval = fval.
APPEND bdc_tab.
"ENDIF.
ENDFORM. "bdc_field
![Page 20: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/20.jpg)
자동 생성된 원본 소스는 다음과 같다.
report ZBDC2_WONO77
no standard page heading line-size 255.
include bdcrecx1.
parameters: dataset(132) lower case.
*** DO NOT CHANGE - the generated data section - DO NOT
CHANGE ***
*
* If it is nessesary to change the data section use the
rules:
* 1.) Each definition of a field exists of two lines
* 2.) The first line shows exactly the comment
* '* data element: ' followed with the data element
* which describes the field.
* If you don't have a data element use the
* comment without a data element name
* 3.) The second line shows the fieldname of the
* structure, the fieldname must consist of
* a fieldname and optional the character '_' and
* three numbers and the field length in brackets
* 4.) Each field must be type C.
*
*** Generated data section with specific formatting - DO NOT
CHANGE ***
data: begin of record,
* data element: LIF16
LIFNR_001(016),
* data element: BUKRS
BUKRS_002(004),
* data element: KTOKK
KTOKK_003(004),
* data element: NAME1_GP
![Page 21: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/21.jpg)
NAME1_004(035),
* data element: SORTL
SORTL_005(010),
* data element: LAND1_GP
LAND1_006(003),
* data element: AKONT
AKONT_007(010),
* data element: FDGRV
FDGRV_008(010),
end of record.
*** End generated data section ***
start-of-selection.
perform open_dataset using dataset.
perform open_group.
do.
read dataset dataset into record.
if sy-subrc <> 0. exit. endif.
perform bdc_dynpro using 'SAPMF02K' '0105'.
perform bdc_field using 'BDC_CURSOR'
'RF02K-BUKRS'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'RF02K-LIFNR'
record-LIFNR_001.
perform bdc_field using 'RF02K-BUKRS'
record-BUKRS_002.
perform bdc_field using 'RF02K-KTOKK'
record-KTOKK_003.
perform bdc_dynpro using 'SAPMF02K' '0110'.
perform bdc_field using 'BDC_CURSOR'
![Page 22: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/22.jpg)
'LFA1-ORT01'.
perform bdc_field using 'BDC_OKCODE'
'=UPDA'.
perform bdc_field using 'LFA1-NAME1'
record-NAME1_004.
perform bdc_field using 'LFA1-SORTL'
record-SORTL_005.
perform bdc_field using 'LFA1-LAND1'
record-LAND1_006.
perform bdc_dynpro using 'SAPMF02K' '0210'.
perform bdc_field using 'BDC_CURSOR'
'LFB1-FDGRV'.
perform bdc_field using 'BDC_OKCODE'
'UPDA'.
perform bdc_field using 'LFB1-AKONT'
record-AKONT_007.
perform bdc_field using 'LFB1-FDGRV'
record-FDGRV_008.
perform bdc_transaction using 'FK01'.
enddo.
perform close_group.
perform close_dataset using dataset.
여기서 include 부분은 따지 않기로 한다.
![Page 23: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/23.jpg)
1) 이 구조체를 다음과 같이 변화 시킨다.
원본 :
data: begin of record,
LIFNR_001(016),
BUKRS_002(004),
KTOKK_003(004),
NAME1_004(035),
SORTL_005(010),
LAND1_006(003),
AKONT_007(010),
FDGRV_008(010),
end of record.
(변경) 헤더가 있는 인터널 테이블로 바꿔주며 쓸데없는 뒤쪽의 번호는 삭제해준다.
DATA: BEGIN OF it_record OCCURS 0,
lifnr(016),
ktokk(004),
name1(035),
sortl(010),
land1(003),
END OF it_record.
2) 화면을 뜨는 스크립트 부분을 복사한다.
Bdc_dynpro에서 한 화면을 읽어 들일 때 마다 필드를 읽어들이는 작업이 수행되고 있음을 알
수 있다.
* 원래 과정 : CALL Transaction --> Field value Input* BDC 는 거꾸로한다.
**
* ,첫번째 화면
PERFORM bdc_dynpro USING 'SAPMF02K' '0105'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RF02K-KTOKK'.
PERFORM bdc_field USING 'BDC_OKCODE'
![Page 24: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/24.jpg)
'/00'.
PERFORM bdc_field USING 'RF02K-LIFNR'
it_record-lifnr.
PERFORM bdc_field USING 'RF02K-KTOKK'
it_record-ktokk.
*두번째 화면
PERFORM bdc_dynpro USING 'SAPMF02K' '0110'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFA1-LAND1'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=UPDA'.
PERFORM bdc_field USING 'LFA1-NAME1'
it_record-name1.
PERFORM bdc_field USING 'LFA1-SORTL'
it_record-sortl.
PERFORM bdc_field USING 'LFA1-LAND1'
it_record-land1.
"perform bdc_transaction using 'FK01'.
3) 다음의 함수를 추가한다.
Bdcdata형의 bdc 테이블을 다음과 같이 선언해준다.
DATA : bdc_tab LIKE bdcdata OCCURS 0 WITH HEADER LINE.
그리고 나서 perform을 클릭하여, 위의 perform 함수에 해당하는 form 함수를 만들어 준다.
![Page 25: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/25.jpg)
*&-----------------------------------------------------------
*
*& Form bdc_dynpro
*&-----------------------------------------------------------
*
* Start New Screen
*------------------------------------------------------------
*
* -->P_0035 text
* -->P_0036 text
*------------------------------------------------------------
*
FORM bdc_dynpro USING program dynpro.
CLEAR bdc_tab.
bdc_tab-program = program.
bdc_tab-dynpro = dynpro.
bdc_tab-dynbegin = 'X'.
APPEND bdc_tab.
ENDFORM. " bdc_dynpro
*&-----------------------------------------------------------
*
*& Form bdc_field
*&-----------------------------------------------------------
*
* text
*------------------------------------------------------------
*
* -->FNAM : FIELD NAME
* -->FVAL : FIELD VALUE
*------------------------------------------------------------
*
FORM bdc_field USING fnam
![Page 26: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/26.jpg)
fval.
"IF fval <> NODATA.
CLEAR bdc_tab.
bdc_tab-fnam = fnam.
bdc_tab-fval = fval.
APPEND bdc_tab. "ENDIF.ENDFORM. "bdc_field
4) 파일 업로드, 에러 경우의 파일을 저장하기 위한 전역 변수를 선언한다.
*------------------------------------------------------------
*
* G L O B A L V A L I A B L E
*------------------------------------------------------------
*
DATA : gv_msgtab TYPE TABLE OF bdcmsgcoll,
gv_cnt TYPE i,
gv_value1(10).
DATA : gv_fullname LIKE rlgrap-filename,
gv_filename LIKE rlgrap-filename,
gv_filepath LIKE rlgrap-filename,
gv_file LIKE rcgfiletr-ftfront.
* 프로그램이 실행되는 동안, 왼쪽 하단에 WORK-TIME(시계모양)을 표시해 * 주는 변수
DATA : gv_wk_guk_msg(100),
gv_lines TYPE i, gv_percent TYPE i.
* RLGRAP 구조체에 대하여.- SAP Graph에 관한 선언들. Upload, Download에사용
![Page 27: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/27.jpg)
![Page 28: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/28.jpg)
5) Selection-Screen 설정
화면을 생성한다.
*------------------------------------------------------------
*
* Selection-Screen
*------------------------------------------------------------
*
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-
b01.
PARAMETERS : pa_infil LIKE rlgrap-filename "업로드파일경로지정
DEFAULT 'c:\temp\' LOWER CASE,
pa_erfil LIKE rlgrap-filename. "Error 파일 다운로드 경로
PARAMETERS : pa_bmode LIKE ctu_params-dismode DEFAULT 'N'
"BDC Mode
AS LISTBOX VISIBLE LENGTH 20 OBLIGATORY.
SELECTION-SCREEN END OF BLOCK bl1.
Pa_bmode는 bdc ,mode로 CALL Transaction을 사용하는 BDC의 속성을 나타낸다. BDC
에는 Batch Input Session을 사용하는 방법과 CALL Transaction을 사용하는 2가지 방법이
있다. (성안당 책 P266)
여기서의 CTU_Params 구조체는 CALL Transaction문의 매개변수(Option)을 가지고 있는
Structure로 다음과 같다.
![Page 29: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/29.jpg)
Dismode는 Display Mode로
’A’ : 화면에 표시(Default)
‘E’ : 에러가 발생하는 경우만 화면에 표시
‘N’ : 화면에 표시 안함. –백그라운드 처리
위 프로그램에서는 화면에 표시하지 않는 백그라운드 처리를 Default로 사용하고 있다.
6) 화면에서 에러시 저장하는 필드를 잠그고, 파일열기, 에러파일 저장시에 해당하는 함수를
호출한다.
*------------------------------------------------------------
*
* at Selection-Screen output
*------------------------------------------------------------
*
AT SELECTION-SCREEN OUTPUT.
CONCATENATE 'c:\temp\' sy-datum '_error.xls' INTO pa_erfil.
LOOP AT SCREEN.
IF screen-name = 'PA_ERFIL'. "패쓰_에러파일 screen-input = 0. MODIFY SCREEN.
![Page 30: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/30.jpg)
ENDIF.
ENDLOOP.
*------------------------------------------------------------
*
* at Selection-Screen Value-Request
*------------------------------------------------------------
*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pa_infil."패쓰_
인풋파일
gv_value1 = 'c:\temp'.
pa_bmode = 'O'. "열기(OPEN)
PERFORM get_file_f4_help USING pa_infil gv_value1 pa_bmode.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pa_erfil.
gv_value1 = 'c:\temp\'.
pa_bmode = 'S'. "저장(SAVE)
PERFORM get_file_f4_help USING pa_erfil gv_value1 pa_bmode.
INCLUDE zbdc_again_wono77_fun.
7) 호출되는 get_file_f4_help 사용자 함수를 만들어 준다.
*&-----------------------------------------------------------
*
*& Form get_file_f4_help
*&-----------------------------------------------------------
*
* text
*-----------------------------------------------------------*
* -->P_GV_FILE text
* -->P_GV_VALUE1 text
* -->P_PA_BMODE text
*------------------------------------------------------------
![Page 31: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/31.jpg)
*
FORM get_file_f4_help USING pa_infile
gv_value1
pa_bmode.
DATA : lv_pa LIKE rcgfiletr-ftfront.
DATA : lv_mask(120), "MSAK를 입력해야 대화상자가 뜬다(파일형식 지정함)
lv_x(50).
lv_mask = ',EXCEL file(*.XLS), *.XLS.'.
* lv_mask = ',텍스트문서(*.TXT), *.TXT.'.* lv_mask = ',모든파일(*.*), *.*.'.
***************************************************************** 함수 : Function 'WS_FILENAME_GET'* 설명 : Call File Selector** 예제 : CALL FUNCTION 'WS_FILENAME_GET'* EXPORTING* DEF_FILENAME = EFN* DEF_PATH = '/'
* MASK = ',*.*,*.*.'
* MODE = 'O'
* TITLE = 'Get filename'
* IMPORTING
* FILENAME = EFN
** rc =
* EXCEPTIONS
* INV_WINSYS = 01
* NO_BATCH = 02
* SELECTION_CANCEL = 03
* SELECTION_ERROR = 04.
*
*************************************************************
**
![Page 32: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/32.jpg)
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = pa_infil "업로드 파일 경로 def_path = gv_value1 "초기 PATH 설정 mask = lv_mask "파일 종류 mode = pa_bmode "BDC_M ODE 파일 OPEN
IMPORTING
filename = lv_pa
rc = lv_x
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
IF sy-subrc <> 0.
EXIT.
ENDIF.
IF pa_bmode = 'O'.
pa_infil = lv_pa.
ELSEIF pa_bmode = 'S'.
pa_erfil = lv_pa.
ENDIF.
gv_fullname = lv_pa.
IF NOT gv_fullname IS INITIAL.
* SO_SPLIT_FILE_AND_PATH Split a fully pathed filename into
a filename
* and a path.
CALL FUNCTION 'SO_SPLIT_FILE_AND_PATH'
EXPORTING
full_name = gv_fullname
![Page 33: BDC Programming Bywono77](https://reader031.vdocuments.net/reader031/viewer/2022012403/5520a09f4979598e2f8b4c53/html5/thumbnails/33.jpg)
IMPORTING
stripped_name = gv_filename
file_path = gv_filepath.
* EXCEPTIONS
* X_ERROR = 1
* OTHERS = 2
ENDIF.
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. " get_file_f4_help