*&---------------------------------------------------------------------* *&??包括??????????????YR3TABLE2FTP_FORM *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *&??????Form??f_get_data *&---------------------------------------------------------------------* *???????text *----------------------------------------------------------------------* *??-->??p1????????text *??<--??p2????????text *----------------------------------------------------------------------* FORM f_get_data . ??FIELD-SYMBOLS:?<dyn_table>?TYPE?STANDARD?TABLE, ?????????????????<dyn_table_new>?TYPE?STANDARD?TABLE, ?????????????????<dyn_wa>. ??DATA:?dy_table?TYPE?REF?TO?data, ????????dy_line?TYPE?REF?TO?data. ??DATA:?str?TYPE?string. ??DATA:?lv_selflds?TYPE?string. ??IF?p_ymd?=?'YYYYMMDD'. ????IF?p_ymd2?IS?NOT?INITIAL. ??????CONCATENATE?p_fil_px?p_ymd2?INTO?p_fil_px2. ????ELSE. ??????CONCATENATE?p_fil_px?sy-datum?INTO?p_fil_px2. ????ENDIF. ??ELSEIF?p_ymd?=?'YYYYMM'. ????IF?p_ymd2?IS?NOT?INITIAL. ??????CONCATENATE?p_fil_px?p_ymd2+0(6)?INTO?p_fil_px2. ????ELSE. ??????CONCATENATE?p_fil_px?sy-datum+0(6)?INTO?p_fil_px2. ????ENDIF. ??ELSEIF?p_ymd?=?'YYYYMMDDHHMMSS'. ????IF?p_ymd2?IS?NOT?INITIAL. ??????CONCATENATE?p_fil_px?p_ymd2?sy-uzeit?INTO?p_fil_px2. ????ELSE. ??????CONCATENATE?p_fil_px?sy-datum?sy-uzeit?INTO?p_fil_px2. ????ENDIF. ??ELSE. ????p_fil_px2?=?p_fil_px. ??ENDIF. ??CLEAR:?gt_YTEST300,gt_YTEST300[]. ??SELECT?*?FROM?YTEST300?INTO?TABLE?gt_YTEST300?WHERE?username?=?p_varusr?AND?tabname?=?p_table?ORDER?BY?sequence?ASCENDING. ??struct_type??=?cl_abap_typedescr=>describe_by_name(?p_table?). ??comp_tab[]?=?struct_type->get_components(?). ??PERFORM?frm_comp_tab?TABLES?comp_tab. ??IF?gt_YTEST300[]?IS?NOT?INITIAL. ????CLEAR:comp_tab2[]. ????LOOP?AT?gt_YTEST300. ??????READ?TABLE?comp_tab?WITH?KEY?name?=?gt_YTEST300-fldname. ??????MOVE-CORRESPONDING?comp_tab?TO?comp_tab2. ??????APPEND?comp_tab2. ??????CONCATENATE?lv_selflds?`?`?gt_YTEST300-fldname?INTO?lv_selflds. ????ENDLOOP. ????comp_tab[]?=?comp_tab2[]. ????IF?timestmp?=?'X'. ??????comp_tab-name?=?'ZTIMESTAMPL'. ??????comp_tab-type?=?cl_abap_elemdescr=>get_c(?22?). ??????APPEND?comp_tab. ????ENDIF. ????struct_type?=?cl_abap_structdescr=>create(?comp_tab[]?). ??ELSE. ????LOOP?AT?comp_tab. ??????CONCATENATE?lv_selflds?`?`?comp_tab-name?INTO?lv_selflds. ????ENDLOOP. ????IF?timestmp?=?'X'. ??????comp_tab-name?=?'ZTIMESTAMPL'. ??????comp_tab-type?=?cl_abap_elemdescr=>get_c(?22?). ??????APPEND?comp_tab. ??????struct_type?=?cl_abap_structdescr=>create(?comp_tab[]?). ????ENDIF. ??ENDIF. ??table_type?=?cl_abap_tabledescr=>create(?struct_type?). ??CREATE?DATA?dy_table?TYPE?HANDLE?table_type. ??ASSIGN?dy_table->*?TO?<dyn_table>. ??CREATE?DATA?dy_line?LIKE?LINE?OF?<dyn_table>. ??ASSIGN?dy_line->*?TO?<dyn_wa>. ??DATA:?cond?TYPE?string,orderby?TYPE?string. ??CLEAR:cond?. ??IF?p_name1?IS?NOT?INITIAL?AND?s_val1[]?IS?NOT?INITIAL. ????IF?cond?=?''. ??????CONCATENATE??p_name1?`?in?s_val1?`?INTO?cond. ????ELSE. ??????CONCATENATE?cond?`?and?`?p_name1?`?in?s_val1`?INTO?cond. ????ENDIF. ??ENDIF. ??IF?p_name2?IS?NOT?INITIAL?AND?s_val2[]?IS?NOT?INITIAL. ????IF?cond?=?''. ??????CONCATENATE??p_name2?`?in?s_val2?`?INTO?cond. ????ELSE. ??????CONCATENATE?cond?`?and?`?p_name2?`?in?s_val2`?INTO?cond. ????ENDIF. ??ENDIF. ??IF?p_name3?IS?NOT?INITIAL?AND?s_val3[]?IS?NOT?INITIAL. ????IF?cond?=?''. ??????CONCATENATE??p_name3?`?in?s_val3?`?INTO?cond. ????ELSE. ??????CONCATENATE?cond?`?and?`?p_name3?`?in?s_val3`?INTO?cond. ????ENDIF. ??ENDIF. ??IF?p_name4?IS?NOT?INITIAL?AND?s_val4[]?IS?NOT?INITIAL. ????IF?cond?=?''. ??????CONCATENATE??p_name4?`?in?s_val4?`?INTO?cond. ????ELSE. ??????CONCATENATE?cond?`?and?`?p_name4?`?in?s_val4`?INTO?cond. ????ENDIF. ??ENDIF. ??IF?p_name5?IS?NOT?INITIAL?AND?s_val5[]?IS?NOT?INITIAL. ????IF?cond?=?''. ??????CONCATENATE??p_name5?`?in?s_val5?`?INTO?cond. ????ELSE. ??????CONCATENATE?cond?`?and?`?p_name5?`?in?s_val5`?INTO?cond. ????ENDIF. ??ENDIF. ??IF?p_name6?IS?NOT?INITIAL?AND?s_val6[]?IS?NOT?INITIAL. ????IF?cond?=?''. ??????CONCATENATE??p_name6?`?in?s_val6?`?INTO?cond. ????ELSE. ??????CONCATENATE?cond?`?and?`?p_name6?`?in?s_val6`?INTO?cond. ????ENDIF. ??ENDIF. ??IF?p_name7?IS?NOT?INITIAL?AND?s_val7[]?IS?NOT?INITIAL. ????IF?cond?=?''. ??????CONCATENATE??p_name7?`?in?s_val7?`?INTO?cond. ????ELSE. ??????CONCATENATE?cond?`?and?`?p_name7?`?in?s_val7`?INTO?cond. ????ENDIF. ??ENDIF. ??IF?p_name8?IS?NOT?INITIAL?AND?s_val8[]?IS?NOT?INITIAL. ????IF?cond?=?''. ??????CONCATENATE??p_name8?`?in?s_val8?`?INTO?cond. ????ELSE. ??????CONCATENATE?cond?`?and?`?p_name8?`?in?s_val8`?INTO?cond. ????ENDIF. ??ENDIF. ??DATA:?str_len?TYPE?i. ??str_len?=?STRLEN(?ftp_path?). ??str_len?=?str_len?-?1. ??REPLACE?ALL?OCCURRENCES?OF?`\`?IN?ftp_path??WITH?`/`. ??CONDENSE?ftp_path. ??IF?ftp_path+str_len?=?'/'?AND?p_dir_dt?IS?NOT?INITIAL. ????CONCATENATE?ftp_path?p_dir_dt?INTO?ftp_path. ??ELSEIF?p_dir_dt?IS?NOT?INITIAL. ????CONCATENATE?ftp_path?'/'?p_dir_dt?INTO?ftp_path. ??ENDIF. ??IF?ftp_path+str_len?=?'/'?AND?str_len?<>?0. ????ftp_path?=?ftp_path+0(str_len). ??ENDIF. ??FIELD-SYMBOLS:?<fldvalue>,<key_constr>. ??DATA:?key_constr?TYPE?TABLE?OF?string?WITH?HEADER?LINE,l_total?TYPE?string,lins?TYPE?i,lins2?TYPE?i,strtmp?TYPE?string. ??DATA:lt_dd03l?TYPE?TABLE?OF?dd03l?WITH?HEADER?LINE,wa_dd03l?LIKE?lt_dd03l. ??SELECT?tabname?fieldname?keyflag?rollname?position?inttype?leng?decimals?FROM?dd03l?INTO?CORRESPONDING?FIELDS?OF?TABLE?lt_dd03l ??????????WHERE?tabname?=?p_table?AND?keyflag?=?'X'?. ??SORT?lt_dd03l?BY?position. ??LOOP?AT?lt_dd03l. ????CONCATENATE?`?`?orderby?`?`?lt_dd03l-fieldname?INTO?orderby. ??ENDLOOP. ??CONDENSE?orderby. ??DELETE?lt_dd03l?WHERE?fieldname?=?'MANDT'. ??READ?TABLE?lt_dd03l?INTO?wa_dd03l?INDEX?1."第一主鍵字段 ??DATA:?counts?TYPE?i,diff_counts?TYPE?i. ??DO. ????g_count?=?sy-index. ????CONCATENATE?`_`?g_count?INTO?g_count_c. ????CLEAR:key_constr,key_constr[]. ????IF?sy-index?=?1."首次查 ??????IF?cond?IS?INITIAL. ????????IF?wa_dd03l-inttype?=?'C'. ??????????CONCATENATE?wa_dd03l-fieldname?`?>=?''`?INTO?key_constr. ????????ELSE. ??????????CONCATENATE?`(?`?wa_dd03l-fieldname?`?>=?-128?)`INTO?key_constr. ????????ENDIF. ??????ELSE. ????????IF?wa_dd03l-inttype?=?'C'. ??????????CONCATENATE?`(?`?wa_dd03l-fieldname?`?>=?''?)?AND?(?`?cond?`?)`?INTO?key_constr. ????????ELSE. ??????????CONCATENATE?`(?`?wa_dd03l-fieldname?`?>=?-128?)?AND?(?`?cond?`?)`?INTO?key_constr. ????????ENDIF. ??????ENDIF. ??????APPEND?key_constr. ??????CLEAR?key_constr. ????ELSE. ??????IF?<dyn_table>?IS?NOT?INITIAL?."最近一次查到數(shù)據(jù)后 ????????DESCRIBE?TABLE?lt_dd03l?LINES?lins. ????????IF?lins?>?1."如果主鍵字段個(gè)數(shù)大于1 ??????????PERFORM?frm_key_constr?TABLES?<dyn_table>?lt_dd03l?key_constr. ??????????LOOP?AT?key_constr?ASSIGNING?<key_constr>. ????????????IF?cond?IS?NOT?INITIAL. ??????????????CONCATENATE?`(?`?<key_constr>?`?)?AND?(?`?cond?`?)`?INTO?<key_constr>. ????????????ENDIF. ??????????ENDLOOP. ????????ENDIF. ????????CLEAR?<dyn_wa>. ????????DESCRIBE?TABLE?<dyn_table>?LINES?lins. ????????READ?TABLE?<dyn_table>?INTO?<dyn_wa>?INDEX?lins. ????????ASSIGN?COMPONENT?wa_dd03l-fieldname?OF?STRUCTURE?<dyn_wa>?TO?<fldvalue>. ????????"非首次查詢時(shí),無(wú)論怎樣第一主鍵字段大于條件需要 ????????IF?cond?IS?INITIAL. ??????????CONCATENATE?wa_dd03l-fieldname?`?>?'`?<fldvalue>?`'`?INTO?key_constr. ????????ELSE. ??????????CONCATENATE?wa_dd03l-fieldname?`?>?'`?<fldvalue>?`'?AND?(?`?cond?`?)`?INTO?key_constr. ????????ENDIF. ????????APPEND?key_constr. ??????ENDIF. ????ENDIF. ????CONCATENATE??`正在讀取第?`?g_count?`?批數(shù)據(jù)...`?INTO?str. ????CALL?FUNCTION?'SAPGUI_PROGRESS_INDICATOR' ??????EXPORTING ????????percentage?=?20 ????????text???????=?str. ????FREE?<dyn_table>. ????LOOP?AT?key_constr. ??????DESCRIBE?TABLE?<dyn_table>?LINES?lins. ??????diff_counts?=?p_counts?-?lins. ??????IF?diff_counts?<=?0?. ????????EXIT. ??????ENDIF. ??????strtmp?=?key_constr. ??????GET?RUN?TIME?FIELD?tm1. ??????SELECT?(lv_selflds)?APPENDING?CORRESPONDING?FIELDS?OF?TABLE?<dyn_table>?FROM?(p_table)?UP?TO?diff_counts?ROWS?WHERE?(strtmp)?ORDER?BY?(orderby). ??????DESCRIBE?TABLE?<dyn_table>?LINES?lins2. ??????diff_counts?=?lins2?-?lins. ??????IF?psqllog?=?'X'. ????????PERFORM?frm_write_file2?USING?strtmp?diff_counts?sy-tabix. ??????ENDIF. ????ENDLOOP. ????IF?psqllog?=?'X'. ??????PERFORM?frm_write_file3?. ????ENDIF. ????"首次查詢?yōu)榭諘r(shí),需要下傳空文件 ????IF?sy-index?>?1?AND?<dyn_table>?IS?INITIAL. ??????EXIT. ????ENDIF. ????DATA:dy_table_new?TYPE?REF?TO?data. ????IF?p_prog?IS?NOT?INITIAL. ************************************ CALL?FUNCTION?'SAPGUI_PROGRESS_INDICATOR' ????????EXPORTING ??????????percentage?=?20 ??????????text???????=?`輸出字段邏輯擴(kuò)展處理...`. ??????PERFORM?frm_dyn?IN?PROGRAM?(p_prog)?TABLES?<dyn_table>?comp_tab[] ????????????????????????????????s_asist1?s_asist2?s_asist3?s_asist4?s_asist5 ????????????????????????????????USING?dy_table_new?. ??????ASSIGN?dy_table_new->*?TO?<dyn_table_new>. ??????IF?p_fileno?IS?NOT?INITIAL."分文件拋FTP ????????PERFORM?to_ftptab?TABLES?<dyn_table_new>. ??????ELSE."不分文件 ????????IF?g_count?=?1. ??????????PERFORM?to_ftptab?TABLES?<dyn_table_new>. ????????ELSE. ??????????PERFORM?frm_write_file?TABLES?<dyn_table_new>. ????????ENDIF. ??????ENDIF. ??????DESCRIBE?TABLE?<dyn_table_new>?LINES?lins. ************************************ ELSE. ??????IF?p_fileno?IS?NOT?INITIAL. ????????PERFORM?to_ftptab?TABLES?<dyn_table>. ??????ELSE. ????????IF?g_count?=?1. ??????????PERFORM?to_ftptab?TABLES?<dyn_table>. ????????ELSE. ??????????PERFORM?frm_write_file?TABLES?<dyn_table>. ????????ENDIF. ??????ENDIF. ??????DESCRIBE?TABLE?<dyn_table>?LINES?lins. ????ENDIF. ????l_total?=?l_total?+?lins. ????IF?flg_ftp?IS?NOT?INITIAL. ??????EXIT. ????ENDIF. ??ENDDO. ??IF?p_fileno?IS?INITIAL. ????CONCATENATE??`正在將SAP服務(wù)上文件Append到FTP:`?gv_filename?INTO?str. ????CALL?FUNCTION?'SAPGUI_PROGRESS_INDICATOR' ??????EXPORTING ????????percentage?=?20 ????????text???????=?str. ????PERFORM?frm_ftp_append. ????CONCATENATE??`/usr/sap/tmp/`?p_fil_px2?`.`?p_extens?INTO?gv_filename?SEPARATED?BY?``. ????DELETE?DATASET?gv_filename. ??ENDIF. ??CHECK?flg_ftp?IS?INITIAL?AND?pflgfile?=?'X'. ??DATA:?codepage?TYPE?cpcodepage, ?????encoding?TYPE?abap_encoding, ????convout?TYPE?REF?TO?cl_abap_conv_out_ce, ????buffer?TYPE?xstring. ??DATA:?BEGIN?OF?dest_xtab?OCCURS?0, ????????x(6144)?TYPE?x, ??????END?OF?dest_xtab. ??CALL?FUNCTION?'SCP_CODEPAGE_BY_EXTERNAL_NAME' ????EXPORTING ??????external_name?=?p_encodi ????IMPORTING ??????sap_codepage??=?codepage. ??encoding?=?codepage. ??CALL?METHOD?cl_abap_conv_out_ce=>create ????EXPORTING ??????encoding?=?encoding ????RECEIVING ??????conv?????=?convout. *??CONCATENATE?`數(shù)據(jù)總條數(shù):`?l_total?INTO?l_total. CONDENSE?l_total. ??CALL?METHOD?convout->write ????EXPORTING ??????data?=?l_total. ??CALL?METHOD?convout->get_buffer ????RECEIVING ??????buffer?=?buffer. ??DATA:?lv_binary_len?TYPE?i. ??CALL?FUNCTION?'SCMS_XSTRING_TO_BINARY' ????EXPORTING ??????buffer????????=?buffer ????IMPORTING ??????output_length?=?lv_binary_len ????TABLES ??????binary_tab????=?dest_xtab. ??PERFORM?f_ftp_connect. ??PERFORM?frm_cd_dir. ??CONCATENATE?p_fil_px2?`.`?p_flgex?INTO?gv_filename. ??CONDENSE?gv_filename. ??CALL?FUNCTION?'FTP_R3_TO_SERVER' ????EXPORTING ??????handle????????=?thandle ??????fname?????????=?gv_filename ??????blob_length???=?lv_binary_len ????TABLES ??????blob??????????=?dest_xtab ????EXCEPTIONS ??????tcpip_error???=?1 ??????command_error?=?2 ??????data_error????=?3 ??????OTHERS????????=?4. ??IF?sy-subrc?EQ?0. ????WRITE:/?gv_filename,'傳輸成功!'. ??ELSE. ????WRITE:/?gv_filename,'數(shù)據(jù)文件傳輸失敗!'. ??ENDIF. ??PERFORM?f_ftp_disconnect. ENDFORM. " f_get_data *&---------------------------------------------------------------------* *&??????Form??to_ftptab *&---------------------------------------------------------------------* *???????text *----------------------------------------------------------------------* *??????-->P_SRC_TAB????text *??????-->P_DEST_XTAB??text *??????-->OF???????????text *??????-->X????????????text *----------------------------------------------------------------------* FORM to_ftptab TABLES p_src_tab. ??DATA:?BEGIN?OF?dest_xtab?OCCURS?0, ????????x(6144)?TYPE?x, ??????END?OF?dest_xtab. ??DATA:?lv_binary_len?TYPE?i. ??DATA:str?TYPE?string. ??IF?p_fileno?IS?NOT?INITIAL. ????CONCATENATE??p_fil_px2?g_count_c?`.`?p_extens?INTO?gv_filename?SEPARATED?BY?``. ??ELSE. ????CONCATENATE??p_fil_px2?`.`?p_extens?INTO?gv_filename?SEPARATED?BY?``. ??ENDIF. ??CONCATENATE??`正在準(zhǔn)備文件:`?gv_filename?INTO?str. ??CALL?FUNCTION?'SAPGUI_PROGRESS_INDICATOR' ????EXPORTING ??????percentage?=?20 ??????text???????=?str. ??PERFORM?frm_data_to_binary?TABLES?p_src_tab?dest_xtab?USING?lv_binary_len?'X'. ??CONCATENATE??`正在上傳文件:`?gv_filename?INTO?str. ??CALL?FUNCTION?'SAPGUI_PROGRESS_INDICATOR' ????EXPORTING ??????percentage?=?20 ??????text???????=?str. ??PERFORM?f_ftp_connect. ??PERFORM?frm_mkdir. ??PERFORM?frm_cd_dir. ??PERFORM?f_ftp?TABLES?dest_xtab?USING?lv_binary_len. ??PERFORM?f_ftp_disconnect. ??CLEAR:dest_xtab. ??REFRESH:dest_xtab[]. ENDFORM. "to_ftptab *&---------------------------------------------------------------------* *&??????Form??to_ftptab2 *&---------------------------------------------------------------------* *???????text *----------------------------------------------------------------------* *??????-->P_SRC_TAB??text *----------------------------------------------------------------------* FORM frm_data_to_binary TABLES p_src_tab dest_xtab USING lv_binary_len TYPE i first. ??DATA:strct_type_ref?TYPE?REF?TO?cl_abap_structdescr, ???????tab_type_ref?TYPE?REF?TO?cl_abap_tabledescr, ???????t_component?TYPE?cl_abap_structdescr=>component_table, ???????wa_component?LIKE?LINE?OF?t_component. ??FIELD-SYMBOLS:?<fldvalue>. ??DATA:time_stamp?TYPE?timestampl,timestamp_c(22). ??DATA:?l_str?TYPE?string,fldstr?TYPE?string,fldtype,firsttime?VALUE?'X'. ??DATA:?str?TYPE?string. ??DATA:?len?TYPE?string. ??DATA:?codepage?TYPE?cpcodepage, ?????encoding?TYPE?abap_encoding, ????convout?TYPE?REF?TO?cl_abap_conv_out_ce, ????buffer?TYPE?xstring. ??CALL?FUNCTION?'SCP_CODEPAGE_BY_EXTERNAL_NAME' ????EXPORTING ??????external_name?=?p_encodi ????IMPORTING ??????sap_codepage??=?codepage. ??encoding?=?codepage. ??CALL?METHOD?cl_abap_conv_out_ce=>create ????EXPORTING ??????encoding?=?encoding ????RECEIVING ??????conv?????=?convout. ??tab_type_ref??=?cl_abap_tabledescr=>describe_by_data(?p_src_tab[]?). ??strct_type_ref??=?tab_type_ref->get_table_line_type(?). ??t_component?=?strct_type_ref->get_components(?). ??str?=?p_split. ??REPLACE?ALL?OCCURRENCES?OF?`\t`?IN?str??WITH?c_tab. ??REPLACE?ALL?OCCURRENCES?OF?`\T`?IN?str??WITH?c_tab. ??REPLACE?ALL?OCCURRENCES?OF?`?`?IN?str??WITH?``. ??IF?p_header?=?'X'?AND?first?IS?NOT?INITIAL. ????PERFORM?frm_find_table?USING?'X'. ????CLEAR:fldstr,l_str. ????LOOP?AT?t_component?INTO?wa_component. ??????READ?TABLE?gt_dd03l?WITH?KEY?fieldname?=?wa_component-name. ??????IF?sy-subrc?=?0. ????????len?=?gt_dd03l-leng?+?gt_dd03l-decimals. ????????CONDENSE?len. ????????READ?TABLE?gt_vrm_values?WITH?KEY?key?=?wa_component-name. ????????IF?sy-subrc?=?0. ??????????REPLACE?ALL?OCCURRENCES?OF?str?IN?gt_vrm_values-text??WITH?`?`. ??????????IF?fldstr?=?''. ????????????IF?p_hdtlg?IS?NOT?INITIAL. ??????????????CONCATENATE?gt_vrm_values-text?`(`?len?`)`?INTO?fldstr. ????????????ELSE. ??????????????CLEAR:?itab,itab[]. ??????????????SPLIT?gt_vrm_values-text?AT?`:`?INTO?TABLE?itab. ??????????????READ?TABLE?itab?INDEX?2. ??????????????fldstr?=?itab?. ????????????ENDIF. ??????????ELSE. ????????????IF?p_hdtlg?IS?NOT?INITIAL. ??????????????CONCATENATE?fldstr?str?gt_vrm_values-text?`(`?len?`)`?INTO?fldstr. ????????????ELSE. ??????????????CLEAR:?itab,itab[]. ??????????????SPLIT?gt_vrm_values-text?AT?`:`?INTO?TABLE?itab. ??????????????READ?TABLE?itab?INDEX?2. ??????????????CONCATENATE?fldstr?str?itab?INTO?fldstr. ????????????ENDIF. ??????????ENDIF. ????????ELSE. ??????????IF?fldstr?=?''. ????????????IF?p_hdtlg?IS?NOT?INITIAL. ??????????????CONCATENATE?gt_dd03l-fieldname?`(`?len?`)`?INTO?fldstr. ????????????ELSE. ??????????????fldstr?=?gt_dd03l-fieldname. ????????????ENDIF. ??????????ELSE. ????????????IF?p_hdtlg?IS?NOT?INITIAL. ??????????????CONCATENATE?fldstr?str?gt_dd03l-fieldname?`(`?len?`)`?INTO?fldstr. ????????????ELSE. ??????????????CONCATENATE?fldstr?str?gt_dd03l-fieldname?INTO?fldstr. ????????????ENDIF. ??????????ENDIF. ????????ENDIF. ??????ELSE. ????????elem_type??=?wa_component-type. ????????len?=?elem_type->length?+?elem_type->decimals. ????????CONDENSE?len. ????????IF?fldstr?=?''. ??????????IF?p_hdtlg?IS?NOT?INITIAL. ????????????CONCATENATE?wa_component-name?`(`?len?`)`?INTO?fldstr. ??????????ELSE. ????????????fldstr?=?wa_component-name. ??????????ENDIF. ????????ELSE. ??????????IF?p_hdtlg?IS?NOT?INITIAL. ????????????CONCATENATE?fldstr?str?wa_component-name?`(`?len?`)`?INTO?fldstr. ??????????ELSE. ????????????CONCATENATE?fldstr?str?wa_component-name?INTO?fldstr. ??????????ENDIF. ????????ENDIF. ??????ENDIF. ????ENDLOOP. ????CALL?METHOD?convout->write ??????EXPORTING ????????data?=?fldstr. ????CALL?METHOD?convout->write ??????EXPORTING ????????data?=?cl_abap_char_utilities=>cr_lf. ??ENDIF. ??GET?TIME?STAMP?FIELD?time_stamp. ??timestamp_c?=?time_stamp. ??LOOP?AT?p_src_tab. ????firsttime?=?'X'. ????CLEAR:fldstr,l_str. ????LOOP?AT?t_component?INTO?wa_component. ??????IF?wa_component-name?=?'ZTIMESTAMPL'. ????????IF?firsttime?=?'X'. ??????????fldstr?=?time_stamp. ??????????CLEAR?firsttime. ????????ELSE. ??????????CONCATENATE?fldstr?timestamp_c?INTO?fldstr?SEPARATED?BY?str. ????????ENDIF. ????????CONTINUE. ??????ENDIF. ??????fldtype?=?wa_component-type->type_kind. ??????ASSIGN?COMPONENT?wa_component-name?OF?STRUCTURE?p_src_tab?TO?<fldvalue>. ??????l_str?=?<fldvalue>. ??????IF?fldtype?=?'P'?OR?fldtype?=?'F' ????????OR?fldtype?=?'I'?OR?fldtype?=?'b' ????????OR?fldtype?=?'s'. ????????CALL?FUNCTION?'CLOI_PUT_SIGN_IN_FRONT' ??????????CHANGING ????????????value?=?l_str. ??????ENDIF. ??????REPLACE?ALL?OCCURRENCES?OF?str?IN?l_str??WITH?`?`. ??????IF?firsttime?=?'X'. ????????fldstr?=?l_str?. ????????CLEAR?firsttime. ??????ELSE. ????????CONCATENATE?fldstr?l_str?INTO?fldstr?SEPARATED?BY?str. ??????ENDIF. ????ENDLOOP. ????CONDENSE?fldstr. ????CALL?METHOD?convout->write ??????EXPORTING ????????data?=?fldstr. ????CALL?METHOD?convout->write ??????EXPORTING ????????data?=?cl_abap_char_utilities=>cr_lf. ??ENDLOOP. ??CALL?METHOD?convout->get_buffer ????RECEIVING ??????buffer?=?buffer. ??CALL?FUNCTION?'SCMS_XSTRING_TO_BINARY' ????EXPORTING ??????buffer????????=?buffer ????IMPORTING ??????output_length?=?lv_binary_len ????TABLES ??????binary_tab????=?dest_xtab. ENDFORM. "frm_data_to_binary *&---------------------------------------------------------------------* *&??????Form??f_ftp_connect *&---------------------------------------------------------------------* *???????text *----------------------------------------------------------------------* FORM f_ftp_connect . ??DATA:?thosts(45),tusers(45),tpword(45). ??thosts?=?p_host. ??tusers?=?p_user. ??tpword?=?p_pwd. ??slen?=?STRLEN(?tpword?). ***對(duì)密碼值進(jìn)行加密解析處理 CALL?FUNCTION?'HTTP_SCRAMBLE' ????EXPORTING ??????SOURCE??????=?tpword ??????sourcelen???=?slen ??????key?????????=?key ????IMPORTING ??????destination?=?tpword. ***定義RFC連接目標(biāo),前后臺(tái)執(zhí)行時(shí)不同 *??IF?sy-batch?=?'X'. trfcdest?=?'SAPFTPA'. *??ELSE. *????trfcdest?=?'SAPFTP'. *??ENDIF. ***該函數(shù)可以定義有網(wǎng)關(guān)是賬戶密碼,一般公司內(nèi)部訪問(wèn)無(wú)此設(shè)置 CALL?FUNCTION?'FTP_CONNECT' ????EXPORTING ??????user????????????=?tusers ??????password????????=?tpword ??????host????????????=?thosts ??????rfc_destination?=?trfcdest ????IMPORTING ??????handle??????????=?thandle ????EXCEPTIONS ??????not_connected???=?1 ??????OTHERS??????????=?2. ??IF?sy-subrc?NE?0. ????WRITE:/?'FTP連接失敗!'. ????STOP. ??ENDIF. ENDFORM. " f_ftp_connect *&---------------------------------------------------------------------* *&??????Form??frm_mkdir *&---------------------------------------------------------------------* *???????text *----------------------------------------------------------------------* *??-->??p1????????text *??<--??p2????????text *----------------------------------------------------------------------* FORM frm_mkdir . ??DATA:?dirstr?TYPE?string. ??CLEAR:com,com[],res,res[]. ??CLEAR:?itab,?itab[]. ??SPLIT?ftp_path?AT?`/`?INTO?TABLE?itab?. ??DELETE?itab?WHERE?table_line?=?''. ??LOOP?AT?itab?. ????IF?sy-tabix?=?1. ??????CONCATENATE?`/`?itab?INTO?dirstr?SEPARATED?BY?``. ????ELSE. ??????CONCATENATE?dirstr?`/`?itab?INTO?dirstr?SEPARATED?BY?``. ????ENDIF. ????CONCATENATE?`mkdir?`?dirstr?INTO?com-cmd?SEPARATED?BY?``. ????APPEND?com. ??ENDLOOP. ??LOOP?AT?com. ????CALL?FUNCTION?'FTP_COMMAND' ??????EXPORTING ????????handle????????=?thandle ????????command???????=?com-cmd ??????TABLES ????????data??????????=?res ??????EXCEPTIONS ????????tcpip_error???=?1 ????????command_error?=?2 ????????data_error????=?3 ????????OTHERS????????=?4. ??ENDLOOP. ENDFORM. " frm_mkdir *&---------------------------------------------------------------------* *&??????Form??frm_cd_dir *&---------------------------------------------------------------------* *???????text *----------------------------------------------------------------------* *??-->??p1????????text *??<--??p2????????text *----------------------------------------------------------------------* FORM frm_cd_dir . ??CLEAR:com,com[],res,res[]. ??CONCATENATE?'cd'?ftp_path?INTO?com-cmd?SEPARATED?BY?''. ??CALL?FUNCTION?'FTP_COMMAND' ????EXPORTING ??????handle????????=?thandle ??????command???????=?com-cmd ????TABLES ??????data??????????=?res ????EXCEPTIONS ??????tcpip_error???=?1 ??????command_error?=?2 ??????data_error????=?3 ??????OTHERS????????=?4. ENDFORM. " frm_cd_dir *&---------------------------------------------------------------------* *&??????Form??f_ftp_disconnect *&---------------------------------------------------------------------* *???????text *----------------------------------------------------------------------* *??-->??p1????????text *??<--??p2????????text *----------------------------------------------------------------------* FORM f_ftp_disconnect . ??CALL?FUNCTION?'FTP_DISCONNECT' ????EXPORTING ??????handle?=?thandle. ENDFORM. " f_ftp_disconnect *&---------------------------------------------------------------------* *&??????Form??f_ftp *&---------------------------------------------------------------------* *???????text *----------------------------------------------------------------------* *??-->??p1????????text *??<--??p2????????text *----------------------------------------------------------------------* FORM f_ftp TABLES p_ftptab USING lv_binary_len. ??CONDENSE?gv_filename. *??DATA:str?TYPE?string. *??CONCATENATE??`正在上傳文件:`?gv_filename?INTO?str. *??CALL?FUNCTION?'SAPGUI_PROGRESS_INDICATOR' *????EXPORTING *??????percentage?=?20 *??????text???????=?str. CALL?FUNCTION?'FTP_R3_TO_SERVER' ????EXPORTING ??????handle????????=?thandle ??????fname?????????=?gv_filename ??????blob_length???=?lv_binary_len ????TABLES ??????blob??????????=?p_ftptab ????EXCEPTIONS ??????tcpip_error???=?1 ??????command_error?=?2 ??????data_error????=?3 ??????OTHERS????????=?4. ??IF?sy-subrc?EQ?0. ????WRITE:/?gv_filename,'傳輸成功!'. ??ELSE. ????WRITE:/?gv_filename,'數(shù)據(jù)文件傳輸失敗!'. ????flg_ftp?=?'X'. ??ENDIF. ENDFORM. " f_ftp *&---------------------------------------------------------------------* *&??????Module??STATUS_1001??OUTPUT *&---------------------------------------------------------------------* *???????text *----------------------------------------------------------------------* MODULE status_1001 OUTPUT. ??SET?PF-STATUS?'ST_1001'. ??SET?TITLEBAR?'1001'. ??CLEAR:?texttable[],line,gt_YTEST300,gt_YTEST300[]. ??CLEAR:gt_vrm_values,gt_vrm_values[],gt_vrm_values_dt,gt_vrm_values_dt[],gt_dd03l,gt_dd03l[],rtables,rtables[]. ??PERFORM?frm_val?TABLES?gt_vrm_values?rtables?gt_vrm_values_dt?gt_dd03l?USING?'X'. ??SELECT?*?FROM?YTEST300?INTO?TABLE?gt_YTEST300?WHERE?username?=?p_varusr?AND?tabname?=?p_table?ORDER?BY?sequence?ASCENDING. ??IF?sy-subrc?=?0. ????LOOP?AT?gt_YTEST300. ??????READ?TABLE?gt_vrm_values?WITH?KEY?key?=?gt_YTEST300-fldname. ??????CLEAR:itab[]. ??????SPLIT?gt_vrm_values-text?AT?`:`?INTO?itab?c1?. ??????CONCATENATE?line?c_crlf?gt_YTEST300-fldname?`:`?c1?INTO?line?SEPARATED?BY?``. ????ENDLOOP. ??ELSE. ????LOOP?AT?gt_vrm_values. ??????CLEAR:itab[]. ??????SPLIT?gt_vrm_values-text?AT?`:`?INTO?itab?c1?. ??????CONCATENATE?line?c_crlf?gt_vrm_values-key?`:`?c1?INTO?line?SEPARATED?BY?``. ????ENDLOOP. ??ENDIF. ??line?=?line+2. ??APPEND?line?TO?texttable. ??IF?editor_container?IS?NOT?BOUND. ????CREATE?OBJECT?editor_container ??????????EXPORTING ????????????container_name?=??'EDITOR'. ????CREATE?OBJECT?editor ????????EXPORTING ??????????parent?=?editor_container ??????????wordwrap_mode?=?1 ??????????max_number_chars?=?10000. ??ENDIF. ??editor->set_textstream(?line?). ENDMODULE. " STATUS_1001 OUTPUT *&---------------------------------------------------------------------* *&??????Module??USER_COMMAND_1001??INPUT *&---------------------------------------------------------------------* *???????text *----------------------------------------------------------------------* MODULE user_command_1001 INPUT. ??CASE?sy-ucomm. ????WHEN?'RW'. ??????LEAVE?TO?SCREEN?0. ????WHEN?'SAVE'. ??????CALL?METHOD?editor->get_text_as_stream ????????IMPORTING ??????????text?=?texttable[]. ??????CLEAR:?line. ??????LOOP?AT?texttable. ????????CONCATENATE?line?texttable-line?INTO?line?SEPARATED?BY?``. ??????ENDLOOP. ??????IF?sy-subrc?<>?0. ????????MESSAGE?`請(qǐng)輸入內(nèi)容`?TYPE?'E'. ??????ELSE. ????????CLEAR:itab[]. ????????SPLIT?line?AT?c_crlf?INTO?TABLE?itab?. ????????IF?itab[]?IS?INITIAL. ??????????MESSAGE?`請(qǐng)輸入內(nèi)容`?TYPE?'E'. ????????ELSE. ??????????CLEAR:itab2[]. ??????????LOOP?AT?itab?. ????????????SPLIT?itab?AT?`:`?INTO?itab?c1. ????????????CONDENSE?itab. ????????????TRANSLATE?itab?TO?UPPER?CASE. ????????????APPEND?itab?TO?itab2. ??????????ENDLOOP. ??????????LOOP?AT?itab?. ????????????g_tabix?=?sy-tabix. ????????????SPLIT?itab?AT?`:`?INTO?itab?c1. ????????????CONDENSE?itab. ????????????TRANSLATE?itab?TO?UPPER?CASE. ????????????IF?itab?<>?''. ??????????????CLEAR?repeat. ??????????????LOOP?AT?itab2?WHERE?table_line?=??itab. ????????????????repeat?=?repeat?+?1. ??????????????ENDLOOP. ??????????????IF?repeat?>?1. ????????????????CONCATENATE?itab?`?重復(fù)輸入`?INTO?c1. ????????????????MESSAGE?c1?TYPE?'E'. ????????????????EXIT. ??????????????ENDIF. ??????????????MODIFY?itab?INDEX?g_tabix. ????????????ELSE. ??????????????DELETE?itab?INDEX?g_tabix. ????????????ENDIF. ??????????ENDLOOP. ??????????IF?itab[]?IS?INITIAL. ????????????MESSAGE?`請(qǐng)輸入內(nèi)容`?TYPE?'E'. ??????????ELSE. ????????????CLEAR:gt_YTEST300[],gt_YTEST300. ????????????LOOP?AT?itab. ??????????????gt_YTEST300-sequence?=?sy-tabix. ??????????????READ?TABLE?gt_vrm_values?WITH?KEY?key?=?itab. ??????????????IF?sy-subrc?<>?0. ????????????????CONCATENATE?itab?`?字段不存在`?INTO?c1. ????????????????CLEAR:gt_YTEST300[],gt_YTEST300. ????????????????MESSAGE?c1?TYPE?'E'. ??????????????ENDIF. ??????????????gt_YTEST300-username?=?p_varusr. ??????????????gt_YTEST300-tabname?=?p_table. ??????????????gt_YTEST300-fldname?=?itab. ??????????????APPEND?gt_YTEST300. ????????????ENDLOOP. ????????????DATA:lt_dd03l?TYPE?TABLE?OF?dd03l?WITH?HEADER?LINE,msg?TYPE?string. ????????????CLEAR:msg,lt_dd03l,lt_dd03l[]. ????????????SELECT?tabname?fieldname?keyflag?rollname?position?inttype?leng?decimals?FROM?dd03l?INTO?CORRESPONDING?FIELDS?OF?TABLE?lt_dd03l ????????????????????WHERE?tabname?=?p_table?AND?keyflag?=?'X'. ????????????LOOP?AT?lt_dd03l. ??????????????READ?TABLE?gt_YTEST300?WITH?KEY?fldname?=?lt_dd03l-fieldname. ??????????????IF?sy-subrc?<>?0. ????????????????CONCATENATE?lt_dd03l-fieldname?`為主鍵,不能刪除`?INTO?msg. ????????????????MESSAGE?msg?TYPE?'E'. ??????????????ENDIF. ????????????ENDLOOP. ????????????DELETE?FROM?YTEST300?WHERE?username?=?p_varusr?AND?tabname?=?p_table. ????????????MODIFY?YTEST300?FROM?TABLE?gt_YTEST300. ????????????COMMIT?WORK. ????????????MESSAGE?'保存成功'?TYPE?'I'. ??????????ENDIF. ????????ENDIF. ??????ENDIF. ????WHEN?'RE_LOAD'. ??????DATA:?l_answer. ??????CALL?FUNCTION?'POPUP_TO_CONFIRM' ????????EXPORTING ??????????text_question?????????=?'重置會(huì)將當(dāng)前配置從YTEST300中刪除,是否繼續(xù)?' ??????????icon_button_1?????????=?'是' ??????????icon_button_2?????????=?'否' ??????????default_button????????=?'2' ??????????display_cancel_button?=?'' ????????IMPORTING ??????????answer????????????????=?l_answer ????????EXCEPTIONS ??????????text_not_found????????=?1 ??????????OTHERS????????????????=?2. ??????IF?l_answer?=?'1'. ????????DELETE?FROM?YTEST300?WHERE?username?=?p_varusr?AND?tabname?=?p_table. ??????ENDIF. ??ENDCASE. ENDMODULE. " USER_COMMAND_1001 INPUT *&---------------------------------------------------------------------* *&??????Form??frm_val *&---------------------------------------------------------------------* *???????text *----------------------------------------------------------------------* FORM frm_val TABLES lt_vrm_values TYPE vrm_values rtables STRUCTURE range_c35 lt_vrm_values_dt TYPE vrm_values lt_dd03l STRUCTURE dd03l USING mandt. ??DATA:lt_dd03t?TYPE?TABLE?OF?dd03t?WITH?HEADER?LINE, ???????lt_dd04t?TYPE?TABLE?OF?dd04t?WITH?HEADER?LINE. ??DATA:ls_vrm_values??LIKE?LINE?OF?lt_vrm_values. ??DATA:BEGIN?OF??fieldname?OCCURS?0, ????fieldname?TYPE?dd03t-fieldname?, ????END?OF?fieldname. ??DATA:BEGIN?OF?rollname?OCCURS?0, ????rollname?TYPE?dd04t-rollname?, ????END?OF?rollname. ??IF?rtables[]?IS?INITIAL. ????rtables-sign?=?'I'. ????rtables-option?=?'EQ'. ????rtables-low?=?p_table. ????APPEND?rtables. ??ENDIF. ??IF?mandt?IS?NOT?INITIAL. ????SELECT?tabname?fieldname?keyflag?rollname?position?inttype?leng?decimals?FROM?dd03l?INTO?CORRESPONDING?FIELDS?OF?TABLE?lt_dd03l ????????????WHERE?tabname?IN?rtables?AND?fieldname?<>?'.INCLU--AP'?AND?fieldname?<>?'.INCLUDE'. ??ELSE. ????SELECT?tabname?fieldname?keyflag?rollname?position?inttype?leng?decimals?FROM?dd03l?INTO?CORRESPONDING?FIELDS?OF?TABLE?lt_dd03l ????????????WHERE?tabname?IN?rtables?AND?fieldname?<>?'MANDT'?AND?fieldname?<>?'.INCLU--AP'?AND?fieldname?<>?'.INCLUDE'. ??ENDIF. ??SORT?lt_dd03l?BY?position. ??LOOP?AT?lt_dd03l?. ????IF?lt_dd03l-rollname?=?''. ??????APPEND?lt_dd03l-fieldname?TO?fieldname. ????ELSE. ??????APPEND?lt_dd03l-rollname?TO?rollname. ????ENDIF. ??ENDLOOP. ??IF?fieldname[]?IS?NOT?INITIAL. ????SELECT?fieldname?ddtext?INTO?CORRESPONDING?FIELDS?OF?TABLE?lt_dd03t ???????????????FROM?dd03t ???????????????FOR?ALL?ENTRIES?IN?fieldname ???????????????WHERE?tabname?=?p_table ?????????????????AND?ddlanguage?=?'1' ?????????????????AND?fieldname?=?fieldname-fieldname. ??ENDIF. ??IF?rollname[]?IS?NOT?INITIAL. ????SELECT?rollname?ddtext?INTO?CORRESPONDING?FIELDS?OF?TABLE?lt_dd04t ???????????????FROM?dd04t ???????????????FOR?ALL?ENTRIES?IN?rollname ???????????????WHERE?ddlanguage?=?'1' ?????????????????AND?rollname?=?rollname-rollname. ??ENDIF. ??REFRESH?lt_vrm_values. ??LOOP?AT?lt_dd03l. ????ls_vrm_values-key?=?lt_dd03l-fieldname. ????IF?lt_dd03l-rollname?=?''. ??????READ?TABLE?lt_dd03t?WITH?KEY?fieldname?=?lt_dd03l-fieldname. ??????IF?sy-subrc?=?0. ????????CONCATENATE?lt_dd03l-fieldname?`:`?lt_dd03t-ddtext?INTO?ls_vrm_values-text?SEPARATED?BY??``. ??????ENDIF. ????ELSE. ??????READ?TABLE?lt_dd04t?WITH?KEY?rollname?=?lt_dd03l-rollname. ??????IF?sy-subrc?=?0. ????????CONCATENATE?lt_dd03l-fieldname?`:`?lt_dd04t-ddtext?INTO?ls_vrm_values-text?SEPARATED?BY??``. ??????ENDIF. ????ENDIF. ????IF?lt_dd03l-inttype?=?'D'. ??????APPEND?ls_vrm_values?TO?lt_vrm_values_dt. ????ENDIF. ????APPEND?ls_vrm_values?TO?lt_vrm_values. ??ENDLOOP. ENDFORM. "frm_val *&---------------------------------------------------------------------* *&??????Module??STATUS_1002??OUTPUT *&---------------------------------------------------------------------* *???????text *----------------------------------------------------------------------* MODULE status_1002 OUTPUT. ??SET?PF-STATUS?'ST_1002'. ??SET?TITLEBAR?'1002'. ??CLEAR:?texttable[],line,gt_YTEST300,gt_YTEST300[]. ??CLEAR:gt_vrm_values,gt_vrm_values[],gt_vrm_values_dt,gt_vrm_values_dt[],gt_dd03l,gt_dd03l[],rtables,rtables[]. ??PERFORM?frm_val?TABLES?gt_vrm_values?rtables?gt_vrm_values_dt?gt_dd03l?USING?'X'. ??CONCATENATE?`CREATE?TABLE?IF?NOT?EXISTS?SAP_R3_`?p_table?`(`?INTO?line. ??SELECT?*?FROM?YTEST300?INTO?TABLE?gt_YTEST300?WHERE?username?=?p_varusr?AND?tabname?=?p_table?ORDER?BY?sequence?ASCENDING. ??IF?sy-subrc?=?0. ????LOOP?AT?gt_YTEST300. ??????READ?TABLE?gt_vrm_values?WITH?KEY?key?=?gt_YTEST300-fldname. ??????CLEAR:itab[]. ??????SPLIT?gt_vrm_values-text?AT?`:`?INTO?itab?c1?. ??????REPLACE?ALL?OCCURRENCES?OF?`'`?IN?c1??WITH?``. ??????REPLACE?ALL?OCCURRENCES?OF?`,`?IN?c1??WITH?``. ??????CONCATENATE?line?c_crlf?gt_YTEST300-fldname?`?STRING?COMMENT?'`?c1?`',`?INTO?line?SEPARATED?BY?``. ????ENDLOOP. ??ELSE. ????LOOP?AT?gt_vrm_values. ??????CLEAR:itab[]. ??????SPLIT?gt_vrm_values-text?AT?`:`?INTO?itab?c1?. ??????REPLACE?ALL?OCCURRENCES?OF?`'`?IN?c1??WITH?``. ??????REPLACE?ALL?OCCURRENCES?OF?`,`?IN?c1??WITH?``. ??????CONCATENATE?line?c_crlf?gt_vrm_values-key?`?STRING?COMMENT?'`?c1?`',`?INTO?line?SEPARATED?BY?``. ????ENDLOOP. ??ENDIF. ??DATA:?str_len?TYPE?i. ??str_len?=?STRLEN(?line?). ??str_len?=?str_len?-?1. ??line?=?line+0(str_len). ??CONCATENATE?line?c_crlf?`);`?INTO?line. ??APPEND?line?TO?texttable. ??IF?editor_container2?IS?NOT?BOUND. ????CREATE?OBJECT?editor_container2 ??????????EXPORTING ????????????container_name?=??'EDITOR2'. ????CREATE?OBJECT?editor2 ????????EXPORTING ??????????parent?=?editor_container2 ??????????wordwrap_mode?=?1 ??????????max_number_chars?=?12000. ??ENDIF. ??editor2->set_textstream(?line?). ENDMODULE. " STATUS_1002 OUTPUT *&---------------------------------------------------------------------* *&??????Module??user_command_1002??INPUT *&---------------------------------------------------------------------* *???????text *----------------------------------------------------------------------* MODULE user_command_1002 INPUT. ??CASE?sy-ucomm. ????WHEN?'RW'. ??????LEAVE?TO?SCREEN?0. ??ENDCASE. ENDMODULE. " user_command_1002 INPUT *&---------------------------------------------------------------------* *&??????Module??STATUS_1003??OUTPUT *&---------------------------------------------------------------------* *???????text *----------------------------------------------------------------------* MODULE status_1003 OUTPUT. ??SET?PF-STATUS?'ST_1003'. ??SET?TITLEBAR?'1003'. ??DATA:?code?TYPE?TABLE?OF?string?WITH?HEADER?LINE. ??CLEAR:?line,gt_YTEST300,gt_YTEST300[]. ??IF?editor_container3?IS?NOT?BOUND. ????CREATE?OBJECT?editor_container3 ??????????EXPORTING ????????????container_name?=??'EDITOR3'. ????CREATE?OBJECT?editor3 ????????EXPORTING ??????????parent?=?editor_container3 ??????????wordwrap_mode?=?1 ??????????max_number_chars?=?600000. ??ENDIF. ??READ?REPORT?'YTEMPLET'?INTO?code. ??LOOP?AT?code. ????IF?line?=?''. ??????line?=?code. ????ELSE. ??????CONCATENATE??line?cl_abap_char_utilities=>cr_lf?code?INTO?line. ????ENDIF. ??ENDLOOP. ??editor3->set_textstream(?line?). ENDMODULE. " STATUS_1003 OUTPUT *&---------------------------------------------------------------------* *&??????Form??frm_key_constr *&---------------------------------------------------------------------* *???????text *----------------------------------------------------------------------* *??????-->P_SRC_TAB?????text *??????-->LT_DD03L??????text *??????-->P_KEY_CONSTR??text *??????-->P_ORDERBY?????text *----------------------------------------------------------------------* FORM frm_key_constr TABLES p_src_tab pt_dd03l STRUCTURE dd03l key_constr. ??DATA:lin?TYPE?i. ??DATA:?counts?TYPE?i. ??FIELD-SYMBOLS:?<fldvalue>. ??DATA:?wa_dd03l?LIKE?lt_dd03l. ??DATA:?p_key_constr?TYPE?string. ??DATA:?lt_dd03l?TYPE?TABLE?OF?dd03l?WITH?HEADER?LINE. ??lt_dd03l[]?=?pt_dd03l[]. ??READ?TABLE?lt_dd03l?INTO?wa_dd03l?INDEX?1. ??DELETE?lt_dd03l?INDEX?1. ??DESCRIBE?TABLE?lt_dd03l?LINES?counts. ??DESCRIBE?TABLE?p_src_tab?LINES?lin. ??CHECK?lin?>?0. ??READ?TABLE?p_src_tab?INDEX?lin. ??DO. ????DO?counts?TIMES. ??????READ?TABLE?lt_dd03l?INDEX?sy-index. ??????ASSIGN?COMPONENT?lt_dd03l-fieldname?OF?STRUCTURE?p_src_tab?TO?<fldvalue>. ??????IF?sy-index?<?counts. ????????IF?p_key_constr?<>??''. ??????????CONCATENATE?p_key_constr?lt_dd03l-fieldname?`?=?'`?<fldvalue>?`'`?INTO?p_key_constr. ????????ELSE. ??????????CONCATENATE?lt_dd03l-fieldname?`?=?'`?<fldvalue>?`'`?INTO?p_key_constr. ????????ENDIF. ????????CONCATENATE?p_key_constr?`?AND?`?INTO?p_key_constr. ??????ELSEIF?sy-index?=?counts. ????????IF?p_key_constr?<>??''. ??????????CONCATENATE?p_key_constr?lt_dd03l-fieldname?`?>?'`?<fldvalue>?`'`?INTO?p_key_constr. ????????ELSE. ??????????CONCATENATE?lt_dd03l-fieldname?`?>?'`?<fldvalue>?`'`?INTO?p_key_constr. ????????ENDIF. ??????ENDIF. ????ENDDO. ????counts?=?counts?-?1. ????IF?counts?<=?0. ??????EXIT. ????ELSE. ??????CONCATENATE?p_key_constr?`?OR?`?INTO?p_key_constr. ????ENDIF. ??ENDDO. ??CLEAR:?itab,itab[]. ??SPLIT?p_key_constr?AT?`?OR?`?INTO?TABLE?itab?. ??DESCRIBE?TABLE?itab?LINES?counts. ??ASSIGN?COMPONENT?wa_dd03l-fieldname?OF?STRUCTURE?p_src_tab?TO?<fldvalue>. ??DO?counts?TIMES. ????READ?TABLE?itab?INDEX?sy-index. ????CONCATENATE?wa_dd03l-fieldname?`?=?'`?<fldvalue>?`'?AND?`?itab?INTO?key_constr. ????APPEND?key_constr. ??ENDDO. ENDFORM. " frm_key_constr *&---------------------------------------------------------------------* *&??????Form??frm_comp_tab *&---------------------------------------------------------------------* *???????遞歸將某結(jié)構(gòu)組件展開(kāi)(如:由于BKPF表中.APPEND附加結(jié)構(gòu),通過(guò) *???????struct_type??=?cl_abap_typedescr=>describe_by_name(?'BKPF'?)獲得 *???????的組件中就會(huì)有STRU類型的組件,而非基本類型組件,所以需遞歸展開(kāi)) *----------------------------------------------------------------------* *??????-->COMP_TAB???某結(jié)構(gòu)的組件 *----------------------------------------------------------------------* FORM frm_comp_tab TABLES comp_tab TYPE cl_abap_structdescr=>component_table. ??DATA:?lt_comp_tab?LIKE?comp_tab[]?WITH?HEADER?LINE. ??DATA:struct_type3?TYPE?REF?TO?cl_abap_structdescr, ?????comp_tab3?TYPE?cl_abap_structdescr=>component_table?WITH?HEADER?LINE. ??LOOP?AT?comp_tab?. ????IF?comp_tab-name?<>?''. ??????APPEND?comp_tab?TO?lt_comp_tab. ????ELSE. ??????struct_type3??=?comp_tab-type. ??????comp_tab3[]?=?struct_type3->get_components(?). ??????PERFORM?frm_comp_tab?TABLES?comp_tab3. ??????APPEND?LINES?OF?comp_tab3?TO?lt_comp_tab. ????ENDIF. ??ENDLOOP. ??comp_tab[]?=?lt_comp_tab[]. ENDFORM. " frm_comp_tab *&---------------------------------------------------------------------* *&??????Form??frm_find_table *&---------------------------------------------------------------------* *???????text *----------------------------------------------------------------------* FORM frm_find_table USING p_tablex. ??DATA:?code?TYPE?TABLE?OF?string?WITH?HEADER?LINE. ??DATA:?off??TYPE?i, ????????moff?TYPE?i, ????????mlen?TYPE?i, ????????diffoff?TYPE?i. ??DATA:?tmpstr?TYPE?string. ??CLEAR:rtables,rtables[]. ??IF?p_prog?IS?NOT?INITIAL. ????READ?REPORT?p_prog?INTO?code. ????line?=?''. ????LOOP?AT?code. ??????REPLACE?ALL?OCCURRENCES?OF?cl_abap_char_utilities=>horizontal_tab?IN?code?WITH?`?`. ??????CONDENSE?code. ??????CLEAR?itab. ??????SPLIT?code?AT?`?`?INTO?TABLE?itab?. ??????LOOP?AT?itab?WHERE?table_line?IS?NOT?INITIAL. ????????IF?line?=?''. ??????????line?=?itab. ????????ELSE. ??????????CONCATENATE??line?`?`?itab?INTO?line?SEPARATED?BY?``. ????????ENDIF. ??????ENDLOOP. ????ENDLOOP. ????off?=?0. ????DO. ??????FIND?`?FROM?`?IN?SECTION?OFFSET?off?OF ???????????line ???????????IGNORING?CASE ???????????MATCH?OFFSET?moff ???????????MATCH?LENGTH?mlen. ??????IF?sy-subrc?=?0. ????????off?=?moff?+?mlen. ????????FIND?`?`?IN?SECTION?OFFSET?off?OF ???????????line ???????????IGNORING?CASE ???????????MATCH?OFFSET?moff ???????????MATCH?LENGTH?mlen. ????????tmpstr?=?line. ????????diffoff?=?moff?-?off. ????????tmpstr?=?tmpstr+off(diffoff). ????????CONDENSE?tmpstr. ????????rtables-sign?=?'I'. ????????rtables-option?=?'EQ'. ????????rtables-low?=?tmpstr. ????????SET?LOCALE?LANGUAGE?'1'?. ????????TRANSLATE?rtables-low?TO?UPPER?CASE. ????????APPEND?rtables. ??????ELSE. ????????EXIT. ??????ENDIF. ????ENDDO. ????off?=?0. ????DO. ??????FIND?`?JOIN?`?IN?SECTION?OFFSET?off?OF ???????????line ???????????IGNORING?CASE ???????????MATCH?OFFSET?moff ???????????MATCH?LENGTH?mlen. ??????IF?sy-subrc?=?0. ????????off?=?moff?+?mlen. ????????FIND?`?`?IN?SECTION?OFFSET?off?OF ???????????line ???????????IGNORING?CASE ???????????MATCH?OFFSET?moff ???????????MATCH?LENGTH?mlen. ????????tmpstr?=?line. ????????diffoff?=?moff?-?off. ????????tmpstr?=?tmpstr+off(diffoff). ????????CONDENSE?tmpstr. ????????rtables-sign?=?'I'. ????????rtables-option?=?'EQ'. ????????rtables-low?=?tmpstr. ????????SET?LOCALE?LANGUAGE?'1'?. ????????TRANSLATE?rtables-low?TO?UPPER?CASE. ????????APPEND?rtables. ??????ELSE. ????????EXIT. ??????ENDIF. ????ENDDO. ??ENDIF. ??IF?rtables[]?IS?NOT?INITIAL?AND?p_tablex?IS?NOT?INITIAL. ????rtables-sign?=?'I'. ????rtables-option?=?'EQ'. ????rtables-low?=?p_table. ????SET?LOCALE?LANGUAGE?'1'?. ????TRANSLATE?rtables-low?TO?UPPER?CASE. ????APPEND?rtables. ??ENDIF. ??CLEAR:gt_vrm_values,gt_vrm_values[],gt_vrm_values_dt,gt_vrm_values_dt[],gt_dd03l,gt_dd03l[]. ??PERFORM?frm_val?TABLES?gt_vrm_values?rtables?gt_vrm_values_dt?gt_dd03l?USING?'X'. ENDFORM. "frm_find_table *&---------------------------------------------------------------------* *&??????Form??frm_find_sel *&---------------------------------------------------------------------* *???????text *----------------------------------------------------------------------* FORM frm_find_sel . ??DATA:?code?TYPE?TABLE?OF?string?WITH?HEADER?LINE. ??DATA:?off??TYPE?i, ????????moff?TYPE?i, ????????moff2?TYPE?i, ????????mlen?TYPE?i, ????????diffoff?TYPE?i. ??DATA:?BEGIN?OF?lt_sel?OCCURS?0, ????sel?TYPE?string, ??END?OF?lt_sel. ??lt_sel-sel?=?`?IN?S_ASIST1`. ??APPEND?lt_sel. ??lt_sel-sel?=?`?IN?S_ASIST2`. ??APPEND?lt_sel. ??lt_sel-sel?=?`?IN?S_ASIST3`. ??APPEND?lt_sel. ??lt_sel-sel?=?`?IN?S_ASIST4`. ??APPEND?lt_sel. ??lt_sel-sel?=?`?IN?S_ASIST5`. ??APPEND?lt_sel. ??CLEAR:sel_flds,sel_flds[]. ??IF?p_prog?IS?NOT?INITIAL. ????READ?REPORT?p_prog?INTO?code. ????line?=?''. ????LOOP?AT?code. ??????REPLACE?ALL?OCCURRENCES?OF?cl_abap_char_utilities=>horizontal_tab?IN?code?WITH?`?`. ??????CONDENSE?code. ??????CLEAR?itab. ??????SPLIT?code?AT?`?`?INTO?TABLE?itab?. ??????LOOP?AT?itab?WHERE?table_line?IS?NOT?INITIAL. ????????IF?line?=?''. ??????????line?=?itab. ????????ELSE. ??????????CONCATENATE??line?`?`?itab?INTO?line?SEPARATED?BY?``. ????????ENDIF. ??????ENDLOOP. ????ENDLOOP. ????off?=?0. ????LOOP?AT?lt_sel. ??????DO. ????????FIND?lt_sel-sel?IN?SECTION?OFFSET?off?OF ?????????????line ?????????????IGNORING?CASE ?????????????MATCH?OFFSET?moff ?????????????MATCH?LENGTH?mlen. ????????IF?sy-subrc?=?0. ??????????moff2?=?moff?-?1. ??????????WHILE?line+moff2(1)?<>?`?`. ????????????moff2?=?moff2?-?1. ????????????IF?moff2?<?0. ??????????????EXIT. ????????????ENDIF. ??????????ENDWHILE. ??????????diffoff?=?moff?-?moff2. ??????????sel_flds-fld?=?line+moff2(diffoff). ??????????SHIFT?sel_flds-fld?UP?TO?`~`?LEFT. ??????????REPLACE?ALL?OCCURRENCES?OF?`~`?IN?sel_flds-fld?WITH?``. ??????????CONDENSE?sel_flds-fld. ??????????TRANSLATE?sel_flds-fld?TO?UPPER?CASE. ??????????CASE?lt_sel-sel. ????????????WHEN?`?IN?S_ASIST1`. ??????????????sel_flds-p_snam?=?'s_asist1'. ????????????WHEN?`?IN?S_ASIST2`. ??????????????sel_flds-p_snam?=?'s_asist2'. ????????????WHEN?`?IN?S_ASIST3`. ??????????????sel_flds-p_snam?=?'s_asist3'. ????????????WHEN?`?IN?S_ASIST4`. ??????????????sel_flds-p_snam?=?'s_asist4'. ????????????WHEN?`?IN?S_ASIST5`. ??????????????sel_flds-p_snam?=?'s_asist5'. ??????????ENDCASE. ??????????APPEND?sel_flds. ??????????off?=?moff?+?mlen. ????????ELSE. ??????????EXIT. ????????ENDIF. ??????ENDDO. ????ENDLOOP. ??ENDIF. ENDFORM. "frm_find_table *&---------------------------------------------------------------------* *&??????Module??user_command_1003??INPUT *&---------------------------------------------------------------------* *???????text *----------------------------------------------------------------------* MODULE user_command_1003 INPUT. ??CASE?sy-ucomm. ????WHEN?'RW'. ??????LEAVE?TO?SCREEN?0. ??ENDCASE. ENDMODULE. " user_command_1003 INPUT *&---------------------------------------------------------------------* *&??????Form??frm_write_file *&---------------------------------------------------------------------* *???????text *----------------------------------------------------------------------* *??????-->P_SRC_TAB??text *----------------------------------------------------------------------* FORM frm_write_file TABLES p_src_tab. ??DATA:str?TYPE?string. ??CONCATENATE??`/usr/sap/tmp/`?p_fil_px2?`.`?p_extens?INTO?gv_filename?SEPARATED?BY?``. ??CONCATENATE??`正在向SAP服務(wù)上Append文件:`?gv_filename?INTO?str. ??IF?g_count?=?2. ????DELETE?DATASET?gv_filename. ??ENDIF. ??CALL?FUNCTION?'SAPGUI_PROGRESS_INDICATOR' ????EXPORTING ??????percentage?=?20 ??????text???????=?str. ??DATA?buffer?TYPE?xstring. ??PERFORM?frm_buffer?TABLES?p_src_tab?USING?buffer. ??OPEN?DATASET?gv_filename?FOR?APPENDING?IN?BINARY?MODE. ??TRANSFER?buffer?TO?gv_filename. ??CLOSE?DATASET?gv_filename. ENDFORM. " frm_write_file *&---------------------------------------------------------------------* *&??????Form??frm_ftp_append *&---------------------------------------------------------------------* *???????text *----------------------------------------------------------------------* *??-->??p1????????text *??<--??p2????????text *----------------------------------------------------------------------* FORM frm_ftp_append . ??DATA:?localfile?TYPE?string. ??PERFORM?f_ftp_connect. ??PERFORM?frm_cd_dir. ??CONCATENATE??p_fil_px2?`.`?p_extens?INTO?gv_filename?SEPARATED?BY?``. ??CONCATENATE??`/usr/sap/tmp/`?p_fil_px2?`.`?p_extens?INTO?localfile?SEPARATED?BY?``. ??CLEAR:com,com[],res,res[]. ??CONCATENATE?'append?'?localfile??gv_filename?INTO?com-cmd?SEPARATED?BY?'?'. ??CALL?FUNCTION?'FTP_COMMAND' ????EXPORTING ??????handle????????=?thandle ??????command???????=?com-cmd ????TABLES ??????data??????????=?res ????EXCEPTIONS ??????tcpip_error???=?1 ??????command_error?=?2 ??????data_error????=?3 ??????OTHERS????????=?4. ??PERFORM?f_ftp_disconnect. ENDFORM. " frm_ftp_append *&---------------------------------------------------------------------* *&??????Form??frm_buffer *&---------------------------------------------------------------------* *???????text *----------------------------------------------------------------------* *??????-->P_BUFFER??text *----------------------------------------------------------------------* FORM frm_buffer TABLES p_src_tab USING p_buffer. ??DATA:strct_type_ref?TYPE?REF?TO?cl_abap_structdescr, ??????????tab_type_ref?TYPE?REF?TO?cl_abap_tabledescr, ??????????t_component?TYPE?cl_abap_structdescr=>component_table, ??????????wa_component?LIKE?LINE?OF?t_component. ??FIELD-SYMBOLS:?<fldvalue>. ??DATA:?l_str?TYPE?string,fldstr?TYPE?string,fldtype,firsttime?VALUE?'X'. ??DATA:?str?TYPE?string. ??DATA:?codepage?TYPE?cpcodepage, ?????encoding?TYPE?abap_encoding, ????convout?TYPE?REF?TO?cl_abap_conv_out_ce. ??DATA:time_stamp?TYPE?timestampl,timestamp_c(22). ??CALL?FUNCTION?'SCP_CODEPAGE_BY_EXTERNAL_NAME' ????EXPORTING ??????external_name?=?p_encodi ????IMPORTING ??????sap_codepage??=?codepage. ??encoding?=?codepage. ??CALL?METHOD?cl_abap_conv_out_ce=>create ????EXPORTING ??????encoding?=?encoding ????RECEIVING ??????conv?????=?convout. ??tab_type_ref??=?cl_abap_tabledescr=>describe_by_data(?p_src_tab[]?). ??strct_type_ref??=?tab_type_ref->get_table_line_type(?). ??t_component?=?strct_type_ref->get_components(?). ??str?=?p_split. ??REPLACE?ALL?OCCURRENCES?OF?`\t`?IN?str??WITH?c_tab. ??REPLACE?ALL?OCCURRENCES?OF?`\T`?IN?str??WITH?c_tab. ??REPLACE?ALL?OCCURRENCES?OF?`?`?IN?str??WITH?``. ??GET?TIME?STAMP?FIELD?time_stamp. ??timestamp_c?=?time_stamp. ??LOOP?AT?p_src_tab. ????firsttime?=?'X'. ????CLEAR:fldstr,l_str. ????LOOP?AT?t_component?INTO?wa_component. ??????IF?wa_component-name?=?'ZTIMESTAMPL'. ????????IF?firsttime?=?'X'. ??????????fldstr?=?time_stamp. ??????????CLEAR?firsttime. ????????ELSE. ??????????CONCATENATE?fldstr?timestamp_c?INTO?fldstr?SEPARATED?BY?str. ????????ENDIF. ????????CONTINUE. ??????ENDIF. ??????fldtype?=?wa_component-type->type_kind. ??????ASSIGN?COMPONENT?wa_component-name?OF?STRUCTURE?p_src_tab?TO?<fldvalue>. ??????l_str?=?<fldvalue>. ??????IF?fldtype?=?'P'?OR?fldtype?=?'F' ????????OR?fldtype?=?'I'?OR?fldtype?=?'b' ????????OR?fldtype?=?'s'. ????????CALL?FUNCTION?'CLOI_PUT_SIGN_IN_FRONT' ??????????CHANGING ????????????value?=?l_str. ??????ENDIF. ??????REPLACE?ALL?OCCURRENCES?OF?str?IN?l_str??WITH?`?`. ??????IF?firsttime?=?'X'. ????????fldstr?=?l_str?. ????????CLEAR?firsttime. ??????ELSE. ????????CONCATENATE?fldstr?l_str?INTO?fldstr?SEPARATED?BY?str. ??????ENDIF. ????ENDLOOP. ????CONDENSE?fldstr. ????CALL?METHOD?convout->write ??????EXPORTING ????????data?=?fldstr. ????CALL?METHOD?convout->write ??????EXPORTING ????????data?=?cl_abap_char_utilities=>cr_lf. ??ENDLOOP. ??CALL?METHOD?convout->get_buffer ????RECEIVING ??????buffer?=?p_buffer. ENDFORM. " frm_buffer *&---------------------------------------------------------------------* *&??????Form??frm_write_file2 *&---------------------------------------------------------------------* *???????text *----------------------------------------------------------------------* *??????-->STR1???????text *??????-->STR2???????text *----------------------------------------------------------------------* FORM frm_write_file2 USING str1 lins tabix . ??DATA:str?TYPE?string. ??GET?RUN?TIME?FIELD?tm2. ??tm?=?(?tm2?-?tm1?)?/?1000?/?1000. ??tm1?=?tm2. ??str?=?lins. ??CONCATENATE??`/usr/sap/tmp/`?p_fil_px2?`.log`?INTO?gv_filename?SEPARATED?BY?``. ??IF?tabix?=?1?AND?g_count?=?1. ????DELETE?DATASET?gv_filename. ??ENDIF. ??OPEN?DATASET?gv_filename?FOR?APPENDING?IN?TEXT?MODE?ENCODING??DEFAULT. ??CONCATENATE?`【`?str?`條】`?str1?`?:?【`?tm?`秒】`INTO?str. ??TRANSFER?str?TO?gv_filename. ??CLOSE?DATASET?gv_filename. ENDFORM. "frm_write_file2 *&---------------------------------------------------------------------* *&??????Form??frm_write_file3 *&---------------------------------------------------------------------* *???????text *----------------------------------------------------------------------* FORM frm_write_file3. ??DATA:str?TYPE?string. ??CONCATENATE??`/usr/sap/tmp/`?p_fil_px2?`.log`?INTO?gv_filename?SEPARATED?BY?``. ??OPEN?DATASET?gv_filename?FOR?APPENDING?IN?TEXT?MODE?ENCODING??DEFAULT. ??TRANSFER?g_count?TO?gv_filename. ??TRANSFER?`?`?TO?gv_filename. ??CLOSE?DATASET?gv_filename. ENDFORM. "frm_write_file3 | |