SAP ABAP下载服务器上的文件到本地电脑
需求:通过接口同步到SAP服务器的文件、SAP报表产生的文件等,需要下载到本地电脑。
实现思考:只允许用户看到特定的文件,可以通过自建权限与文件映射表关联。
主要技术点:DATASET,分包,CODEPAGE,S_DATASET权限对象,服务器文件定期清理。
参考代码(来源于Google):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
*&---------------------------------------------------------------------* *& Report ZFIR001 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT ZFIR001. TABLES: SSCRFIELDS. DATA: LT_SELCONDI TYPE TABLE OF SE16N_SELTAB WITH HEADER LINE. SELECTION-SCREEN FUNCTION KEY 1. PARAMETERS: LV_AS_FN TYPE SAPB-SAPPFAD DEFAULT '/tmp/' LOWER CASE. PARAMETERS: LV_CL_FN TYPE STRING DEFAULT 'C:\' LOWER CASE. "注意文件不要直接放到C盘根目录,可能无权限,可以C:\fico\xxx INITIALIZATION. SSCRFIELDS-FUNCTXT_01 = '查询我的文件'. CLEAR LT_SELCONDI. LT_SELCONDI-FIELD = 'UNAME'. LT_SELCONDI-SIGN = 'I'. LT_SELCONDI-OPTION = 'EQ'. LT_SELCONDI-LOW = SY-UNAME. APPEND LT_SELCONDI. "删除过期的文件,默认保留10天. SELECT * INTO TABLE @DATA(LT_ZFIT001) FROM ZFIT001. * WHERE UNAME EQ @SY-UNAME. "不限制用户名,每次进入就清理过期文件. LOOP AT LT_ZFIT001 ASSIGNING FIELD-SYMBOL(<FS1>). IF SY-DATUM - <FS1>-DATUM > 10. IF <FS1>-HOST EQ SY-HOST. IF <FS1>-FNAME IS NOT INITIAL. DELETE DATASET <FS1>-FNAME. "可以用read dataset判断下文件是否存在. IF SY-SUBRC IS INITIAL. DELETE FROM ZFIT001 WHERE UNAME EQ <FS1>-UNAME AND FNAME EQ <FS1>-FNAME. ENDIF. ENDIF. ENDIF. ENDIF. ENDLOOP. AT SELECTION-SCREEN. CASE SSCRFIELDS-UCOMM. WHEN 'FC01'. CALL FUNCTION 'SE16N_INTERFACE' EXPORTING I_TAB = 'ZFIT001' I_MAX_LINES = 3000 I_DISPLAY = 'X' TABLES IT_SELFIELDS = LT_SELCONDI[]. WHEN OTHERS. ENDCASE. START-OF-SELECTION. CONSTANTS BLOCKSIZE TYPE I VALUE 524287. CONSTANTS PACKAGESIZE TYPE I VALUE 8. TYPES TY_DATABLOCK(BLOCKSIZE) TYPE X. DATA LV_FIL TYPE EPSF-EPSFILNAM. DATA LV_DIR TYPE EPSF-EPSDIRNAM. DATA LS_DATA TYPE TY_DATABLOCK. DATA LT_DATA TYPE STANDARD TABLE OF TY_DATABLOCK. DATA LV_BLOCK_LEN TYPE I. DATA LV_PACKAGE_LEN TYPE I. DATA LV_SUBRC TYPE SY-SUBRC. DATA LV_MSGV1 LIKE SY-MSGV1. DATA LV_PROCESSED_SO_FAR TYPE P. DATA LV_APPEND TYPE C. DATA LV_STATUS TYPE STRING. DATA LV_FILESIZE TYPE P. DATA LV_PERCENT TYPE I. "Determine size SPLIT LV_AS_FN AT '/' INTO LV_DIR LV_FIL. CALL FUNCTION 'EPS_GET_FILE_ATTRIBUTES' EXPORTING FILE_NAME = LV_FIL DIR_NAME = LV_DIR IMPORTING FILE_SIZE_LONG = LV_FILESIZE. "Open the file on application server OPEN DATASET LV_AS_FN FOR INPUT IN BINARY MODE MESSAGE LV_MSGV1. IF SY-SUBRC <> 0. MESSAGE E048(CMS) WITH LV_AS_FN LV_MSGV1 RAISING FILE_READ_ERROR. EXIT. ENDIF. LV_PROCESSED_SO_FAR = 0. DO. REFRESH LT_DATA. LV_PACKAGE_LEN = 0. DO PACKAGESIZE TIMES. CLEAR LS_DATA. CLEAR LV_BLOCK_LEN. READ DATASET LV_AS_FN INTO LS_DATA MAXIMUM LENGTH BLOCKSIZE LENGTH LV_BLOCK_LEN. LV_SUBRC = SY-SUBRC. IF LV_BLOCK_LEN > 0. LV_PACKAGE_LEN = LV_PACKAGE_LEN + LV_BLOCK_LEN. APPEND LS_DATA TO LT_DATA. ENDIF. "End of file IF LV_SUBRC <> 0. EXIT. ENDIF. ENDDO. IF LV_PACKAGE_LEN > 0. "Put file to client IF LV_PROCESSED_SO_FAR = 0. LV_APPEND = ' '. ELSE. LV_APPEND = 'X'. ENDIF. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING BIN_FILESIZE = LV_PACKAGE_LEN FILENAME = LV_CL_FN FILETYPE = 'BIN' APPEND = LV_APPEND SHOW_TRANSFER_STATUS = ABAP_FALSE TABLES DATA_TAB = LT_DATA. LV_PROCESSED_SO_FAR = LV_PROCESSED_SO_FAR + LV_PACKAGE_LEN. "Status display LV_PERCENT = LV_PROCESSED_SO_FAR * 100 / LV_FILESIZE. LV_STATUS = |{ LV_PERCENT }% - { LV_PROCESSED_SO_FAR } bytes downloaded of { LV_FILESIZE }|. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING "percentage = lv_percent - will make it fash TEXT = LV_STATUS. ENDIF. "End of file IF LV_SUBRC <> 0. EXIT. ENDIF. ENDDO. "Close the file on application server CLOSE DATASET LV_AS_FN. |
如若转载,请注明出处:https://www.gavindong.com/4268.html