最近在做印度GST相關的東西,需要手動給系統實施上百個SAP Note,十分繁瑣,
標準事務代碼SNOTE只支持每次上傳一個Note,逐個上傳大量Note會很麻煩,為此摸索出一個批量解壓上傳的流程,下面是細節,
0,去SAP網站下載Note檔案
1,準備好SAR檔案,如 '0002407980_00.SAR',把所有SAR檔案放到同一個目錄下,
2,在相同目錄內,放置SAPCAR.EXE解壓程式,新建批處理程式xxx.bat,寫入以下代碼并運行:
@echo off setlocal for %%f in (*.SAR) do ( SAPCAR -xvf "%%f" ) for %%f in (*.ZIP) do ( tar -xf "%%f" ) endlocal
這是ChatGPT提供的代碼,可以解壓當前目錄下的SAR檔案,具體功能解釋如下,
@echo off
命令用于關閉命令的回顯,使輸出更清晰,setlocal
和endlocal
命令用于限制變數的范圍,防止它們影響到其他的腳本和環境,for %%f in (*.SAR) do
這一行是一個for回圈,它會遍歷當前目錄中所有的.SAR
檔案,每次迭代中,%%f
變數都會包含一個檔案名,SAPCAR -xvf "%%f"
這一行呼叫SAPCAR命令,并將當前檔案名作為引數,%%f
將被替換為實際的檔案名,- 同理,下一個
for
遍歷目錄中所有的.ZIP
檔案并解壓,
(注意,舊版windows可能不支持tar,但這并不要緊,只需要手動全選ZIP檔案并解壓即可,)
3,步驟2完成后,目錄中出現解壓得到的TXT檔案,可以用于上傳,
4,登陸你希望實施Note的SAP系統,運行程式 ZSCWN_NOTES_UPLOAD,選擇上文中存放Note的目錄,選擇全部TXT檔案,上傳,
如果Note數量多的話,需要耐心等待一段時間,直到程式運行結束,之后,進入事務代碼SNOTE,就可以看到批量上傳的全部Note已經被加載到SNOTE中,
ZSCWN_NOTES_UPLOAD 的作者是Frank Buchholz,原文:Report ZSCWN_NOTES_UPLOAD – Load multiple notes files into SNOTE
為了防止鏈接失效,在下面貼出代碼,

1 *&---------------------------------------------------------------------* 2 *& Report ZSCWN_NOTES_UPLOAD 3 *& Load multiple notes files into SNOTE 4 *&---------------------------------------------------------------------* 5 *& 6 *& Reference: 7 *& Security Patch Process FAQ 8 *& http://scn.sap.com/community/security/blog/2012/03/27/security-patch-process-faq#23_What_should_I_do_if_I_cannot_download_a_note_into_SNOTE 9 *& 23. What should I do if I cannot download a note into SNOTE? 10 *& 11 *& Sometimes you run into trouble while downloading large notes in transaction SNOTE, like for the security note 1826162 from July 2013. (In addition this note requires another large note 1674132, too.) 12 *& 13 *& In such a case use the download basket to get the note: 14 *& 15 *& 1. Show the note on SMP, e.g. https://service.sap.com/sap/support/notes/1826162 16 *& 2. Use the button "Download Corrections". You get a new window showing a log. 17 *& 3. Repeat 1. and 2. for more notes, e.g. note 1826162 requires other note 1674132 18 *& 4. Use the button "Download Basket" on the log window to show your basket 19 *& 5. Click on every link for the selected notes to download the file via the internet browser (You could try to use the SAP Download Manager, however, this might not work as it uses the same interface like SNOTE.) 20 *& 6. Un-zip the archive files which you have downloaded 21 *& 7. In transaction SNOTE use the menu path Goto->Upload note to load the note(s) one by one 22 *& 8. Implement the note as usual 23 *& 24 *& Another advantage is, that you can use the same files for uploading notes into several development systems 25 *& 26 *& 19.08.2013 Initial version based on function SCWN_NOTE_UPLOAD_INTERNAL which allows the upload of a single file 27 *& 28 *&---------------------------------------------------------------------* 29 30 REPORT ZSCWN_NOTES_UPLOAD. 31 32 constants: c_program_version(15) type c value '19.08.2013'. 33 34 selection-screen begin of line. 35 selection-screen comment 1(32) T_PATH for field s_path. 36 parameters: s_path type string LOWER CASE. 37 selection-screen end of line. 38 39 SELECTION-SCREEN COMMENT 1(60) ss_vers. 40 41 *----------------------------------------------------------------------* 42 43 INITIALIZATION. 44 * Authorization check according to report SCWN_ENTRY_TREE (=SNOTE) 45 CALL FUNCTION 'AUTHORITY_CHECK_TCODE' 46 EXPORTING 47 tcode = 'SNOTE' 48 EXCEPTIONS 49 ok = 0 50 not_ok = 1 51 OTHERS = 2. 52 53 IF sy-subrc <> 0. 54 * All messages raised from authority_check_tcode means: 55 * 'This transaction can or should not be started.' 56 MESSAGE i775(scwn) WITH 'SNOTE'. 57 LEAVE PROGRAM. 58 ENDIF. 59 60 T_PATH = 'Local path with text files'(000). 61 62 concatenate 'Program version from'(000) c_program_version into SS_VERS 63 SEPARATED BY SPACE. 64 65 * Get default download path 66 data l_UPLOAD_PATH type string. 67 CALL METHOD CL_GUI_FRONTEND_SERVICES=>GET_UPLOAD_DOWNLOAD_PATH 68 CHANGING 69 UPLOAD_PATH = l_UPLOAD_PATH 70 DOWNLOAD_PATH = s_path 71 EXCEPTIONS 72 CNTL_ERROR = 1 73 ERROR_NO_GUI = 2 74 NOT_SUPPORTED_BY_GUI = 3 75 GUI_UPLOAD_DOWNLOAD_PATH = 4 76 UPLOAD_DOWNLOAD_PATH_FAILED = 5 77 others = 6. 78 IF SY-SUBRC <> 0. 79 * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 80 * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 81 ENDIF. 82 83 *----------------------------------------------------------------------* 84 85 START-OF-SELECTION. 86 87 data: lv_file_filter TYPE string, 88 lv_filename TYPE string, 89 lv_file_table TYPE filetable, 90 lv_rc TYPE i, 91 lv_user_action TYPE i, 92 lv_file TYPE LINE OF filetable, 93 lv_title TYPE string. 94 data: lt_cont LIKE cwbdata OCCURS 0, 95 lv_FILELENGTH type i. 96 97 * dialog for file 98 CLASS cl_gui_frontend_services DEFINITION LOAD. 99 * Definition of file types see text elements of class CL_GUI_FRONTEND_SERVICES 100 lv_file_filter = cl_gui_frontend_services=>FILETYPE_TEXT. 101 lv_title = 'Upload SAP Note'(100). 102 103 * Ask for list of files 104 CALL METHOD cl_gui_frontend_services=>file_open_dialog 105 EXPORTING 106 window_title = lv_title 107 INITIAL_DIRECTORY = s_path 108 * default_filename = lv_filename 109 file_filter = lv_file_filter 110 multiselection = 'X' 111 CHANGING 112 file_table = lv_file_table 113 rc = lv_rc 114 user_action = lv_user_action 115 EXCEPTIONS 116 OTHERS = 1. 117 118 IF sy-subrc <> 0 OR lv_rc <= 0. 119 EXIT. 120 ENDIF. 121 122 IF lv_user_action = cl_gui_frontend_services=>action_cancel. 123 MESSAGE s020(scwn). 124 EXIT. 125 ENDIF. 126 127 * process files 128 data: lv_lines type i, 129 lv_percent type i, 130 lv_message(132). 131 describe table lv_file_table lines lv_lines. 132 loop at lv_file_table into lv_filename. 133 134 lv_percent = 100 * sy-tabix / lv_lines. 135 concatenate 'Read file'(002) lv_filename into lv_message SEPARATED BY space. 136 CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' 137 EXPORTING 138 PERCENTAGE = lv_percent 139 TEXT = lv_message. 140 141 * Read file 142 CALL FUNCTION 'GUI_UPLOAD' 143 EXPORTING 144 filename = lv_filename 145 FILETYPE = 'ASC' 146 IMPORTING 147 FILELENGTH = lv_FILELENGTH 148 TABLES 149 data_tab = lt_cont 150 EXCEPTIONS 151 file_open_error = 1 152 file_read_error = 2 153 no_batch = 3 154 gui_refuse_filetransfer = 4 155 invalid_type = 5 156 no_authority = 6 157 unknown_error = 7 158 bad_data_format = 8 159 header_not_allowed = 9 160 separator_not_allowed = 10 161 header_too_long = 11 162 unknown_dp_error = 12 163 access_denied = 13 164 dp_out_of_memory = 14 165 disk_full = 15 166 dp_timeout = 16 167 OTHERS = 17. 168 169 IF sy-subrc <> 0. 170 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 171 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 172 ENDIF. 173 174 * Process file 175 perform scwn_note_upload_internal 176 tables lt_cont. 177 178 endloop. 179 180 message 'Files loaded'(003) type 'S'. 181 182 *FUNCTION scwn_note_upload_internal. 183 *"---------------------------------------------------------------------- 184 *"*"Lokale Schnittstelle: 185 *" EXCEPTIONS 186 *" INCOMPATIBLE_VERSIONS 187 *" CORRUPT_DATA_FILE 188 *"---------------------------------------------------------------------- 189 constants: true type BCWBN_BOOL value 'X', 190 false type BCWBN_BOOL value space. 191 * 192 FORM scwn_note_upload_internal 193 tables lt_cont. " LIKE cwbdata OCCURS 0. 194 195 FIELD-SYMBOLS: <ls_cwbnthead> TYPE cwbnthead. 196 197 DATA: lv_cancel, 198 lv_filetype LIKE rlgrap-filetype, 199 * lt_cont LIKE cwbdata OCCURS 0, 200 lt_cwbnthead LIKE cwbnthead OCCURS 0, 201 lt_cwbntstxt LIKE cwbntstxt OCCURS 0, 202 lt_cwbntdata TYPE bcwbn_note_text OCCURS 0, 203 lt_cwbntvalid LIKE cwbntvalid OCCURS 0, 204 lt_cwbntci LIKE cwbntci OCCURS 0, 205 lt_cwbntfixed LIKE cwbntfixed OCCURS 0, 206 lt_cwbntgattr LIKE cwbntgattr OCCURS 0, 207 lt_cwbcihead LIKE cwbcihead OCCURS 0, 208 lt_cwbcidata TYPE bcwbn_cinst_delta OCCURS 0, 209 lt_cwbcivalid LIKE cwbcivalid OCCURS 0, 210 lt_cwbciinvld LIKE cwbciinvld OCCURS 0, 211 lt_cwbcifixed LIKE cwbcifixed OCCURS 0, 212 lt_cwbcidpndc LIKE cwbcidpndc OCCURS 0, 213 lt_cwbciobj LIKE cwbciobj OCCURS 0, 214 lt_cwbcmpnt LIKE cwbcmpnt OCCURS 0, 215 lt_cwbcmtext LIKE cwbcmtext OCCURS 0, 216 lt_cwbcmlast LIKE cwbcmlast OCCURS 0, 217 lt_cwbdehead LIKE cwbdehead OCCURS 0, 218 lt_cwbdeprdc LIKE cwbdeprdc OCCURS 0, 219 lt_cwbdetrack LIKE cwbdetrack OCCURS 0, 220 lt_cwbdeequiv LIKE cwbdeequiv OCCURS 0, 221 lt_cwbcidata_ref TYPE cwb_deltas, 222 * lv_file_filter TYPE string, 223 * lv_filename TYPE string, 224 * lv_file_table TYPE filetable, 225 * lv_rc TYPE i, 226 * lv_user_action TYPE i, 227 lv_file TYPE LINE OF filetable, 228 * lv_title TYPE string, 229 ls_note TYPE bcwbn_note, 230 lt_notes TYPE bcwbn_notes, 231 ls_cwbnthead LIKE cwbnthead. 232 233 DATA: lv_data_bin TYPE xstring, 234 lv_code_delta_bin TYPE xstring, 235 lt_object_data_bin TYPE cwbci_t_objdelta, 236 ls_numm_versno TYPE cwbntkeyvs. 237 238 ** dialog for file 239 * CLASS cl_gui_frontend_services DEFINITION LOAD. 240 * lv_file_filter = cl_gui_frontend_services=>filetype_all. 241 * lv_title = text-100. 242 * 243 * CALL METHOD cl_gui_frontend_services=>file_open_dialog 244 * EXPORTING 245 * window_title = lv_title 246 * default_filename = lv_filename 247 * file_filter = lv_file_filter 248 * CHANGING 249 * file_table = lv_file_table 250 * rc = lv_rc 251 * user_action = lv_user_action 252 * EXCEPTIONS 253 * OTHERS = 1. 254 * 255 * IF sy-subrc <> 0 OR lv_rc <= 0. 256 * EXIT. 257 * ENDIF. 258 * 259 * IF lv_user_action = cl_gui_frontend_services=>action_cancel. 260 * MESSAGE s020(scwn). 261 * EXIT. 262 * ENDIF. 263 * 264 ** upload file 265 * READ TABLE lv_file_table INTO lv_file INDEX 1. 266 * lv_filename = lv_file-filename. 267 * 268 * CALL FUNCTION 'GUI_UPLOAD' 269 * EXPORTING 270 * filename = lv_filename 271 * TABLES 272 * data_tab = lt_cont_bin 273 * EXCEPTIONS 274 * file_open_error = 1 275 * file_read_error = 2 276 * no_batch = 3 277 * gui_refuse_filetransfer = 4 278 * invalid_type = 5 279 * no_authority = 6 280 * unknown_error = 7 281 * bad_data_format = 8 282 * header_not_allowed = 9 283 * separator_not_allowed = 10 284 * header_too_long = 11 285 * unknown_dp_error = 12 286 * access_denied = 13 287 * dp_out_of_memory = 14 288 * disk_full = 15 289 * dp_timeout = 16 290 * OTHERS = 17. 291 * 292 * IF sy-subrc <> 0. 293 * MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 294 * WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 295 * ENDIF. 296 297 CALL FUNCTION 'SCWN_NOTE_UNPACK' 298 IMPORTING 299 ev_data_bin = lv_data_bin 300 ev_code_delta_bin = lv_code_delta_bin 301 et_object_data_bin = lt_object_data_bin 302 TABLES 303 tt_cont = lt_cont 304 EXCEPTIONS 305 incompatible_versions = 1 306 corrupt_data_file = 2 307 OTHERS = 3. 308 309 IF sy-subrc <> 0. 310 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 311 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 312 ENDIF. 313 314 CALL FUNCTION 'SCWN_NOTE_UNPACK_XML' 315 EXPORTING 316 iv_data_bin = lv_data_bin 317 iv_code_delta_bin = lv_code_delta_bin 318 it_object_data_bin = lt_object_data_bin 319 IMPORTING 320 et_cwbnthead = lt_cwbnthead 321 et_cwbntstxt = lt_cwbntstxt 322 et_cwbntdata =https://www.cnblogs.com/hhelibeb/p/ lt_cwbntdata 323 et_cwbntvalid = lt_cwbntvalid 324 et_cwbntci = lt_cwbntci 325 et_cwbntfixed = lt_cwbntfixed 326 et_cwbntgattr = lt_cwbntgattr 327 et_cwbcihead = lt_cwbcihead 328 et_cwbcidata =https://www.cnblogs.com/hhelibeb/p/ lt_cwbcidata 329 et_cwbcidata_ref = lt_cwbcidata_ref 330 et_cwbcivalid = lt_cwbcivalid 331 et_cwbciinvld = lt_cwbciinvld 332 et_cwbcifixed = lt_cwbcifixed 333 et_cwbcidpndc = lt_cwbcidpndc 334 et_cwbciobj = lt_cwbciobj 335 et_cwbcmpnt = lt_cwbcmpnt 336 et_cwbcmtext = lt_cwbcmtext 337 et_cwbcmlast = lt_cwbcmlast 338 et_cwbdehead = lt_cwbdehead 339 et_cwbdeprdc = lt_cwbdeprdc 340 et_cwbdetrack = lt_cwbdetrack 341 et_cwbdeequiv = lt_cwbdeequiv 342 EXCEPTIONS 343 corrupt_data_file = 1 344 incompatible_versions = 2 345 OTHERS = 3. 346 IF sy-subrc <> 0. 347 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 348 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 349 RAISING corrupt_data_file. 350 ENDIF. 351 352 * store note 353 CALL FUNCTION 'SCWN_NOTE_STORE' 354 EXPORTING 355 it_cwbcmpnt = lt_cwbcmpnt 356 it_cwbdetrack = lt_cwbdetrack 357 it_cwbdehead = lt_cwbdehead 358 it_cwbdeequiv = lt_cwbdeequiv 359 TABLES 360 tt_cwbnthead = lt_cwbnthead 361 tt_cwbntstxt = lt_cwbntstxt 362 tt_cwbntdata =https://www.cnblogs.com/hhelibeb/p/ lt_cwbntdata 363 tt_cwbntvalid = lt_cwbntvalid 364 tt_cwbntci = lt_cwbntci 365 tt_cwbntfixed = lt_cwbntfixed 366 tt_cwbntgattr = lt_cwbntgattr 367 tt_cwbcihead = lt_cwbcihead 368 tt_cwbcidata =https://www.cnblogs.com/hhelibeb/p/ lt_cwbcidata 369 tt_cwbcidata_ref = lt_cwbcidata_ref 370 tt_cwbcivalid = lt_cwbcivalid 371 tt_cwbciinvld = lt_cwbciinvld 372 tt_cwbcifixed = lt_cwbcifixed 373 tt_cwbcidpndc = lt_cwbcidpndc 374 tt_cwbciobj = lt_cwbciobj 375 EXCEPTIONS 376 failure = 1 377 OTHERS = 2. 378 379 IF sy-subrc <> 0. 380 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 381 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 382 ELSE. 383 * store each stored note in download history 384 LOOP AT lt_cwbnthead ASSIGNING <ls_cwbnthead>. 385 ls_numm_versno-numm = <ls_cwbnthead>-numm. 386 ls_numm_versno-versno = <ls_cwbnthead>-versno. 387 CALL FUNCTION 'SCWN_NOTE_DOWNLOAD_HIST' 388 EXPORTING 389 is_note_version = ls_numm_versno 390 iv_mode_write = true 391 EXCEPTIONS 392 OTHERS = 1. 393 IF sy-subrc <> 0. 394 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 395 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 396 ENDIF. 397 ENDLOOP. 398 ENDIF. 399 400 * update software component if necessary 401 CALL FUNCTION 'SCWN_UPDATE_SOFTWARE_COMPONENT' 402 TABLES 403 tt_cwbcmpnt = lt_cwbcmpnt 404 tt_cwbcmtext = lt_cwbcmtext 405 tt_cwbcmlast = lt_cwbcmlast 406 tt_cwbdehead = lt_cwbdehead 407 tt_cwbdeprdc = lt_cwbdeprdc 408 tt_cwbdetrack = lt_cwbdetrack 409 tt_cwbdeequiv = lt_cwbdeequiv 410 EXCEPTIONS 411 failure = 1 412 OTHERS = 2. 413 414 IF sy-subrc <> 0. 415 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 416 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 417 ENDIF. 418 419 * classify notes 420 LOOP AT lt_cwbnthead INTO ls_cwbnthead. 421 ls_note-key-numm = ls_cwbnthead-numm. 422 ls_note-key-versno = ls_cwbnthead-versno. 423 APPEND ls_note TO lt_notes. 424 ENDLOOP. 425 426 CALL FUNCTION 'SCWB_NOTES_CLASSIFY' 427 EXPORTING 428 it_notes = lt_notes 429 iv_set_ntstatus = ' '. 430 431 ENDFORM. 432 *ENDFUNCTION.ZSCWN_NOTES_UPLOAD
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/557146.html
標籤:SAP
上一篇:5.2 基于ROP漏洞挖掘與利用
下一篇:返回列表