ZBDC
미리보기 기능 추가된 BDC 실행 프로그램
SAP 운영 중 대량의 트랜잭션을 처리해야 할 경우 BDC(Batch Data Communication)를 이용하여 CBO를 만들거나, 또는 LSMW(Legacy System Migration Workbench)를 이용하여 대량의 데이터를 처리 할 수 있습니다.
단, 긴급하게 처리를 요하는 경우나 일회성으로 끝나는 작업에 대해서는 ZBDC와 같이 BDC를 직접 실행할 수 있는 CBO를 이용하는것도 좋은 방법입니다.
#1. BDC 레코딩시 주의 사항
레코딩 후에 값을 입력받을 항목에 대해 필드 값을 삭제 후 BDC를 저장해야, ZBDC의 Excel Template에 입력항목으로 표시됩니다.
#2. 사용 방법
1) BDC 레코딩 선택 또는 TXT파일로 된 BDC레코딩 파일 선택
2) BDC 항목 더블클릭
3) Make template 클릭하여 Excel 양식 열기
4) STARTDATA 부터 ENDDATA 까지 데이터 입력
5) 데이터를 저장하여 "Processing"으로 파일을 불러오거나, 엑셀 데이터를 복사 후 "Paste"로 붙여넣기 실행
6) 미리보기 데이터가 표시되면, 데이터 확인 후 "실행"을 눌러 BDC를 처리한다
#3. 소스코드
인터넷이 떠돌아 다니는 ZBDC 소스코드에 미리보기 기능만 추가한 내용입니다.
REPORT ZBDC LINE-COUNT 0 LINE-SIZE 80
NO STANDARD PAGE HEADING.
*-----------------------------------------------------------------------
* BDC Data Upload by Recording
*-----------------------------------------------------------------------
* |* ; comment
* |*FIELDNAME ; field name
* |*Description ;
* |STARTDATA ; data start
* |
* |
* |ENDDATA ; data end
*-----------------------------------------------------------------------
TABLES: apqi,
tstct,
dfies,
x031l,
t100.
*
INCLUDE <icon>.
*
DATA: bdc_params LIKE ctu_params.
DATA: dynflow LIKE bdcdata OCCURS 0 WITH HEADER LINE.
DATA: sav_df LIKE bdcdata OCCURS 0 WITH HEADER LINE.
DATA: bdc_data LIKE bdcdata OCCURS 0 WITH HEADER LINE.
DATA: prg_dyn(50), icode(30).
*
DATA: upload(14) VALUE '<Excel Upload>',
testing(14) VALUE '<Test Display>',
testone(10) VALUE '<Test One>',
session(17) VALUE '<Process Session>',
maketemp(15) VALUE '<Make template>',
clip(7) VALUE '<Paste>'.
*
DATA: BEGIN OF alpha,
x1 TYPE hextyp VALUE 65,
x2 TYPE hextyp VALUE 32,
END OF alpha.
DATA readtype.
DATA f_test. "ok_code for test
DATA: dyn_tabix LIKE sy-tabix,
dyn_order LIKE sy-tabix.
* function code for test
DATA: BEGIN OF mod_fcode OCCURS 10,
f_test,
tabix LIKE sy-tabix,
END OF mod_fcode.
*
DATA: BEGIN OF ftext OCCURS 10,
outputlen LIKE dfies-outputlen,
scrtext_s(14),
scrtext_m(24),
scrtext_l LIKE dfies-scrtext_l,
fieldtext LIKE dfies-fieldtext,
reptext LIKE dfies-reptext,
lineno(4),
tabix LIKE sy-tabix,
END OF ftext.
*
DATA: BEGIN OF fnam OCCURS 10,
fnam LIKE bdcdata-fnam,
order LIKE sy-tabix,
END OF fnam.
*
DATA: BEGIN OF ford OCCURS 10,
fnam LIKE bdcdata-fnam,
order LIKE sy-tabix,
END OF ford.
*
DATA: nodata VALUE '/'.
DATA: messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
DATA: l_mstring(512).
DATA ccode(2).
DATA tran_subrc TYPE sy-subrc.
DATA: filename LIKE rlgrap-filename,
filetype LIKE rlgrap-filetype VALUE 'ASC',
act_filename LIKE rlgrap-filename,
filesize TYPE i.
*
DATA: r_filename(40),
p_filename(40).
DATA: gv_answer TYPE rsnewleng-fcode.
CLASS lcl_handle_events DEFINITION.
PUBLIC SECTION.
METHODS:
on_user_command FOR EVENT added_function OF cl_salv_events
IMPORTING e_salv_function.
ENDCLASS.
CLASS lcl_handle_events IMPLEMENTATION.
METHOD on_user_command.
MOVE e_salv_function TO gv_answer.
LEAVE TO SCREEN 0.
ENDMETHOD.
ENDCLASS.
* Recording
SELECTION-SCREEN BEGIN OF BLOCK reco0 WITH FRAME TITLE t_reco0.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) t_grpid.
PARAMETERS: p_grpid LIKE apqi-groupid MEMORY ID BDC_RECORDING.
PARAMETERS: p_mandt LIKE apqi-mandant OBLIGATORY DEFAULT sy-mandt.
SELECTION-SCREEN END OF LINE.
* Created on
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) t_credt.
PARAMETERS: p_credt LIKE apqi-credate.
SELECTION-SCREEN END OF LINE.
* Created by
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) t_creur.
PARAMETERS: p_creur LIKE apqi-creator.
SELECTION-SCREEN END OF LINE.
*
SELECTION-SCREEN ULINE.
*
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) t_rfile.
PARAMETERS: p_rfile(128) LOWER CASE MEMORY ID exrcd.
*PARAMETERS: P_DIR(128) LOWER CASE MEMORY ID GR9.
SELECTION-SCREEN PUSHBUTTON (4) pb_txt USER-COMMAND fopen.
SELECTION-SCREEN END OF LINE.
*
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(30) t_rfile0.
SELECTION-SCREEN COMMENT 33(40) t_rfile1.
SELECTION-SCREEN END OF LINE.
*
SELECTION-SCREEN END OF BLOCK reco0.
*
SELECTION-SCREEN BEGIN OF BLOCK fsrc0 WITH FRAME TITLE t_fscr0.
SELECTION-SCREEN BEGIN OF LINE.
* Options: read from Local PC
SELECTION-SCREEN COMMENT 1(31) t_frpc1.
PARAMETERS p_frpc RADIOBUTTON GROUP fsrc USER-COMMAND rb1.
SELECTION-SCREEN COMMENT 35(15) t_frpc FOR FIELD p_frpc.
*selection-screen end of line.
*selection-screen begin of line.
* : Read from Server
PARAMETERS p_frsr RADIOBUTTON GROUP fsrc.
SELECTION-SCREEN COMMENT 53(15) t_frsr FOR FIELD p_frsr.
*
*parameters p_frpc radiobutton group fsrc.
*selection-screen comment 3(15) t_frpc.
*selection-screen end of line.
*selection-screen begin of line.
*parameters p_frsr radiobutton group fsrc.
*selection-screen comment 3(15) t_frsr.
*
SELECTION-SCREEN END OF LINE.
*
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) t_fname MODIF ID fnm.
PARAMETERS: p_fname LIKE rlgrap-filename
* DEFAULT 'C:\SAPWorkdir\MAT.TXT'
MEMORY ID dlf MODIF ID fnm.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: x_deflt AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN COMMENT 3(70) t_deflt FOR FIELD x_deflt.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) t_nultxt.
PARAMETERS: x_nulind DEFAULT '!'.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK fsrc0.
*
SELECTION-SCREEN BEGIN OF BLOCK sess0 WITH FRAME TITLE t_sess0.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: x_tran RADIOBUTTON GROUP btyp.
SELECTION-SCREEN COMMENT 3(20) t_tran FOR FIELD x_tran.
SELECTION-SCREEN END OF LINE.
*
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) t_dmode.
PARAMETERS: dmode LIKE ctu_params-dismode DEFAULT 'N'.
SELECTION-SCREEN END OF LINE.
*
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) t_umode.
PARAMETERS: umode LIKE ctu_params-updmode DEFAULT 'S'.
SELECTION-SCREEN END OF LINE.
*
SELECTION-SCREEN ULINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: x_ses RADIOBUTTON GROUP btyp.
SELECTION-SCREEN COMMENT 3(20) t_ses FOR FIELD x_ses.
SELECTION-SCREEN END OF LINE.
PARAMETERS: bdcgroup(12).
PARAMETERS: username LIKE sy-uname DEFAULT sy-uname OBLIGATORY.
SELECTION-SCREEN END OF BLOCK sess0.
*
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: p_cond AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN COMMENT 3(20) t_con FOR FIELD p_cond.
*SELECTION-SCREEN END OF LINE.
*
*SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: putmsg AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN COMMENT 26(20) t_pmsg FOR FIELD putmsg.
SELECTION-SCREEN END OF LINE.
*
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: p_ignore AS CHECKBOX.
SELECTION-SCREEN COMMENT 3(20) t_ig FOR FIELD p_ignore.
SELECTION-SCREEN END OF LINE.
*
DATA: BEGIN OF xdat OCCURS 0,
dat(1024),
END OF xdat.
*
RANGES: r_grpid FOR apqi-groupid,
r_credt FOR apqi-credate,
r_creur FOR apqi-creator.
*
DATA: apqitab LIKE apqi OCCURS 0 WITH HEADER LINE,
recording_type LIKE apqi-datatyp VALUE '%BDC'.
*
DATA: indata(1024) OCCURS 0 WITH HEADER LINE,
indata_lines TYPE i.
*
DATA: len TYPE i,
n TYPE i,
o TYPE i,
seq TYPE i,
dat(128),
ch.
*
DATA: BEGIN OF tab,
* t TYPE x VALUE '09',
t TYPE c,
END OF tab.
*
DATA: bdc_value(128) OCCURS 0 WITH HEADER LINE,
bdc_index TYPE i,
bdc_count TYPE i.
DATA trancode LIKE tstc-tcode.
DATA: fieldname,
start,
end,
data.
*
DATA: h LIKE d020s,
f LIKE d021s OCCURS 0 WITH HEADER LINE,
e LIKE d022s OCCURS 0 WITH HEADER LINE,
m LIKE d023s OCCURS 0 WITH HEADER LINE.
*
DATA: BEGIN OF dynp,
prog LIKE d020s-prog,
dnum LIKE d020s-dnum,
END OF dynp.
*
DATA: p_excel, p_tab.
TABLES: sscrfields.
DATA: g_fname LIKE rlgrap-filename,
g_mask TYPE string,
g_mode_open VALUE 'O',
g_title TYPE string VALUE 'FileUploadDialog'.
DATA: g_rfname LIKE rlgrap-filename.
DATA: sav_dir LIKE rlgrap-filename.
*
* for excel
TYPE-POOLS: ole2.
*
DATA: xl_row TYPE i,
xl_column TYPE i.
DATA: e_font(20) VALUE 'Arial',
e_size TYPE i VALUE 11.
DATA: e_sheet_no TYPE i VALUE 1,
e_sheet_name(20) VALUE 'TEST',
xl_title(100).
*
* Automation EXCEL
DATA: excel TYPE ole2_object, books TYPE ole2_object,
book TYPE ole2_object, sheets TYPE ole2_object,
sheet TYPE ole2_object, cells TYPE ole2_object,
cell TYPE ole2_object, appl TYPE ole2_object,
font TYPE ole2_object.
*
DATA: f_rc TYPE i.
DATA: l_len TYPE i,
l_cur TYPE i.
*------------------------------------------------------------*
* AT SELECTION-SCREEN
*------------------------------------------------------------*
AT SELECTION-SCREEN.
* Recording File name
IF sscrfields-ucomm = 'FOPEN'.
IF p_rfile <> space.
MOVE p_rfile TO g_fname.
SET PARAMETER ID 'EXRCD' FIELD g_fname. "Recording Upload path
ENDIF.
PERFORM call_open_dialog_er USING 'txt'.
IF sy-subrc = 0 AND g_fname <> space.
MOVE g_fname TO p_rfile.
SET PARAMETER ID 'EXRCD' FIELD g_fname. "Upload path
IF g_fname <> space AND f_rc = 0.
sav_dir = p_rfile = g_fname.
l_len = strlen( g_fname ).
DO l_len TIMES.
l_cur = l_len - sy-index.
IF g_fname+l_cur(1) = '\'.
EXIT.
ENDIF.
IF l_cur = 0.
EXIT.
ENDIF.
ENDDO.
*
IF l_len >= l_cur.
ADD 1 TO l_cur.
MOVE g_fname+l_cur TO r_filename.
ENDIF.
ELSE.
sav_dir = p_rfile.
ENDIF.
ENDIF.
ENDIF.
* BDC Upload filename
IF sscrfields-ucomm = 'FOPEN1'.
IF p_fname <> space.
MOVE p_fname TO g_fname.
SET PARAMETER ID 'DLF' FIELD g_fname. "Recording Upload path
ENDIF.
PERFORM call_open_dialog_er USING 'xlsx'.
IF sy-subrc = 0 AND g_fname <> space.
p_fname = g_fname.
SET PARAMETER ID 'DLF' FIELD g_fname. "Upload path
ENDIF.
ENDIF.
*
*------------------------------------------------------------*
* AT SELECTION-SCREEN ON .........
*------------------------------------------------------------*
AT SELECTION-SCREEN ON p_rfile.
IF p_rfile = space.
p_rfile = sav_dir.
t_rfile1 = r_filename.
ENDIF.
*
*------------------------------------------------------------*
* AT SELECTION-SCREEN-OUPUT
*------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
*
GET PARAMETER ID 'EXRCD' FIELD p_rfile.
GET PARAMETER ID 'DLF' FIELD p_fname.
t_rfile1 = r_filename.
LOOP AT SCREEN.
IF screen-group1 EQ 'FNM' AND p_frpc IS NOT INITIAL.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
*
*------------------------------------------------------------*
* INITIALIZATION
*------------------------------------------------------------*
INITIALIZATION.
*
* bdcgroup = 'ZBDCGROUP'.
username = sy-uname.
t_dmode = 'Run mode'.
t_umode = 'Update mode'.
t_tran = 'Call transaction'.
t_ses = 'Generate session'.
t_grpid = 'Recording'.
t_credt = 'Created on'.
t_creur = 'Created by'.
t_frpc = 'From PC'.
t_frsr = 'From Server'.
t_fname = 'Path: file name of the BDC data'.
t_fscr0 = 'BDC data'.
t_reco0 = 'Selection for Recording'.
t_sess0 = 'Processing type'.
t_deflt = 'Default Value: Use no space field value in Recording'.
t_nultxt = 'Null indicator'.
t_rfile = 'External recording file'.
t_con = 'Condense data'.
t_pmsg = 'Put Message'.
pb_txt = icon_open_folder.
* pb_txt1 = icon_open_folder.
t_rfile0 = 'Selected Record file'.
t_rfile1 = r_filename.
t_frpc1 = 'Source Machine'.
t_ig = 'Ignore Space BDC Field'.
*
GET PARAMETER ID 'EXRCD' FIELD p_rfile.
GET PARAMETER ID 'DLF' FIELD p_fname.
CLEAR g_mask.
IF sy-langu EQ '3'.
CONCATENATE g_mask 'Excel 통합문서 (*.xlsx)|*.xlsx|' INTO g_mask.
CONCATENATE g_mask 'Excel 97 - 2003 통합문서 (*.xls)|*.xls|' INTO g_mask.
CONCATENATE g_mask 'CSV(쉼표로 분리) (*.csv)|*.csv|' INTO g_mask.
CONCATENATE g_mask '텍스트 파일 (*.txt)|*.txt|' INTO g_mask.
* CONCATENATE G_MASK '|모든 파일 (*)|*' INTO G_MASK.
ELSE.
CONCATENATE g_mask 'Excel Workbook (*.xlsx)|*.xlsx|' INTO g_mask.
CONCATENATE g_mask 'Excel 97 - 2003 Workbook (*.xls)|*.xls|' INTO g_mask.
CONCATENATE g_mask 'CSV(Comma Separated) (*.csv)|*.csv|' INTO g_mask.
CONCATENATE g_mask 'Text file (*.txt)|*.txt|' INTO g_mask.
* CONCATENATE G_MASK '|All files (*)|*' INTO G_MASK.
ENDIF.
p_frpc = abap_true.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_grpid.
PERFORM f4if_grpid.
*
START-OF-SELECTION.
*
PERFORM get_tab_char.
*
IF p_grpid IS INITIAL AND
r_filename IS INITIAL.
MESSAGE s208(00) WITH
'Enter the Recording name or Ext.Recording file name'.
EXIT.
ENDIF.
*
IF x_ses = 'X' AND bdcgroup IS INITIAL.
MESSAGE s208(00) WITH 'Please, Enter the BDCGROUP Name'.
LEAVE LIST-PROCESSING.
ENDIF.
*
IF NOT p_grpid IS INITIAL.
PERFORM set_select_options.
SELECT FROM apqi INTO TABLE apqitab
WHERE groupid IN r_grpid
AND credate IN r_credt
AND datatyp = recording_type
AND mandant = p_mandt
AND creator IN r_creur
ORDER BY credate DESCENDING cretime DESCENDING.
DESCRIBE TABLE apqitab LINES sy-tfill.
IF sy-tfill = 0.
MESSAGE s108(04) WITH 'Not found recording !'.
LEAVE LIST-PROCESSING.
ENDIF.
CLEAR r_filename.
ELSEIF NOT r_filename IS INITIAL.
PERFORM upload_the_recording.
CLEAR icode.
MOVE 1 TO sy-lsind.
PERFORM put_screen_template.
CLEAR icode.
ELSE.
MESSAGE s108(04) WITH
'Please, Enter the Recording name or Ext.Recording file name'.
LEAVE LIST-PROCESSING.
ENDIF.
IF r_filename IS INITIAL.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
*
LOOP AT apqitab.
WRITE: /1 sy-vline,
(6) apqitab-mandant, sy-vline,
(12) apqitab-groupid, sy-vline,
(10) apqitab-credate, sy-vline,
(8) apqitab-cretime, sy-vline,
(12) apqitab-creator, sy-vline,
(5) apqitab-transcnt, sy-vline,
(5) apqitab-msgcnt, sy-vline.
apqi = apqitab.
HIDE: apqi-groupid, apqi-qid, apqi-mandant, apqitab.
ENDLOOP.
ULINE.
ENDIF.
CLEAR apqitab.
*
END-OF-SELECTION.
*
*
TOP-OF-PAGE.
*
IF sy-lsind = 0.
FORMAT COLOR COL_HEADING.
ULINE.
WRITE: /1 sy-vline,
(6) 'Client', sy-vline,
(12) 'Recording', sy-vline,
(10) 'Date', sy-vline,
(8) 'Time', sy-vline,
(12) 'Created by', sy-vline,
(5) 'Trans', sy-vline,
(5) 'Scrn', sy-vline.
ULINE.
ENDIF.
*
AT LINE-SELECTION.
*
IF NOT r_filename IS INITIAL.
MOVE 2 TO sy-lsind.
ENDIF.
*
IF sy-lsind = 1.
CHECK NOT apqi-groupid IS INITIAL.
CLEAR icode.
PERFORM put_screen_template.
CLEAR icode.
ELSEIF sy-lsind = 2.
CLEAR icode.
GET CURSOR FIELD icode.
*
IF icode = 'UPLOAD' OR icode = 'TESTING' OR icode = 'TESTONE'.
PERFORM upload_data.
DESCRIBE TABLE indata LINES sy-tfill.
IF sy-tfill > 0.
PERFORM confirm_processing_step.
IF indata_lines > 0.
PERFORM make_bdc_data.
ENDIF.
ENDIF.
ELSEIF icode = 'SESSION'.
PERFORM process_session.
ELSEIF icode = 'MAKETEMP'.
PERFORM make_template_in_excel.
* PERFORM save_recording.
ELSEIF icode = 'CLIP'.
PERFORM paste_from_clip.
DESCRIBE TABLE indata LINES sy-tfill.
MOVE 'UPLOAD' TO icode.
IF sy-tfill > 0.
PERFORM confirm_processing_step.
IF indata_lines > 0.
PERFORM make_bdc_data.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
*
*&---------------------------------------------------------------------*
*& Form put_screen_template
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM put_screen_template.
*
DATA: l_alpha(2), l_hex(10), l_x1(4), l_x2(4), l_char(10).
DATA: c_sw.
*
REFRESH: ftext, fnam.
CLEAR fnam.
CLEAR dyn_order.
*
alpha-x1 = 65.
alpha-x2 = 32.
*
IF r_filename IS INITIAL.
IF icode IS INITIAL AND NOT p_grpid IS INITIAL.
CALL FUNCTION 'BDC_OBJECT_READ'
EXPORTING
queue_id = apqi-qid
datatype = recording_type
* TRANS = apqi-TRANS
TABLES
dynprotab = dynflow
EXCEPTIONS
not_found = 1
OTHERS = 99.
IF sy-subrc <> 0.
MESSAGE s208(00) WITH 'Cannot get the Recoreing info.'.
EXIT.
ENDIF.
ENDIF.
ELSE.
*
*
ENDIF.
*
NEW-PAGE LINE-SIZE 120.
*
WRITE : /1 upload COLOR 5 HOTSPOT.
IF x_tran = 'X'.
WRITE: testone COLOR 5 HOTSPOT.
ENDIF.
WRITE: testing COLOR 5 HOTSPOT.
WRITE: clip COLOR 5 HOTSPOT QUICKINFO 'From Clipboard'.
WRITE: maketemp COLOR 5 HOTSPOT.
IF p_filename IS INITIAL.
WRITE: (50) space.
ELSE.
WRITE: p_filename,indata_lines.
ENDIF.
*
ULINE.
FORMAT COLOR COL_HEADING INTENSIFIED OFF.
* Recording Name
WRITE AT : /1(sy-linsz) 'Recording :'.
IF r_filename IS INITIAL.
WRITE 15 apqi-groupid.
ELSE.
WRITE 15 r_filename.
ENDIF.
*
ULINE.
*
LOOP AT dynflow.
dyn_tabix = sy-tabix.
* tcode line
IF dynflow-dynbegin = 'T'. " Tcode
tstct-tcode = dynflow-fnam.
trancode = tstct-tcode.
SELECT SINGLE FROM tstct WHERE sprsl = sy-langu
AND tcode = tstct-tcode.
FORMAT COLOR COL_KEY.
WRITE AT : /1(sy-linsz) 'Transaction :'.
WRITE: 15 tstct-tcode,
tstct-ttext.
ULINE.
start screen
ELSEIF dynflow-dynbegin = 'X'.
prg_dyn = dynp-prog = dynflow-program.
prg_dyn+41 = dynp-dnum = dynflow-dynpro.
IMPORT DYNPRO h f e m ID dynp.
CONDENSE prg_dyn.
FORMAT COLOR COL_GROUP INTENSIFIED ON.
WRITE AT : /1(sy-linsz) space,
4 prg_dyn.
ELSE.
IF dynflow-fnam(4) NE 'BDC_' OR
dynflow-fnam = 'BDC_OKCODE'.
* NOT use default and have value
* Increase Column order
IF dynflow-fnam NE 'BDC_OKCODE'.
IF NOT ( x_deflt = 'X' AND dynflow-fval NE space ).
IF alpha-x2 = 32.
alpha-x1 = alpha-x1 + 1.
IF alpha-x1 > 90.
IF alpha-x2 = 32.
alpha-x1 = alpha-x2 = 65.
ENDIF.
ENDIF.
ELSE.
alpha-x2 = alpha-x2 + 1.
IF alpha-x2 > 90.
alpha-x1 = alpha-x1 + 1.
alpha-x2 = 65.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
*
CLEAR dfies-fieldtext.
IF dynflow-fnam = 'BDC_OKCODE'.
dfies-fieldtext = 'F_CODE'.
FORMAT COLOR COL_GROUP INTENSIFIED OFF.
CLEAR c_sw.
ELSE.
FORMAT COLOR COL_NORMAL.
PERFORM get_fieldname.
ENDIF.
*
IF c_sw = space.
FORMAT INTENSIFIED ON.
MOVE 'X' TO c_sw.
ELSE.
FORMAT INTENSIFIED OFF.
CLEAR c_sw.
ENDIF.
*
WRITE: alpha-x1 TO l_x1,
alpha-x2 TO l_x2.
CONCATENATE '\X\' l_x1
'\X\' l_x2 INTO l_hex.
CALL FUNCTION 'STPU1_HEX_TO_CHAR'
EXPORTING
hex_string = l_hex
IMPORTING
char_string = l_char.
*
MOVE l_char TO l_alpha.
*
IF dynflow-fnam = 'BDC_OKCODE'.
FORMAT INTENSIFIED OFF.
WRITE: /6 dynflow-fnam(30) COLOR COL_GROUP INTENSIFIED OFF,
36 dfies-fieldtext(40).
ELSE.
WRITE: /6 dynflow-fnam(30) COLOR COL_POSITIVE,
36 dfies-fieldtext(40).
ENDIF.
IF dynflow-fnam = 'BDC_OKCODE'.
DATA: len TYPE i, pos TYPE i.
ELSEIF ( x_deflt = 'X' AND dynflow-fval NE space ).
WRITE 76(5) '.'.
ELSE.
WRITE:76(5) l_alpha COLOR COL_TOTAL.
ADD 1 TO fnam-order.
MOVE dynflow-fnam TO fnam-fnam.
APPEND fnam.
ENDIF.
*
IF icode = 'TESTING'.
READ TABLE sav_df INDEX dyn_tabix.
dynflow-fval = sav_df-fval.
ENDIF.
*
IF dynflow-fnam = 'BDC_OKCODE'.
WRITE: 81 dynflow-fval.
* len = STRLEN( dynflow-fval ).
len = 30.
pos = 81 + len + 1.
WRITE AT pos(1) f_test QUICKINFO 'Test Function' INPUT COLOR COL_NEGATIVE.
ELSE.
WRITE: 81 dynflow-fval.
WRITE AT pos(1) f_test QUICKINFO 'Put Space' INPUT COLOR COL_NEGATIVE.
ENDIF.
HIDE: dyn_tabix.
*
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " put_screen_template
*&---------------------------------------------------------------------*
*& Form upload_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM upload_data.
*
IF p_frpc = 'X'.
PERFORM call_open_dialog.
REFRESH indata.
IF NOT p_filename IS INITIAL.
PERFORM set_extension.
IF p_excel = 'X'.
PERFORM upload_excel.
ELSEIF p_tab = 'X'.
PERFORM ws_upload.
ENDIF.
DESCRIBE TABLE indata LINES indata_lines.
ENDIF.
ELSE.
DATA: open_msg(80).
OPEN DATASET p_fname FOR INPUT IN TEXT MODE
ENCODING DEFAULT MESSAGE open_msg.
IF sy-subrc NE 0.
MESSAGE s453(00) WITH 'Data Open error :' open_msg.
EXIT.
ENDIF.
*
MESSAGE s453(00) WITH 'Reading...' space.
DO.
READ DATASET p_fname INTO indata.
IF sy-subrc NE 0. EXIT. ENDIF.
APPEND indata.
ENDDO.
CLOSE DATASET p_fname.
ENDIF.
*
SET PARAMETER ID 'DLF' FIELD p_fname.
*
ENDFORM. " upload_data
*&---------------------------------------------------------------------*
*& Form make_bdc_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM make_bdc_data.
*
PERFORM read_input_value_from_list.
*
CLEAR bdc_count.
CLEAR:start, end, data, fieldname.
*
IF icode = 'UPLOAD' OR icode = 'TESTONE' OR icode = 'CLIP'.
NEW-PAGE LINE-SIZE 255.
ENDIF.
*
* DESCRIBE TABLE indata LINES indata_lines.
*
LOOP AT indata.
IF indata(1) = '*'. "comment row
CONTINUE.
ENDIF.
*
IF indata(9) = 'STARTDATA'. "data start row
start = 'X'.
data = 'X'.
IF fieldname = space.
ford[] = fnam[].
ENDIF.
CLEAR fieldname.
ENDIF.
*
IF indata(7) = 'ENDDATA'. "data finished row
end = 'X'.
ENDIF.
*
IF indata(9) = 'FIELDNAME'.
fieldname = 'X'.
ENDIF.
*
CHECK data = 'X' OR
fieldname = 'X'.
*
len = strlen( indata ).
CLEAR: n,o,seq,dat.
REFRESH bdc_value.
DO.
IF n => len.
EXIT.
ENDIF.
*
ch = indata+n(1).
IF ch = tab.
seq = seq + 1.
PERFORM move_bdc.
ADD 1 TO n.
CLEAR: o, dat.
ELSE.
dat+o(1) = indata+n(1).
ADD 1 TO: o, n.
ENDIF.
ENDDO.
*
seq = seq + 1.
PERFORM move_bdc.
CLEAR dat.
*
IF data = 'X'.
PERFORM append_to_bdc.
ENDIF.
*
IF end = 'X' OR
( ( icode NE 'UPLOAD' AND icode NE 'CLIP' )
AND ( start = 'X' ) ).
EXIT.
ENDIF.
ENDLOOP.
*
PERFORM close_bdc_group.
*
IF start IS INITIAL.
PERFORM put_error_msg.
ENDIF.
*
IF sy-subrc = 0.
IF ( icode = 'UPLOAD' OR
icode = 'CLIP' ) AND x_ses = 'X'.
WRITE: / session COLOR 5 HOTSPOT.
ULINE.
WRITE: / 'BDC session created.',
/ sy-uline,
/ 'BDC session :', bdcgroup,
/ 'BDC Count :', bdc_count.
ELSEIF icode = 'TESTING'.
PERFORM put_screen_template.
sy-lsind = sy-lsind - 1.
ENDIF.
ENDIF.
*
REFRESH indata.
CLEAR indata_lines.
*
ENDFORM. " make_bdc_data
*&---------------------------------------------------------------------*
*& Form move_bdc
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM move_bdc.
*
CLEAR ford.
*
CHECK seq > 1.
IF data = 'X'. "DATA line
bdc_value = dat.
IF p_cond = 'X'.
CONDENSE bdc_value.
ENDIF.
APPEND bdc_value.
ELSEIF fieldname = 'X'.
bdc_value = dat.
CONDENSE bdc_value.
READ TABLE fnam WITH KEY fnam = bdc_value.
IF sy-subrc = 0.
ford-order = fnam-order.
ford-fnam = fnam-fnam.
APPEND ford.
* MODIFY fnam INDEX sy-tabix TRANSPORTING order.
ELSE.
ford-fnam = bdc_value.
ford-order = seq - 1.
APPEND ford.
ENDIF.
ENDIF.
ENDFORM. " move_bdc
*&---------------------------------------------------------------------*
*& Form append_to_bdc
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM append_to_bdc.
*
CLEAR: bdc_value, bdc_index.
REFRESH bdc_data.
*
LOOP AT dynflow.
*
MOVE sy-tabix TO dyn_tabix.
*
IF dynflow-dynbegin = 'T'.
CONTINUE.
ENDIF.
*
bdc_data = dynflow.
IF bdc_data-dynbegin = 'X' OR "Start of Screen
bdc_data-fnam(4) = 'BDC_'. "BDC_... fields
* delete okcode for test
READ TABLE mod_fcode WITH KEY tabix = dyn_tabix.
IF sy-subrc = 0 AND mod_fcode-f_test = nodata.
MOVE '/N' TO bdc_data-fval.
ENDIF.
*
APPEND bdc_data.
CONTINUE.
ENDIF.
*
IF x_deflt = 'X' AND NOT bdc_data-fval IS INITIAL.
APPEND bdc_data.
CONTINUE.
ENDIF.
*
ADD 1 TO bdc_index.
READ TABLE ford INDEX bdc_index.
IF sy-subrc = 0.
READ TABLE bdc_value INDEX ford-order.
IF sy-subrc NE 0.
CLEAR bdc_value.
ENDIF.
ENDIF.
*
IF bdc_value = '!'. " null field
CONTINUE.
ENDIF.
*
IF p_ignore = 'X' AND bdc_value IS INITIAL.
READ TABLE mod_fcode WITH KEY tabix = dyn_tabix.
IF sy-subrc <> 0 OR mod_fcode-f_test = space.
CONTINUE.
ENDIF.
ENDIF.
*
bdc_data-fval = bdc_value.
APPEND bdc_data.
ENDLOOP.
*
IF icode = 'TESTING'.
CLEAR bdc_index.
REFRESH sav_df.
CLEAR sav_df.
LOOP AT dynflow INTO sav_df.
IF sav_df-dynbegin = 'T'.
APPEND sav_df.
CONTINUE.
ENDIF.
*
IF sav_df-dynbegin = 'X' OR
sav_df-fnam(4) = 'BDC_'.
APPEND sav_df.
CONTINUE.
ENDIF.
*
IF x_deflt = 'X' AND NOT sav_df-fval IS INITIAL.
APPEND sav_df.
CONTINUE.
ENDIF.
*
ADD 1 TO bdc_index.
READ TABLE ford INDEX bdc_index.
IF sy-subrc = 0.
READ TABLE bdc_value INDEX ford-order.
IF sy-subrc NE 0.
bdc_value = '!!'.
ENDIF.
ELSE.
bdc_value = '!!'.
ENDIF.
IF bdc_value = x_nulind OR " null field
bdc_value = '!!'.
sav_df-fval = '<Null>'.
APPEND sav_df.
CLEAR sav_df.
CONTINUE.
ENDIF.
sav_df-fval = bdc_value.
APPEND sav_df.
ENDLOOP.
ENDIF.
*
ADD 1 TO bdc_count.
*
IF bdc_count = 1 AND icode = 'UPLOAD'.
PERFORM open_bdc_group.
ENDIF.
*
IF x_ses = 'X'.
IF icode = 'UPLOAD' OR icode = 'CLIP'.
PERFORM bdc_insert.
ENDIF.
ELSEIF icode = 'TESTONE' OR icode = 'UPLOAD'
OR icode = 'CLIP'.
ccode(1) = tab.
TRANSLATE indata USING ccode.
FORMAT COLOR COL_KEY INTENSIFIED OFF.
WRITE: /(5) bdc_count , indata(120).
* call transaction
PERFORM call_transaction.
ENDIF.
*
IF putmsg = 'X'.
PERFORM put_sapgui_message.
ENDIF.
*
ENDFORM. " append_to_bdc
*&---------------------------------------------------------------------*
*& Form open_bdc_group
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM open_bdc_group.
*
CHECK x_ses = 'X'.
*
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
group = bdcgroup
user = username
keep = 'X'
EXCEPTIONS
client_invalid = 1
destination_invalid = 2
group_invalid = 3
group_is_locked = 4
holddate_invalid = 5
internal_error = 6
queue_error = 7
running = 8
system_lock_error = 9
user_invalid = 10
OTHERS = 11.
*
IF sy-subrc NE 0.
MESSAGE e435(00) WITH 'BDC GROUP Open Error !'.
ENDIF.
*
ENDFORM. " open_bdc_group
*&---------------------------------------------------------------------*
*& Form close_bdc_group
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM close_bdc_group.
*
CHECK x_ses = 'X'.
CHECK icode = 'UPLOAD' OR icode = 'CLIP'.
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
not_open = 1
queue_error = 2
OTHERS = 3.
*
ENDFORM. " close_bdc_group
*&---------------------------------------------------------------------*
*& Form set_select_options
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM set_select_options.
*
IF p_grpid CP '*'.
r_grpid-option = 'CP'.
r_grpid-sign = 'I'.
r_grpid-low = p_grpid.
APPEND r_grpid.
ELSEIF p_grpid NE space.
r_grpid-option = 'EQ'.
r_grpid-sign = 'I'.
r_grpid-low = p_grpid.
APPEND r_grpid.
ENDIF.
*
IF NOT p_credt IS INITIAL.
r_credt-option = 'EQ'.
r_credt-sign = 'I'.
r_credt-low = p_credt.
APPEND r_credt.
ENDIF.
*
IF NOT p_creur IS INITIAL.
r_creur-option = 'EQ'.
r_creur-sign = 'I'.
r_creur-low = p_creur.
APPEND r_creur.
ENDIF.
ENDFORM. " set_select_options
*&---------------------------------------------------------------------*
*& Form PROCESS_SESSION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM process_session.
*
SET PARAMETER ID 'MPN' FIELD bdcgroup.
*
CALL TRANSACTION 'SM35' AND SKIP FIRST SCREEN.
ENDFORM. " PROCESS_SESSION
*&---------------------------------------------------------------------*
*& Form GET_FIELDNAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_fieldname.
*
DATA: t_line_nr(4).
*
CLEAR ftext.
*
f-ityp = '2'.
f-fnam = dynflow-fnam.
READ TABLE f WITH KEY fnam = f-fnam
ityp = f-ityp.
*
* IF sy-subrc = 0 AND f-stxt NE space.
* dfies-fieldtext = f-stxt.
* EXIT.
* ENDIF.
*
IF dynflow-fnam CA '-'.
x031l-tabname = dynflow-fnam(sy-fdpos).
sy-fdpos = sy-fdpos + 1.
x031l-fieldname = dynflow-fnam+sy-fdpos.
ELSE.
CLEAR sy-fdpos.
CLEAR x031l-fieldname.
x031l-fieldname = dynflow-fnam+sy-fdpos.
ENDIF.
*
CLEAR t_line_nr.
IF x031l-fieldname CA '('.
t_line_nr = x031l-fieldname+sy-fdpos.
x031l-fieldname = x031l-fieldname(sy-fdpos).
ENDIF.
*
readtype = 'X'.
CLEAR dfies.
*
DO.
CALL 'C_DD_READ_FIELD'
ID 'TYPE' FIELD readtype
ID 'TABNAME' FIELD x031l-tabname
ID 'FIELDNAME' FIELD x031l-fieldname
ID 'LANGUAGE' FIELD sy-langu.
IF sy-subrc = 0. EXIT. ENDIF.
IF readtype = space. EXIT. ENDIF.
CLEAR readtype.
ENDDO.
*
MOVE dfies-outputlen TO ftext-outputlen.
MOVE dfies-scrtext_s TO ftext-scrtext_s.
MOVE dfies-scrtext_m TO ftext-scrtext_m.
MOVE dfies-scrtext_l TO ftext-scrtext_l.
MOVE dfies-fieldtext TO ftext-fieldtext.
MOVE dfies-reptext TO ftext-reptext.
MOVE dyn_tabix TO ftext-tabix.
MOVE t_line_nr TO ftext-lineno.
APPEND ftext.
*
ENDFORM. " GET_FIELDNAME
*&---------------------------------------------------------------------*
*& Form BDC_INSERT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM bdc_insert.
*
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = trancode
TABLES
dynprotab = bdc_data
EXCEPTIONS
internal_error = 1
not_open = 2
queue_error = 3
tcode_invalid = 4
OTHERS = 5.
*
IF sy-subrc NE 0.
MESSAGE e435(00) WITH 'BDC INSERT Error !'.
ENDIF.
ENDFORM. " BDC_INSERT
*&---------------------------------------------------------------------*
*& Form CALL_TRANSACTION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM call_transaction.
*
DATA: w_dmode LIKE ctu_params-dismode VALUE 'A'.
*
IF icode = 'UPLOAD'.
w_dmode = dmode.
ENDIF.
*
REFRESH messtab.
*
bdc_params-dismode = w_dmode.
bdc_params-updmode = umode.
bdc_params-cattmode = space.
bdc_params-defsize = 'X'.
bdc_params-racommit = 'X'.
bdc_params-nobinpt = space.
bdc_params-nobiend = space.
*
CALL TRANSACTION trancode USING bdc_data
OPTIONS FROM bdc_params
* MODE w_dmode
* UPDATE umode
MESSAGES INTO messtab.
*
tran_subrc = sy-subrc.
*
PERFORM write_message TABLES messtab.
*
ENDFORM. " CALL_TRANSACTION
*&---------------------------------------------------------------------*
*& Form WRITE_MESSAGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_MESSTAB text
*----------------------------------------------------------------------*
FORM write_message TABLES p_messtab STRUCTURE messtab.
*
DATA: msg_type(10), msgtn(20).
*
LOOP AT p_messtab.
SELECT SINGLE FROM t100 WHERE sprsl = p_messtab-msgspra
AND arbgb = p_messtab-msgid
AND msgnr = p_messtab-msgnr.
CASE p_messtab-msgtyp.
WHEN 'E'.
FORMAT COLOR COL_NEGATIVE INTENSIFIED OFF.
MOVE '~<E>' TO msg_type.
WHEN 'W'.
FORMAT COLOR COL_TOTAL INTENSIFIED ON.
MOVE '~<W>' TO msg_type.
WHEN 'S'.
FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
MOVE '~<S>' TO msg_type.
WHEN 'I'.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
MOVE '~<I>' TO msg_type.
WHEN 'A'.
FORMAT COLOR COL_GROUP INTENSIFIED ON.
MOVE '~<A>' TO msg_type.
IF p_messtab-msgnr = '359' AND
p_messtab-msgid = '00'.
CONTINUE.
ENDIF.
WHEN 'X'.
FORMAT COLOR COL_GROUP INTENSIFIED ON.
MOVE '~<X>' TO msg_type.
WHEN OTHERS.
FORMAT COLOR COL_BACKGROUND INTENSIFIED ON.
MOVE '~<?>' TO msg_type.
ENDCASE.
CONCATENATE p_messtab-msgid p_messtab-msgnr INTO msgtn.
*
IF sy-subrc = 0.
l_mstring = t100-text.
IF l_mstring CS '&1'.
REPLACE '&1' WITH p_messtab-msgv1 INTO l_mstring.
REPLACE '&2' WITH p_messtab-msgv2 INTO l_mstring.
REPLACE '&3' WITH p_messtab-msgv3 INTO l_mstring.
REPLACE '&4' WITH p_messtab-msgv4 INTO l_mstring.
ELSE.
REPLACE '&' WITH p_messtab-msgv1 INTO l_mstring.
REPLACE '&' WITH p_messtab-msgv2 INTO l_mstring.
REPLACE '&' WITH p_messtab-msgv3 INTO l_mstring.
REPLACE '&' WITH p_messtab-msgv4 INTO l_mstring.
ENDIF.
CONDENSE l_mstring.
WRITE: /11 msg_type, msgtn, l_mstring(120).
ELSE.
WRITE: /11 msg_type, p_messtab-msgid(4),
p_messtab-msgnr.
ENDIF.
ENDLOOP.
IF tran_subrc NE 0.
IF f_test IS INITIAL.
FORMAT COLOR COL_NEGATIVE INTENSIFIED OFF.
WRITE: /11 'TRAN_SUBRC:', tran_subrc.
ELSE.
FORMAT COLOR COL_TOTAL INTENSIFIED OFF.
WRITE: /11 '<TESTMODE>:', tran_subrc.
ENDIF.
ENDIF.
ENDFORM. " WRITE_MESSAGE
*&---------------------------------------------------------------------*
*& Form SAVE_RECORDING
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM save_recording.
*
* APPEND apgitab TO xdat.
*
* LOOP AT dynflow.
* xdat = dynflow. APPEND xdat.
* ENDLOOP.
*
* CALL FUNCTION 'DOWNLOAD'
* EXPORTING
* filename = filename
* filetype = filetype
* IMPORTING
* act_filename = act_filename
* filesize = filesize
* TABLES
* data_tab = xdat.
*
* IF filesize > 0.
* MESSAGE i208(00) WITH 'Donwload finished.'.
* ENDIF.
MESSAGE i208(00) WITH 'Not Supported.'.
ENDFORM. " SAVE_RECORDING
*&---------------------------------------------------------------------*
*& Form UPLOAD_THE_RECORDING
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM upload_the_recording.
*
* MESSAGE i398(00) WITH 'Not Supported.'.
DATA: l_fullpath TYPE string.
DATA: t_tcode LIKE tstc-tcode.
*
REFRESH dynflow.
l_fullpath = p_rfile.
*
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = l_fullpath
* FILETYPE = 'ASC'
has_field_separator = 'X'
* HEADER_LENGTH = 0
* IMPORTING
IMPORTING
filelength = filesize
* HEADER =
TABLES
data_tab = dynflow
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF sy-subrc = 0.
MESSAGE s642(sm) WITH l_fullpath.
* E_GLOB-MODIFIED = 'X'.
ELSE.
* File & does not exist
MESSAGE i643(ms) WITH l_fullpath.
LEAVE LIST-PROCESSING.
ENDIF.
*
READ TABLE dynflow INDEX 1.
IF sy-subrc = 0 AND dynflow-dynbegin = 'T'.
MOVE dynflow-fnam TO t_tcode.
SELECT SINGLE tcode INTO t_tcode FROM tstc
WHERE tcode = t_tcode.
IF sy-subrc NE 0.
MESSAGE i108(04) WITH 'Cannot Support TCODE:' dynflow-fnam.
LEAVE LIST-PROCESSING.
ENDIF.
ELSE.
MESSAGE i108(04) WITH 'Cannot Support Recording file.'.
LEAVE LIST-PROCESSING.
ENDIF.
* p_rfile = act_filename.
* SET PARAMETER ID 'DLP' FIELD p_rfile.
*
* IF filesize > 0.
* LOOP AT xdat.
* IF sy-tabix = 1.
* apqitab = xdat.
* IF apqitab-datatyp = '%BDC'.
* APPEND apqitab.
* ENDIF.
* CONTINUE.
* ENDIF.
* dynflow = xdat. APPEND dynflow.
* ENDLOOP.
* CLEAR p_grpid.
* ENDIF.
* REFRESH xdat.
*
ENDFORM. " UPLOAD_THE_RECORDING
*----------------------------------------------------------------------
*&---------------------------------------------------------------------*
*& Form call_open_dialog
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM call_open_dialog .
DATA: l_len TYPE i,
l_cur TYPE i,
rc TYPE i.
TYPE-POOLS: abap.
*
DATA: l_wintitle TYPE string, "title
l_fullpath TYPE string, "full path
l_action TYPE i, "action
l_filetab TYPE filetable, "file table
l_rc TYPE i. "return code
DATA: file_name TYPE string,
file_path TYPE string.
MOVE g_title TO l_wintitle.
*
IF p_filename IS NOT INITIAL.
MOVE p_filename TO file_name.
ENDIF.
*
IF NOT g_fname IS INITIAL.
l_len = strlen( g_fname ).
DO l_len TIMES.
l_cur = l_len - sy-index.
IF g_fname+l_cur(1) = '\'.
EXIT.
ENDIF.
IF l_cur = 0.
EXIT.
ENDIF.
ENDDO.
IF l_len >= l_cur.
MOVE g_fname(l_cur) TO file_path.
ENDIF.
ENDIF.
*
CLEAR p_filename.
*
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = g_title
default_filename = file_name
* default_extension = 'txt'
file_filter = g_mask
initial_directory = file_path
multiselection = abap_false
CHANGING
file_table = l_filetab
rc = l_rc
user_action = l_action
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
OTHERS = 4.
*
IF sy-subrc = 0.
IF l_action = cl_gui_frontend_services=>action_cancel.
ELSE.
IF l_rc > 0.
READ TABLE l_filetab INDEX 1 INTO g_fname.
p_fname = g_fname.
l_len = strlen( g_fname ).
DO l_len TIMES.
l_cur = l_len - sy-index.
IF g_fname+l_cur(1) = '\'.
EXIT.
ENDIF.
IF l_cur = 0.
EXIT.
ENDIF.
ENDDO.
IF l_len >= l_cur.
ADD 1 TO l_cur.
MOVE g_fname+l_cur TO p_filename.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
*
ENDFORM. " call_open_dialog
*&---------------------------------------------------------------------*
*& Form set_extension
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM set_extension .
DATA: patt TYPE string VALUE '.',
text TYPE string,
result_tab TYPE match_result_tab.
DATA: lv_extension TYPE string,
lv_ext_s TYPE i VALUE 0,
lv_ext_e TYPE i VALUE 0.
FIELD-SYMBOLS <match> LIKE LINE OF result_tab.
MOVE p_filename TO text.
FIND ALL OCCURRENCES OF patt IN
text
RESULTS result_tab.
LOOP AT result_tab ASSIGNING <match>.
lv_ext_s = <match>-offset + <match>-length.
lv_ext_e = strlen( text ) - lv_ext_s.
IF strlen( text ) > lv_ext_s.
lv_extension = text+lv_ext_s(lv_ext_e).
ENDIF.
ENDLOOP.
TRANSLATE lv_extension TO UPPER CASE.
CASE lv_extension.
WHEN 'XLS' OR 'XLSX' OR 'CSV'.
CLEAR p_tab.
MOVE 'X' TO p_excel.
WHEN 'TXT'.
CLEAR p_excel.
MOVE 'X' TO p_tab.
WHEN OTHERS.
CLEAR: p_excel, p_tab.
ENDCASE.
ENDFORM. " set_extension
*&---------------------------------------------------------------------*
*& Form WS_UPLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ws_upload .
*
DATA: act_filename LIKE rlgrap-filename,
f_len TYPE i.
*
REFRESH indata.
*
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
filename = p_fname
filetype = 'ASC'
IMPORTING
filelength = f_len
TABLES
data_tab = indata
EXCEPTIONS
conversion_error = 1
invalid_table_width = 2
invalid_type = 3
no_batch = 4
gui_refuse_filetransfer = 5
unknown_error = 6
OTHERS = 7.
*
IF sy-subrc NE 0.
MESSAGE i398(00) WITH 'Data Open error'.
ENDIF.
ENDFORM. " WS_UPLOAD
*&---------------------------------------------------------------------*
*& Form UPLOAD_EXCEL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM upload_excel .
*
DATA : exdat LIKE alsmex_tabline OCCURS 0 WITH HEADER LINE.
DATA : e_srt_col TYPE i VALUE 1,
e_srt_row TYPE i VALUE 1,
e_end_col TYPE i VALUE 26,
e_end_row TYPE i VALUE 65536.
*
* UPLOAD EXCEL FILE
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_fname
i_begin_col = e_srt_col
i_begin_row = e_srt_row
i_end_col = e_end_col
i_end_row = e_end_row
TABLES
intern = exdat
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2.
* zcl_utility=>excel_upload(
* EXPORTING
* iv_filename = CONV #( p_fname )
* iv_begin_col = e_srt_col
* iv_begin_row = e_srt_row
* iv_end_col = e_end_col
* iv_end_row = e_end_row
* IMPORTING
* et_intern = DATA(exdat)
* EXCEPTIONS
* inconsistent_parameters = 1
* upload_ole = 2
* excel_data_error = 3
* OTHERS = 4
* ).
* IF sy-subrc <> 0.
* MESSAGE i398(00) WITH 'Data Upload Error !'.
* ENDIF.
*
DATA: f_col TYPE i,
offset TYPE i,
len TYPE i,
n1 TYPE i.
LOOP AT exdat INTO DATA(ls_exdat).
AT NEW row.
CLEAR: f_col, offset.
ENDAT.
*
ADD 1 TO f_col.
IF f_col < ls_exdat-col.
n1 = ls_exdat-col - f_col.
DO n1 TIMES.
ADD 1 TO f_col.
MOVE tab TO indata+offset.
ADD 1 TO offset.
ENDDO.
ENDIF.
*
IF f_col = ls_exdat-col.
MOVE ls_exdat-value TO indata+offset.
len = strlen( ls_exdat-value ).
offset = offset + len.
MOVE tab TO indata+offset.
ADD 1 TO offset.
ENDIF.
*
AT END OF row.
offset = offset - 1.
MOVE space TO indata+offset.
APPEND indata.
ENDAT.
ENDLOOP.
*
ENDFORM. " UPLOAD_EXCEL
*&---------------------------------------------------------------------*
*& Form paste_from_clip
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM paste_from_clip .
*
DATA: file_table TYPE filetable,
rc TYPE i,
filedat TYPE string.
DATA: file_table_clip TYPE STANDARD TABLE OF file_table.
*
DATA: BEGIN OF file_tab OCCURS 1,
zeile(500) TYPE c,
END OF file_tab.
*
CALL METHOD cl_gui_frontend_services=>clipboard_import
IMPORTING
data = file_table_clip
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc = 3.
MESSAGE e888(db). EXIT.
ELSEIF sy-subrc <> 0.
MESSAGE e889(db). EXIT.
ENDIF.
indata[] = file_table_clip[].
CLEAR p_filename.
*
ENDFORM. " paste_from_clip
*&---------------------------------------------------------------------*
*& Form read_input_value_from_list
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM read_input_value_from_list .
*
REFRESH mod_fcode.
*
DO.
CLEAR: f_test, dyn_tabix.
READ LINE sy-index FIELD VALUE f_test dyn_tabix.
IF sy-subrc NE 0.
EXIT.
ENDIF.
IF f_test = nodata.
MOVE f_test TO mod_fcode-f_test.
MOVE dyn_tabix TO mod_fcode-tabix.
APPEND mod_fcode.
ENDIF.
ENDDO.
*
CLEAR f_test.
DESCRIBE TABLE mod_fcode LINES sy-tfill.
IF sy-tfill > 0.
MOVE 'X' TO f_test.
ENDIF.
ENDFORM. " read_input_value_from_list
*&---------------------------------------------------------------------*
*& Form make_template_in_excel
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM make_template_in_excel .
CREATE OBJECT excel 'EXCEL.APPLICATION'.
*
CALL METHOD OF excel 'APPLICATION' = appl.
SET PROPERTY OF appl 'STANDARDFONT' = e_font.
SET PROPERTY OF appl 'STANDARDFONTSIZE' = e_size.
*
CALL METHOD OF excel 'WORKBOOKS' = books.
CALL METHOD OF books 'ADD' = book. "ADD, OPEN
*
CALL METHOD OF book 'sheets' = sheets.
CALL METHOD OF sheets 'item' = sheet
EXPORTING
#1 = 1.
CALL METHOD OF sheet 'Activate'.
*
CALL METHOD OF sheet 'cells' = cells.
*
LOOP AT dynflow.
*
MOVE sy-tabix TO dyn_tabix.
*
IF dynflow-dynbegin = 'T'. " Tcode
* Write Header Title to Excel
MOVE dynflow-fnam TO e_sheet_name.
SET PROPERTY OF sheet 'NAME' = e_sheet_name. " Name of Sheet
CONCATENATE '*' tstct-ttext '(TCODE:' trancode ')/'
'Recording:' apqi-groupid
'(' x_deflt ')' INTO xl_title.
*
PERFORM xl_put_to_cell USING 1 1 xl_title.
PERFORM xl_put_to_cell USING 2 1 '*Description:'.
PERFORM xl_put_to_cell USING 3 1 '*FIELDNAME'.
*
PERFORM xl_put_to_cell USING 4 1 'STARTDATA'.
PERFORM xl_put_to_cell USING 24 1 'ENDDATA'.
xl_row = 2.
xl_column = 1.
ELSEIF dynflow-dynbegin = space.
* e_size = 9.
* SET PROPERTY OF sheet 'STANDARDFONTSIZE' = e_size.
IF dynflow-fnam(4) NE 'BDC_'.
IF NOT ( x_deflt = 'X' AND dynflow-fval NE space ).
ADD 1 TO xl_column.
*
READ TABLE ftext WITH KEY tabix = dyn_tabix.
IF sy-subrc = 0.
IF ftext-lineno NE space.
CONCATENATE ftext-scrtext_m ftext-lineno INTO ftext-scrtext_m.
ENDIF.
PERFORM xl_put_to_cell USING xl_row xl_column ftext-scrtext_m.
ENDIF.
*
xl_row = xl_row + 1.
PERFORM xl_put_to_cell USING xl_row xl_column dynflow-fnam.
*
xl_row = xl_row + 1.
IF dynflow-fval NE space.
PERFORM xl_put_to_cell USING xl_row xl_column dynflow-fval.
ENDIF.
xl_row = xl_row - 2.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
*
SET PROPERTY OF excel 'VISIBLE' = 1.
*
FREE OBJECT cells.
FREE OBJECT sheet.
FREE OBJECT sheets.
FREE OBJECT book.
FREE OBJECT books.
FREE OBJECT appl.
FREE OBJECT excel.
* DATA(lo_excel) = NEW zcl_excel( ).
* DATA(lo_style) = lo_excel->add_new_style( ).
* lo_style->font->bold = abap_true.
* lo_style->font->size = 14.
* DATA(lo_style_guid) = lo_style->get_guid( ).
*
* LOOP AT dynflow.
**
* MOVE sy-tabix TO dyn_tabix.
**
* IF dynflow-dynbegin = 'T'. " Tcode
** Write Header Title to Excel
* MOVE dynflow-fnam TO e_sheet_name.
* DATA(lo_sheet) = lo_excel->get_active_worksheet( ).
* lo_sheet->set_title( CONV #( e_sheet_name ) ).
*
* CONCATENATE '*' tstct-ttext '(TCODE:' trancode ')/'
* 'Recording:' apqi-groupid
* '(' x_deflt ')' INTO xl_title.
*
* lo_sheet->set_column_width(
* ip_column = 1
* ip_width_fix = 12
* ip_width_autosize = abap_false
* ).
*
* lo_sheet->set_cell(
* ip_column = 1
* ip_row = 1
* ip_value = xl_title
* ip_style = lo_style_guid
* ).
*
* lo_sheet->set_cell(
* ip_column = 1
* ip_row = 2
* ip_value = '*Description:'
* ).
* lo_sheet->set_cell(
* ip_column = 1
* ip_row = 3
* ip_value = '*FIELDNAME'
* ).
* lo_sheet->set_cell(
* ip_column = 1
* ip_row = 4
* ip_value = 'STARTDATA'
* ).
* lo_sheet->set_cell(
* ip_column = 1
* ip_row = 24
* ip_value = 'ENDDATA'
* ).
*
* xl_row = 2.
* xl_column = 1.
* ELSEIF dynflow-dynbegin = space.
** e_size = 9.
** SET PROPERTY OF sheet 'STANDARDFONTSIZE' = e_size.
* IF dynflow-fnam(4) NE 'BDC_'.
* IF NOT ( x_deflt = 'X' AND dynflow-fval NE space ).
* ADD 1 TO xl_column.
*
* lo_sheet->set_column_width(
* ip_column = xl_column
* ip_width_fix = 10
* ip_width_autosize = abap_false
* ).
*
* READ TABLE ftext WITH KEY tabix = dyn_tabix.
* IF sy-subrc = 0.
* IF ftext-lineno NE space.
* CONCATENATE ftext-scrtext_m ftext-lineno INTO ftext-scrtext_m.
* ENDIF.
* lo_sheet->set_cell(
* ip_column = xl_column
* ip_row = xl_row
* ip_value = ftext-scrtext_m
* ).
* ENDIF.
**
* xl_row = xl_row + 1.
* lo_sheet->set_cell(
* ip_column = xl_column
* ip_row = xl_row
* ip_value = dynflow-fnam
* ).
**
* xl_row = xl_row + 1.
* IF dynflow-fval NE space.
* lo_sheet->set_cell(
* ip_column = xl_column
* ip_row = xl_row
* ip_value = dynflow-fval
* ).
* ENDIF.
* xl_row = xl_row - 2.
*
* ENDIF.
* ENDIF.
* ENDIF.
* ENDLOOP.
*
* zcl_utility=>file_save_dialog(
* EXPORTING
* iv_default_extension = 'XLSX'
* iv_default_file_name = |{ apqi-groupid }_Upload_Template.xlsx|
* iv_bindata = NEW zcl_excel_writer_2007( )->zif_excel_writer~write_file( lo_excel )
* iv_and_open = abap_true
* ).
ENDFORM. " make_template_in_excel
*
FORM xl_put_to_cell USING row col value.
* here you get the CELL object
CALL METHOD OF cells 'ITEM' = cell
EXPORTING
#1 = row
#2 = col.
* here you use the CELL object
SET PROPERTY OF cell 'VALUE' = value. " write VALUE to the excel cell
GET PROPERTY OF cell 'FONT' = font.
*
IF row = 1.
SET PROPERTY OF font 'BOLD' = 1.
SET PROPERTY OF font 'SIZE' = 14.
ELSE.
SET PROPERTY OF font 'BOLD' = 0.
SET PROPERTY OF font 'SIZE' = 9.
ENDIF.
*
FREE OBJECT cell.
FREE OBJECT font.
*
ENDFORM. "FILL_CELL
*&---------------------------------------------------------------------*
*& Form CALL_OPEN_DIALOG_ER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM call_open_dialog_er USING p_default_extension.
DATA: l_fullpath TYPE string, "full path
l_action TYPE i, "action
l_filetab TYPE filetable, "file table
l_rc TYPE i. "return code
DATA: file_name TYPE string,
file_path TYPE string.
MOVE g_fname TO file_name.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = g_title
default_filename = file_name
default_extension = p_default_extension
file_filter = g_mask
initial_directory = file_path
multiselection = abap_false
CHANGING
file_table = l_filetab
rc = l_rc
user_action = l_action
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
OTHERS = 4.
IF sy-subrc = 0.
IF l_action = cl_gui_frontend_services=>action_cancel.
ELSE.
IF l_rc > 0.
READ TABLE l_filetab INDEX 1 INTO g_fname.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " CALL_OPEN_DIALOG_ER
*&---------------------------------------------------------------------*
*& Form put_error_msg
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM put_error_msg .
*
CALL FUNCTION 'POPUP_TO_CONFIRM_MSG_WITH_CALL'
EXPORTING
txt01 = 'I Can''t found the ''STARTDATA'' tag.'
txt02 = space
txt03 = space
* VALUE(TXT04) DEFAULT SPACE
* VALUE(PAR01) DEFAULT SPACE
* VALUE(PAR02) DEFAULT SPACE
* VALUE(PAR03) DEFAULT SPACE
* VALUE(PAR04) DEFAULT SPACE
new_line1 = 'X'
new_line2 = 'X'
new_line3 = 'X'
title = 'Failure Upload file'
length = 100
txt_first_pushbutton = 'Confirm.'
* VALUE(TXT_SECOND_PUSHBUTTN) OPTIONAL
* VALUE(FUNCT_MODULE) DEFAULT SPACE
EXCEPTIONS
function_module_missed = 1
text_second_pushbutton_missed = 2.
*
* WRITE: / 'ERROR :' COLOR COL_NEGATIVE,
* 'I Can''t found the ''STARTDATA'' tag.'.
ENDFORM. " put_error_msg
*&---------------------------------------------------------------------*
*& Form CONFIRM_PROCESSING_STEP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM confirm_processing_step .
*
DATA: t_tcode(60),
t_datafile(60),
t_record(60),
t_question(60) VALUE 'Processing data ?',
t_indata_lines(10).
DATA: t_text1(120),
t_text2(120).
*
DATA: answer.
DATA: lt_disp_tab TYPE sesf_string_tab,
ls_disp_tab LIKE LINE OF lt_disp_tab.
indata_lines = 0.
LOOP AT indata.
IF indata(9) = 'STARTDATA'. "data start row
indata_lines = 1.
ELSEIF indata(7) = 'ENDDATA'. "data finished row
ADD 1 TO indata_lines.
EXIT.
ELSE.
IF indata_lines > 0.
ADD 1 TO indata_lines.
ENDIF.
ENDIF.
ENDLOOP.
CONCATENATE 'Tcode:' tstct-tcode tstct-ttext INTO t_tcode
SEPARATED BY space.
*
CONCATENATE 'Data file:' p_filename INTO t_datafile
SEPARATED BY space.
WRITE indata_lines TO t_indata_lines.
CONCATENATE 'Record count:' t_indata_lines INTO t_record
SEPARATED BY space.
CONCATENATE t_tcode t_question INTO t_text1 SEPARATED BY ' / '.
t_text2 = t_record.
IF p_filename IS NOT INITIAL.
CONCATENATE t_text2 t_datafile INTO t_text2 SEPARATED BY ' / '.
ENDIF.
* 미리보기 화면 추가
DATA: lt_user_buttons TYPE STANDARD TABLE OF smp_dyntxt,
lv_title TYPE sytitle.
MOVE t_text1 TO lv_title.
lt_user_buttons = VALUE #( ( text = '실행' icon_id = '@0V@' icon_text = '실행' quickinfo = '실행' )
( text = '취소' icon_id = '@0W@' icon_text = '취소' quickinfo = '취소' ) ).
CALL FUNCTION 'BKK_POPUP_DISPLAY_LIST'
EXPORTING
i_callback_program = sy-repid
i_callback_write_form = 'DISPLAY_DATA'
i_title = lv_title
i_start_column = 5
i_start_row = 5
i_end_column = 70
i_end_row = 15
i_display_ok_button = space
i_display_cancel_button = space
* IMPORTING
* ANSWER = LV_ANSWER
TABLES
user_buttons = lt_user_buttons.
ENDFORM. " CONFIRM_PROCESSING_STEP
*&---------------------------------------------------------------------*
*& Form put_sapgui_message
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM put_sapgui_message .
*
DATA: t_text(50).
*
MOVE 'Processing:' TO t_text.
WRITE bdc_count TO t_text+15(10).
WRITE indata_lines TO t_text+30(10).
*
MOVE '/' TO t_text+27(1).
CONDENSE t_text.
*
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = t_text.
*
ENDFORM. " put_sapgui_message
*&---------------------------------------------------------------------*
*& Form get_tab_char
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_tab_char .
*
DATA: l_tab(10), l_char_tab(10).
*
MOVE '\X\09' TO l_tab.
*
CALL FUNCTION 'STPU1_HEX_TO_CHAR'
EXPORTING
hex_string = l_tab
IMPORTING
char_string = l_char_tab.
*
MOVE l_char_tab TO tab.
ENDFORM. " get_tab_char
*&---------------------------------------------------------------------*
*& Form F4IF_GRPID
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& <-- P_GRPID
*&---------------------------------------------------------------------*
FORM f4if_grpid.
DATA : BEGIN OF lt_apqi OCCURS 0,
groupid LIKE apqi-groupid,
userid LIKE apqi-userid,
creator LIKE apqi-creator,
credate LIKE apqi-credate,
cretime LIKE apqi-cretime,
transcnt LIKE apqi-transcnt,
msgcnt LIKE apqi-msgcnt,
END OF lt_apqi.
SELECT
groupid
userid
creator
credate
cretime
transcnt
msgcnt
INTO CORRESPONDING FIELDS OF TABLE lt_apqi
FROM apqi
WHERE datatyp EQ '%BDC'
AND mandant EQ p_mandt.
IF sy-subrc EQ 0.
SORT lt_apqi BY groupid.
ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'GROUPID'
* PVALKEY = ' '
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_GRPID'
* STEPL = 0
window_title = 'Transaction Recordings'
* VALUE = ' '
value_org = 'S'
* MULTIPLE_CHOICE = ' '
* DISPLAY = ' '
* CALLBACK_PROGRAM = ' '
* CALLBACK_FORM = ' '
* CALLBACK_METHOD =
* MARK_TAB =
* IMPORTING
* USER_RESET =
TABLES
value_tab = lt_apqi
* FIELD_TAB =
* RETURN_TAB =
* DYNPFLD_MAPPING =
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CREATE_FIELD_CAT_LVC
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM create_field_cat_lvc TABLES p_table
USING col_pos
key
fieldname
reptext
datatype
outputlen
convexit
just
nozero
meins
waers
do_sum.
DATA : st_fcat_lvc LIKE lvc_s_fcat.
st_fcat_lvc-col_pos = col_pos.
st_fcat_lvc-key = key.
st_fcat_lvc-fieldname = fieldname.
st_fcat_lvc-reptext = reptext.
st_fcat_lvc-datatype = datatype.
st_fcat_lvc-outputlen = outputlen.
st_fcat_lvc-convexit = convexit.
st_fcat_lvc-just = just.
st_fcat_lvc-no_zero = nozero.
st_fcat_lvc-qfieldname = meins.
st_fcat_lvc-cfieldname = waers.
st_fcat_lvc-do_sum = do_sum.
APPEND st_fcat_lvc TO p_table.
ENDFORM. " CREATE_FIELD_CAT_LVC
FORM display_data.
FIELD-SYMBOLS : <dyn_table> TYPE STANDARD TABLE,
<dyn_wa>,
<dyn_field>.
DATA : dy_table TYPE REF TO data,
dy_line TYPE REF TO data.
DATA : lt_alv_fieldcat TYPE lvc_t_fcat.
DATA : lv_idx TYPE i,
lv_tabix(10) TYPE n,
lv_fname(20) TYPE c.
DATA : lv_field(100) TYPE c.
FIELD-SYMBOLS <lfs> TYPE any.
CLEAR : lt_alv_fieldcat[].
SORT fnam BY order.
PERFORM create_field_cat_lvc TABLES lt_alv_fieldcat USING
0 'X' 'BDC_ROWIDX' 'INDEX' 'INT4' '10' '' 'R' '' '' '' ''.
LOOP AT fnam.
lv_tabix = sy-tabix.
CLEAR ftext.
READ TABLE dynflow WITH KEY fnam = fnam-fnam.
IF sy-subrc EQ 0.
READ TABLE ftext WITH KEY tabix = sy-tabix.
ENDIF.
CONDENSE fnam-fnam NO-GAPS.
IF ftext-fieldtext IS INITIAL.
IF ftext-reptext IS NOT INITIAL.
MOVE ftext-reptext TO ftext-fieldtext.
ELSEIF ftext-scrtext_l IS NOT INITIAL.
MOVE ftext-scrtext_l TO ftext-fieldtext.
ELSEIF ftext-scrtext_m IS NOT INITIAL.
MOVE ftext-scrtext_m TO ftext-fieldtext.
ELSEIF ftext-scrtext_s IS NOT INITIAL.
MOVE ftext-scrtext_s TO ftext-fieldtext.
ELSE.
MOVE fnam-fnam TO ftext-fieldtext.
ENDIF.
ENDIF.
* REPLACE ALL OCCURRENCES OF REGEX '[^[:alnum:]|_|-]' IN fnam-fnam WITH SPACE.
CONCATENATE 'F' lv_tabix INTO lv_fname.
PERFORM create_field_cat_lvc TABLES lt_alv_fieldcat USING
fnam-order '' lv_fname ftext-fieldtext 'CHAR' '50' '' 'L' '' '' '' ''.
ENDLOOP.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = lt_alv_fieldcat
IMPORTING
ep_table = dy_table.
ASSIGN dy_table->* TO <dyn_table>.
CREATE DATA dy_line LIKE LINE OF <dyn_table>.
ASSIGN dy_line->* TO <dyn_wa>.
lv_idx = 0.
CLEAR : start, data, end, fieldname, seq.
LOOP AT indata.
IF indata(1) = '*'. "comment row
CONTINUE.
ENDIF.
*
IF indata(9) = 'STARTDATA'. "data start row
start = 'X'.
data = 'X'.
IF fieldname = space.
ford[] = fnam[].
ENDIF.
CLEAR fieldname.
ENDIF.
*
IF indata(7) = 'ENDDATA'. "data finished row
end = 'X'.
ENDIF.
*
IF indata(9) = 'FIELDNAME'.
fieldname = 'X'.
ENDIF.
*
CHECK data = 'X' OR
fieldname = 'X'.
*
len = strlen( indata ).
CLEAR: n,o,seq,dat.
REFRESH bdc_value.
DO.
IF n => len.
EXIT.
ENDIF.
*
ch = indata+n(1).
IF ch = tab.
seq = seq + 1.
PERFORM move_bdc.
ADD 1 TO n.
CLEAR: o, dat.
ELSE.
dat+o(1) = indata+n(1).
ADD 1 TO: o, n.
ENDIF.
ENDDO.
*
seq = seq + 1.
PERFORM move_bdc.
CLEAR dat.
IF start EQ 'X'.
LOOP AT bdc_value.
READ TABLE ford WITH KEY order = sy-tabix.
IF sy-subrc EQ 0.
lv_tabix = sy-tabix.
CONCATENATE 'F' lv_tabix INTO lv_fname.
* CONDENSE ford-fnam NO-GAPS.
* REPLACE ALL OCCURRENCES OF REGEX '[^[:alnum:]|_|-]' IN ford-fnam WITH SPACE.
CONCATENATE '<DYN_WA>-' lv_fname INTO lv_field.
ASSIGN (lv_field) TO <lfs>.
IF <lfs> IS ASSIGNED.
<lfs> = bdc_value.
UNASSIGN <lfs>.
ENDIF.
ENDIF.
ENDLOOP.
ADD 1 TO lv_idx.
lv_field = '<DYN_WA>-BDC_ROWIDX'.
ASSIGN (lv_field) TO <lfs>.
IF <lfs> IS ASSIGNED.
<lfs> = lv_idx.
UNASSIGN <lfs>.
ENDIF.
APPEND <dyn_wa> TO <dyn_table>. CLEAR <dyn_wa>.
ENDIF.
IF end EQ 'X'.
EXIT.
ENDIF.
ENDLOOP.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = DATA(lr_salv)
CHANGING
t_table = <dyn_table>. "ALV로 출력할 Internal Table
lr_salv->set_screen_status(
pfstatus = 'USER_BUTTONS'
report = 'SAPLFBK_TOOLS' ).
lr_salv->get_display_settings( )->set_striped_pattern( cl_salv_display_settings=>true ). "줄무늬 패턴
lr_salv->get_columns( )->set_optimize( abap_true ). "열 너비 최적화
SORT lt_alv_fieldcat BY fieldname.
DATA(lr_columns) = lr_salv->get_columns( ).
DATA lr_column TYPE REF TO cl_salv_column_table.
LOOP AT lr_columns->get( ) INTO DATA(ls_columns). "열 텍스트를 필드명으로 변경
READ TABLE lt_alv_fieldcat INTO DATA(ls_alv_fieldcat) WITH KEY fieldname = ls_columns-columnname BINARY SEARCH.
IF sy-subrc EQ 0.
lr_column ?= lr_columns->get_column( ls_columns-columnname ).
lr_column->set_short_text( CONV #( ls_alv_fieldcat-reptext ) ).
lr_column->set_medium_text( CONV #( ls_alv_fieldcat-reptext ) ).
lr_column->set_long_text( CONV #( ls_alv_fieldcat-reptext ) ).
lr_column->set_key( CONV #( ls_alv_fieldcat-key ) ).
ENDIF.
ENDLOOP.
"ALV 이벤트
DATA(lr_event_tab) = lr_salv->get_event( ).
DATA lr_events TYPE REF TO lcl_handle_events.
CREATE OBJECT lr_events.
SET HANDLER lr_events->on_user_command FOR lr_event_tab.
lr_salv->display( ). "ALV 출력
IF gv_answer NE 'BUTTON1'.
REFRESH indata.
CLEAR indata_lines.
ENDIF.
ENDFORM.
'ABAP > 소스코드' 카테고리의 다른 글
[Function] ZCM_EXCEL_UPLOAD - 필드 점검 및 변환 엑셀 업로드 (2) | 2023.07.10 |
---|---|
[BTE] PROCESS_00001120 - 회계전표 품목 텍스트 대체 (0) | 2023.07.10 |
[Class] SALV Display - SALV 간단 출력 Class - ZCL_SALV_OUTPUT (0) | 2023.05.27 |
[Class] Progress Indicator 처리용 Common Class (0) | 2023.05.24 |
[Report] Client copy 후 번호범위 자동 조정 프로그램 (1) | 2023.05.24 |
댓글