这是一个可以下载ABAP报表源程序以及相关的文本内容的程序,但是对于在Unicode环境下不能通过编译,因此进行了一点小的修改,已经可以正常运行。
1 *----------------------------------------------------------------------*
2 * Report: ZKBPROGS *
3 *----------------------------------------------------------------------*
4 * Function : Up/Download ABAP reports complete with texts *
5 *----------------------------------------------------------------------*
6 * Change Log : *
7 * July 5, 1999 *
8 * - Combined existing programs that did the upload and download into*
9 * - one program. *
10 * - Changed format that the reports are saved in to be compatible *
11 * with Wolfgang Morgenthaler's upload/download program(YSTRASN00 *
12 * at http://www.antarcon.de/). Major differences between this program and*
13 * Wolfgang's are:
14 * - this program does not update TRDIR with the *
15 * TRDIR entries that are in the program uploaded. Instead, *
16 * current users stats are used. *
17 * - this program allows selection of reports from a list or *
18 * a single report can be tuped in and uploaded *
19 * - this program also updates TADIR so that a development class*
20 * is assigned to the program *
21 * - this program checks to see if the program already has a *
22 * TRDIR entry, and if it does, warns the user *
23 * - this program will save/restore the program documenation too*
24 * *
25 * Jan 09, 2006 *
26 * - TextPool中数据导出对Unicode支持问题,致使原来的代码不能编译通过,
27 * 修改以后运行正常;上载部分同样修改。
28 * *
29 * *
30 *----------------------------------------------------------------------*
31 REPORT ZKBPROGS
32 NO STANDARD PAGE HEADING
33 LINE-SIZE 255.
34 *----------------------------------------------------------------------*
35 * Declare Database Objects *
36 *----------------------------------------------------------------------*
37 tables:
38 DOKIL, "表DOKH文档的索引
39 DOKTL, "文档 - 文本行
40 TADIR, "资源库对象的目录
41 TRDIR. "系统表 TRDIR
42 *----------------------------------------------------------------------*
43 * Constants*
44 CONSTANTS:
45 MC_TRDIR_IDENTIFIER(72) TYPE C VALUE '%&%& RDIR',
46 MC_REPORT_IDENTIFIER(72) TYPE C VALUE '%&%& REPO',
47 MC_TEXT_IDENTIFIER(72) TYPE C VALUE '%&%& TEXP',
48 MC_THEAD_IDENTIFIER(72) TYPE C VALUE '%&%& HEAD',
49 MC_DOC_IDENTIFIER(72) TYPE C VALUE '%&%& DOKL',
50 MC_TRDIR_SHORT(4) TYPE C VALUE 'RDIR',
51 MC_REPORT_SHORT(4) TYPE C VALUE 'REPO',
52 MC_TEXT_SHORT(4) TYPE C VALUE 'TEXP',
53 MC_THEAD_SHORT(4) TYPE C VALUE 'HEAD',
54 MC_DOC_SHORT(4) TYPE C VALUE 'DOKP'.
55 *----------------------------------------------------------------------*
56 *----------------------------------------------------------------------*
57 * Declare Module level data structures *
58 *----------------------------------------------------------------------*
59 DATA: BEGIN OF MTAB_PROGRAM_SOURCE OCCURS 0,
60 LINE(255) TYPE C,
61 END OF MTAB_PROGRAM_SOURCE.
62 DATA: MTAB_PROGRAM_TRDIR LIKE TRDIR OCCURS 0 WITH HEADER LINE.
63 DATA: MTAB_PROGRAM_TEXTS LIKE TEXTPOOL OCCURS 0 WITH HEADER LINE.
64 DATA: MSTR_THEAD LIKE THEAD.
65 DATA: BEGIN OF MTAB_PROGRAM_FILE OCCURS 0,
66 LINE(275) TYPE C,
67 END OF MTAB_PROGRAM_FILE.
68 DATA: BEGIN OF MTAB_DIRECTORY OCCURS 0,
69 NAME LIKE TRDIR-NAME,
70 DESC(72) TYPE C,
71 SAVENAME LIKE RLGRAP-FILENAME,
72 END OF MTAB_DIRECTORY.
73 DATA: BEGIN OF MTAB_PROGRAM_DOCUMENTATION OCCURS 0,
74 LINE(255) TYPE C,
75 END OF MTAB_PROGRAM_DOCUMENTATION.
76 *----------------------------------------------------------------------*
77 * Selection Screen *
78 *----------------------------------------------------------------------*
79 *-- Options for upload/download of programs
80 SELECTION-SCREEN BEGIN OF BLOCK FRM_OPTIONS WITH FRAME TITLE TEXT-UDL.
81 PARAMETERS:
82 RB_DOWN RADIOBUTTON GROUP UDL DEFAULT 'X'. " Download reports
83 SELECTION-SCREEN BEGIN OF BLOCK FRM_TRDIR WITH FRAME TITLE TEXT-DIR.
84 SELECT-OPTIONS:
85 S_NAME FOR TRDIR-NAME, " Program Name
86 S_SUBC FOR TRDIR-SUBC " Program Type
87 DEFAULT 'F' OPTION EQ SIGN E," Exclude Functions by default
88 S_CNAM FOR TRDIR-CNAM " Created by
89 DEFAULT SY-UNAME,
90 S_UNAM FOR TRDIR-UNAM, " Last Changed by
91 S_CDAT FOR TRDIR-CDAT, " Creation date
92 S_UDAT FOR TRDIR-UDAT. " Last update date
93 SELECTION-SCREEN END OF BLOCK FRM_TRDIR.
94 *-- Options for uploading programs
95 PARAMETERS:
96 RB_UP RADIOBUTTON GROUP UDL. " Upload reports
97 SELECTION-SCREEN BEGIN OF BLOCK FRM_UPLOAD WITH FRAME TITLE TEXT-UPL.
98 SELECTION-SCREEN BEGIN OF LINE.
99 SELECTION-SCREEN COMMENT 1(29) TEXT-SNG.
100 PARAMETERS:
101 RB_FILE RADIOBUTTON GROUP HOW DEFAULT 'X'.
102 SELECTION-SCREEN COMMENT 33(42) TEXT-FNA.
103 SELECTION-SCREEN END OF LINE.
104 PARAMETERS:
105 RB_LIST RADIOBUTTON GROUP HOW.
106 SELECTION-SCREEN END OF BLOCK FRM_UPLOAD.
107 SELECTION-SCREEN END OF BLOCK FRM_OPTIONS.
108 *-- Options for up/downloading programs
109 SELECTION-SCREEN BEGIN OF BLOCK FRM_FILEN WITH FRAME TITLE TEXT-FIL.
110 PARAMETERS:
111 RB_DOS RADIOBUTTON GROUP FIL DEFAULT 'X', " Save to local
112 RB_UNIX RADIOBUTTON GROUP FIL, " Save to UNIX
113 P_PATH LIKE RLGRAP-FILENAME " Path to save files to
114 DEFAULT 'c:\temp\'.
115 SELECTION-SCREEN END OF BLOCK FRM_FILEN.
116
117 AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_NAME-LOW.
118 CALL FUNCTION 'F4_PROGRAM'
119 EXPORTING
120 OBJECT = S_NAME-LOW
121 SUPPRESS_SELECTION = 'X'
122 IMPORTING
123 RESULT = S_NAME-LOW
124 EXCEPTIONS
125 OTHERS = 1.
126
127 AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_NAME-HIGH.
128 CALL FUNCTION 'F4_PROGRAM'
129 EXPORTING
130 OBJECT = S_NAME-HIGH
131 SUPPRESS_SELECTION = 'X'
132 IMPORTING
133 RESULT = S_NAME-HIGH
134 EXCEPTIONS
135 OTHERS = 1.
136
137 AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_UNAM-LOW.
138 PERFORM GET_NAME USING 'S_UNAM-LOW'
139 CHANGING S_UNAM-LOW.
140
141 AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_UNAM-HIGH.
142 PERFORM GET_NAME USING 'S_UNAM-HIGH'
143 CHANGING S_UNAM-HIGH.
144
145 AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_CNAM-LOW.
146 PERFORM GET_NAME USING 'S_CNAM-LOW'
147 CHANGING S_CNAM-LOW.
148
149 AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_CNAM-HIGH.
150 PERFORM GET_NAME USING 'S_CNAM-HIGH'
151 CHANGING S_CNAM-HIGH.
152
153 TOP-OF-PAGE.
154 IF RB_LIST = 'X'.
155 FORMAT COLOR COL_HEADING.
156 NEW-LINE.
157 WRITE: AT 3 TEXT-H01,
158 AT 15 TEXT-H03.
159 FORMAT COLOR OFF.
160 ENDIF.
161
162 AT LINE-SELECTION.
163 CHECK RB_LIST = 'X'. " only do in list mode
164 READ LINE SY-CUROW FIELD VALUE MTAB_DIRECTORY-SAVENAME.
165 *-- Read file into an internal table
166 PERFORM READ_REPORT_FROM_DISK TABLES MTAB_PROGRAM_FILE
167 USING MTAB_DIRECTORY-SAVENAME.
168 *-- Split table into TADIR entry, report lines, and report text
169 PERFORM SPLIT_INCOMING_FILE TABLES MTAB_PROGRAM_FILE
170 MTAB_PROGRAM_SOURCE
171 MTAB_PROGRAM_TEXTS
172 MTAB_PROGRAM_DOCUMENTATION
173 CHANGING TRDIR
174 MSTR_THEAD.
175 *-- Save all of the data
176 PERFORM INSERT_NEW_REPORT TABLES MTAB_PROGRAM_SOURCE
177 MTAB_PROGRAM_TEXTS
178 MTAB_PROGRAM_DOCUMENTATION
179 USING TRDIR
180 MSTR_THEAD.
181 *----------------------------------------------------------------------*
182 * Start of processing *
183 *----------------------------------------------------------------------*
184 START-OF-SELECTION.
185 FORMAT COLOR COL_NORMAL.
186 IF RB_DOWN = 'X'.
187 PERFORM DOWNLOAD_REPORTS.
188 ELSEIF RB_UP = 'X'.
189 PERFORM UPLOAD_REPORTS.
190 ENDIF.
191
192 END-OF-SELECTION.
193 IF RB_DOWN = 'X'.
194 CONCATENATE P_PATH
195 'directory.txt'
196 INTO P_PATH.
197 PERFORM SAVE_TABLE_TO_FILE TABLES MTAB_DIRECTORY
198 USING P_PATH.
199 ENDIF.
200 *---------------------------------------------------------------------*
201 * FORM UPLOAD_REPORTS *
202 *---------------------------------------------------------------------*
203 FORM UPLOAD_REPORTS.
204 *-- Can upload a reports entered in selection criteria or
205 *-- select from a list. List can be from index.txt in same directory
206 *-- (created by the download) or by reading the first line of each file
207 *-- in the directory.
208 IF RB_FILE = 'X'. " Upload single program from a file
209 *-- Read file into an internal table
210 PERFORM READ_REPORT_FROM_DISK TABLES MTAB_PROGRAM_FILE
211 USING P_PATH.
212 *-- Split table into TADIR entry, report lines, and report text
213 PERFORM SPLIT_INCOMING_FILE TABLES MTAB_PROGRAM_FILE
214 MTAB_PROGRAM_SOURCE
215 MTAB_PROGRAM_TEXTS
216 MTAB_PROGRAM_DOCUMENTATION
217 CHANGING TRDIR
218 MSTR_THEAD.
219 *-- Save all of the data
220 PERFORM INSERT_NEW_REPORT TABLES MTAB_PROGRAM_SOURCE
221 MTAB_PROGRAM_TEXTS
222 MTAB_PROGRAM_DOCUMENTATION
223 USING TRDIR
224 MSTR_THEAD.
225 ELSEIF RB_LIST = 'X'. " Show list for user to choose from
226 *-- get list of report names/descriptions from directory text
227 CONCATENATE P_PATH
228 'directory.txt'
229 INTO P_PATH.
230 PERFORM READ_REPORT_FROM_DISK TABLES MTAB_DIRECTORY
231 USING P_PATH.
232 SORT MTAB_DIRECTORY.
233 *-- Write out list of report names/descriptions
234 LOOP AT MTAB_DIRECTORY.
235 WRITE:
236 / MTAB_DIRECTORY-NAME UNDER TEXT-H01,
237 MTAB_DIRECTORY-DESC UNDER TEXT-H03,
238 MTAB_DIRECTORY-SAVENAME.
239 ENDLOOP.
240 *-- Process user selections for reports to upload.
241 ENDIF.
242 ENDFORM. " upload_reports
243 *---------------------------------------------------------------------*
244 * FORM DOWNLOAD_REPORTS *
245 *---------------------------------------------------------------------*
246 * From the user selections, get all programs that meet the *
247 * criteria, and save them in ftab_program_directory. *
248 * Also save the report to disk. *
249 *---------------------------------------------------------------------*
250 FORM DOWNLOAD_REPORTS.
251 DATA:
252 LC_FULL_FILENAME LIKE RLGRAP-FILENAME.
253 *-- The table is put into an internal table because the program will
254 *-- abend if multiple transfers to a dataset occur within a SELECT/
255 *-- ENDSELCT (tested on 3.1H)
256 SELECT * FROM TRDIR
257 INTO TABLE MTAB_PROGRAM_TRDIR
258 WHERE NAME IN S_NAME
259 AND SUBC IN S_SUBC
260 AND CNAM IN S_CNAM
261 AND UNAM IN S_UNAM
262 AND CDAT IN S_CDAT
263 AND UDAT IN S_UDAT.
264 LOOP AT MTAB_PROGRAM_TRDIR.
265 *-- Clear out text and source code tables
266 CLEAR:
267 MTAB_PROGRAM_FILE,
268 MTAB_PROGRAM_SOURCE,
269 MTAB_PROGRAM_TEXTS,
270 MTAB_PROGRAM_DOCUMENTATION.
271 REFRESH:
272 MTAB_PROGRAM_FILE,
273 MTAB_PROGRAM_SOURCE,
274 MTAB_PROGRAM_TEXTS,
275 MTAB_PROGRAM_DOCUMENTATION.
276 *-- Get the report 源代码
277 READ REPORT MTAB_PROGRAM_TRDIR-NAME INTO MTAB_PROGRAM_SOURCE.
278 *-- Get the text for the report 文本元素S,文本符号I,清单标题T/H,程序Title=R
279 READ TEXTPOOL MTAB_PROGRAM_TRDIR-NAME INTO MTAB_PROGRAM_TEXTS.
280 *-- Get the documentation for the report 文档索引
281 CLEAR DOKIL.
282 SELECT * UP TO 1 ROWS FROM DOKIL
283 WHERE ID = 'RE'
284 AND OBJECT = MTAB_PROGRAM_TRDIR-NAME
285 AND LANGU = SY-LANGU
286 AND TYP = 'E'
287 ORDER BY VERSION DESCENDING.
288 ENDSELECT.
289 *-- Documentation exists for this object 文档
290 IF SY-SUBRC = 0.
291 CALL FUNCTION 'DOCU_READ'
292 EXPORTING
293 ID = DOKIL-ID
294 LANGU = DOKIL-LANGU
295 OBJECT = DOKIL-OBJECT
296 TYP = DOKIL-TYP
297 VERSION = DOKIL-VERSION
298 IMPORTING
299 HEAD = MSTR_THEAD
300 TABLES
301 LINE = MTAB_PROGRAM_DOCUMENTATION
302 EXCEPTIONS
303 OTHERS = 1.
304 ENDIF.
305 *-- Put the report code and texts into a single file
306 *-- Put the identifier line in so that the start of the TRDIR line
307 *-- is marked
308 CONCATENATE MC_TRDIR_IDENTIFIER
309 MTAB_PROGRAM_TRDIR-NAME
310 INTO MTAB_PROGRAM_FILE-LINE.
311 APPEND MTAB_PROGRAM_FILE.
312 *-- Add the TRDIR line
313 MTAB_PROGRAM_FILE-LINE = MTAB_PROGRAM_TRDIR.
314 APPEND MTAB_PROGRAM_FILE.
315 *-- Put the identifier line in so that the start of the report code
316 *-- is marked
317 CONCATENATE MC_REPORT_IDENTIFIER
318 MTAB_PROGRAM_TRDIR-NAME
319 INTO MTAB_PROGRAM_FILE-LINE.
320 APPEND MTAB_PROGRAM_FILE.
321 *-- Add the report code 所有源代码行
322 LOOP AT MTAB_PROGRAM_SOURCE.
323 MTAB_PROGRAM_FILE = MTAB_PROGRAM_SOURCE.
324 APPEND MTAB_PROGRAM_FILE.
325 ENDLOOP.
326 *-- Put the identifier line in so that the start of the report text
327 *-- is marked
328 CONCATENATE MC_TEXT_IDENTIFIER
329 MTAB_PROGRAM_TRDIR-NAME
330 INTO MTAB_PROGRAM_FILE-LINE.
331 APPEND MTAB_PROGRAM_FILE.
332 *-- Add the report texts 文本元素行
333 data:vl_length(10) type c.
334 LOOP AT MTAB_PROGRAM_TEXTS.
335 *{MODIFY BY ZHUMK
336 * vl_length = MTAB_PROGRAM_TEXTS-LENGTH.
337 vl_length = STRLEN( MTAB_PROGRAM_TEXTS-ENTRY ).
338 Concatenate MTAB_PROGRAM_TEXTS-ID
339 MTAB_PROGRAM_TEXTS-KEY
340 MTAB_PROGRAM_TEXTS-ENTRY
341 vl_length
342 into MTAB_PROGRAM_FILE-LINE.
343 * MTAB_PROGRAM_FILE = MTAB_PROGRAM_TEXTS.
344 *}
345 APPEND MTAB_PROGRAM_FILE.
346 ENDLOOP.
347 *-- Put the identifier line in so that the start of the THEAD record
348 *-- is marked
349 CONCATENATE MC_THEAD_IDENTIFIER
350 MTAB_PROGRAM_TRDIR-NAME
351 INTO MTAB_PROGRAM_FILE-LINE.
352 APPEND MTAB_PROGRAM_FILE.
353 MTAB_PROGRAM_FILE = MSTR_THEAD.
354 APPEND MTAB_PROGRAM_FILE.
355 *-- Put the identifier line in so that the start of the report
356 *-- documentation is marked
357 CONCATENATE MC_DOC_IDENTIFIER
358 MTAB_PROGRAM_TRDIR-NAME
359 INTO MTAB_PROGRAM_FILE-LINE.
360 APPEND MTAB_PROGRAM_FILE.
361 *-- Add the report documentation
362 LOOP AT MTAB_PROGRAM_DOCUMENTATION.
363 MTAB_PROGRAM_FILE = MTAB_PROGRAM_DOCUMENTATION.
364 APPEND MTAB_PROGRAM_FILE.
365 ENDLOOP.
366 *-- Make the fully pathed filename that report will be saved to
367 CONCATENATE P_PATH
368 MTAB_PROGRAM_TRDIR-NAME
369 '.txt'
370 INTO LC_FULL_FILENAME.
371 PERFORM SAVE_TABLE_TO_FILE TABLES MTAB_PROGRAM_FILE
372 USING LC_FULL_FILENAME.
373 *-- Write out message with Program Name/Description
374 READ TABLE MTAB_PROGRAM_TEXTS WITH KEY ID = 'R'.
375 IF SY-SUBRC = 0.
376 MTAB_DIRECTORY-NAME = MTAB_PROGRAM_TRDIR-NAME.
377 MTAB_DIRECTORY-DESC = MTAB_PROGRAM_TEXTS-ENTRY.
378 MTAB_DIRECTORY-SAVENAME = LC_FULL_FILENAME.
379 APPEND MTAB_DIRECTORY.
380 WRITE: / MTAB_PROGRAM_TRDIR-NAME,
381 MTAB_PROGRAM_TEXTS-ENTRY(65) COLOR COL_HEADING.
382 ELSE.
383 MTAB_DIRECTORY-NAME = MTAB_PROGRAM_TRDIR-NAME.
384 MTAB_DIRECTORY-DESC = 'No description available'.
385 MTAB_DIRECTORY-SAVENAME = LC_FULL_FILENAME.
386 APPEND MTAB_DIRECTORY.
387 WRITE: / MTAB_PROGRAM_TRDIR-NAME.
388 ENDIF.
389 ENDLOOP.
390 ENDFORM. " BUILD_PROGRAM_DIRECTORY
391 *---------------------------------------------------------------------*
392 * FORM SAVE_TABLE_TO_FILE *
393 *---------------------------------------------------------------------*
394 * .. *
395 *---------------------------------------------------------------------*
396 * --> FTAB_TABLE *
397 * --> F_FILENAME *
398 *---------------------------------------------------------------------*
399 FORM SAVE_TABLE_TO_FILE TABLES FTAB_TABLE
400 USING F_FILENAME.
401 IF RB_DOS = 'X'. " Save file to presentation server
402 CALL FUNCTION 'WS_DOWNLOAD'
403 EXPORTING
404 FILENAME = F_FILENAME
405 FILETYPE = 'ASC'
406 TABLES
407 DATA_TAB = FTAB_TABLE
408 EXCEPTIONS
409 OTHERS = 4.
410 IF SY-SUBRC NE 0.
411 WRITE: / 'Error opening dataset' COLOR COL_NEGATIVE,
412 F_FILENAME COLOR COL_NEGATIVE.
413 ENDIF.
414 ELSE. " Save file to application server
415 OPEN DATASET F_FILENAME FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
416 IF SY-SUBRC = 0.
417 LOOP AT FTAB_TABLE.
418 TRANSFER FTAB_TABLE TO F_FILENAME.
419 IF SY-SUBRC NE 0.
420 WRITE: / 'Error writing record to file;' COLOR COL_NEGATIVE,
421 F_FILENAME COLOR COL_NEGATIVE.
422 ENDIF.
423 ENDLOOP.
424 ELSE.
425 WRITE: / 'Error opening dataset' COLOR COL_NEGATIVE,
426 F_FILENAME COLOR COL_NEGATIVE.
427 ENDIF.
428 ENDIF. " End RB_DOS
429 ENDFORM. " SAVE_PROGRAM
430 *---------------------------------------------------------------------*
431 * FORM READ_REPORT_FROM_DISK *
432 *---------------------------------------------------------------------*
433 * Read report into internal table. Can read from local or *
434 * remote computer *
435 *---------------------------------------------------------------------*
436 FORM READ_REPORT_FROM_DISK TABLES FTAB_TABLE
437 USING F_FILENAME.
438 DATA:
439 LC_MESSAGE(128) TYPE C.
440 CLEAR FTAB_TABLE.
441 REFRESH FTAB_TABLE.
442 IF RB_DOS = 'X'.
443 TRANSLATE F_FILENAME USING '/\'. " correct slash for Dos PC file
444 CALL FUNCTION 'WS_UPLOAD'
445 EXPORTING
446 FILENAME = F_FILENAME
447 FILETYPE = 'ASC'
448 TABLES
449 DATA_TAB = FTAB_TABLE
450 EXCEPTIONS
451 CONVERSION_ERROR = 1
452 FILE_OPEN_ERROR = 2
453 FILE_READ_ERROR = 3
454 INVALID_TABLE_WIDTH = 4
455 INVALID_TYPE = 5
456 NO_BATCH = 6
457 UNKNOWN_ERROR = 7
458 OTHERS = 8.
459 IF SY-SUBRC >< 0.
460 WRITE: / 'Error reading file from local PC' COLOR COL_NEGATIVE.
461 ENDIF.
462 ELSEIF RB_UNIX = 'X'.
463 TRANSLATE F_FILENAME USING '\/'. " correct slash for unix
464 OPEN DATASET F_FILENAME FOR INPUT MESSAGE LC_MESSAGE IN TEXT MODE ENCODING UTF-8.
465 IF SY-SUBRC = 0.
466 DO.
467 READ DATASET F_FILENAME INTO FTAB_TABLE.
468 IF SY-SUBRC = 0.
469 APPEND FTAB_TABLE.
470 ELSE.
471 EXIT.
472 ENDIF.
473 ENDDO.
474 CLOSE DATASET F_FILENAME.
475 ELSE.
476 WRITE: / 'Error reading file from remote computer'
477 COLOR COL_NEGATIVE,
478 / LC_MESSAGE,
479 / F_FILENAME.
480 SY-SUBRC = 4.
481 ENDIF.
482 ENDIF.
483
484
485 ENDFORM. " READ_REPORT_FROM_DISK
486 *---------------------------------------------------------------------*
487 * FORM SPLIT_INCOMING_FILE *
488 *---------------------------------------------------------------------*
489 * .. *
490 *---------------------------------------------------------------------*
491 * --> FTAB_PROGRAM_FILE *
492 * --> FTAB_PROGRAM_SOURCE *
493 * --> ` *
494 * --> FTAB_PROGRAM_TEXTS *
495 *---------------------------------------------------------------------*
496 FORM SPLIT_INCOMING_FILE TABLES FTAB_PROGRAM_FILE
497 STRUCTURE MTAB_PROGRAM_FILE
498 FTAB_PROGRAM_SOURCE
499 STRUCTURE MTAB_PROGRAM_SOURCE
500 FTAB_PROGRAM_TEXTS
501 STRUCTURE MTAB_PROGRAM_TEXTS
502 FTAB_PROGRAM_DOCUMENTATION
503 STRUCTURE MTAB_PROGRAM_DOCUMENTATION
504 CHANGING FSTR_TRDIR
505 FSTR_THEAD.
506 DATA:
507 LC_DATATYPE(4) TYPE C, " Type of data, REPO, TEXP, RDIR
508 LC_PROGRAM_FILE LIKE MTAB_PROGRAM_FILE.
509 LOOP AT FTAB_PROGRAM_FILE.
510 LC_PROGRAM_FILE = FTAB_PROGRAM_FILE.
511 CASE LC_PROGRAM_FILE(9).
512 WHEN MC_TRDIR_IDENTIFIER.
513 LC_DATATYPE = MC_TRDIR_SHORT.
514 WHEN MC_REPORT_IDENTIFIER.
515 LC_DATATYPE = MC_REPORT_SHORT.
516 WHEN MC_TEXT_IDENTIFIER.
517 LC_DATATYPE = MC_TEXT_SHORT.
518 WHEN MC_DOC_IDENTIFIER.
519 LC_DATATYPE = MC_DOC_SHORT.
520 WHEN MC_THEAD_IDENTIFIER.
521 LC_DATATYPE = MC_THEAD_SHORT.
522 WHEN OTHERS. " Actual contents of report, trdir, or text
523 CASE LC_DATATYPE.
524 WHEN MC_TRDIR_SHORT.
525 FSTR_TRDIR = FTAB_PROGRAM_FILE.
526 WHEN MC_REPORT_SHORT.
527 FTAB_PROGRAM_SOURCE = FTAB_PROGRAM_FILE.
528 APPEND FTAB_PROGRAM_SOURCE.
529 WHEN MC_TEXT_SHORT.
530 *{modify by zhumk
531 * FTAB_PROGRAM_TEXTS = FTAB_PROGRAM_FILE.
532 data:vl_length type i,
533 vl_pos type i.
534
535 clear FTAB_PROGRAM_TEXTS.
536 vl_length = STRLEN( FTAB_PROGRAM_FILE-line ).
537 FTAB_PROGRAM_TEXTS-ID = FTAB_PROGRAM_FILE+0(1).
538 * length
539 vl_pos = vl_length - 9.
540 FTAB_PROGRAM_TEXTS-LENGTH = FTAB_PROGRAM_FILE+vl_pos(9).
541 * key
542 vl_pos = vl_length - 9 - FTAB_PROGRAM_TEXTS-LENGTH - 1.
543 if vl_pos > 0.
544 FTAB_PROGRAM_TEXTS-KEY = FTAB_PROGRAM_FILE+1(vl_pos).
545 endif.
546 * entry
547 vl_pos = vl_length - 9 - FTAB_PROGRAM_TEXTS-LENGTH.
548 FTAB_PROGRAM_TEXTS-ENTRY = FTAB_PROGRAM_FILE+vl_pos(FTAB_PROGRAM_TEXTS-LENGTH).
549 * FTAB_PROGRAM_TEXTS = FTAB_PROGRAM_FILE.
550 *}
551 APPEND FTAB_PROGRAM_TEXTS.
552 WHEN MC_THEAD_SHORT.
553 FSTR_THEAD = FTAB_PROGRAM_FILE.
554 WHEN MC_DOC_SHORT.
555 FTAB_PROGRAM_DOCUMENTATION = FTAB_PROGRAM_FILE.
556 APPEND FTAB_PROGRAM_DOCUMENTATION.
557 ENDCASE.
558 ENDCASE.
559 ENDLOOP.
560 ENDFORM. " SPLIT_INCOMING_FILE
561 *---------------------------------------------------------------------*
562 * FORM INSERT_NEW_REPORT*
563 *---------------------------------------------------------------------*
564 * .. *
565 *---------------------------------------------------------------------*
566 * --> FTAB_PROGRAM_SOURCE *
567 * --> FTAB_PROGRAM_TEXTS *
568 * --> F_TRDIR *
569 *---------------------------------------------------------------------*
570 FORM INSERT_NEW_REPORT TABLES FTAB_PROGRAM_SOURCE
571 STRUCTURE MTAB_PROGRAM_SOURCE
572 FTAB_PROGRAM_TEXTS
573 STRUCTURE MTAB_PROGRAM_TEXTS
574 FTAB_PROGRAM_DOCUMENTATION
575 STRUCTURE MTAB_PROGRAM_DOCUMENTATION
576 USING FSTR_TRDIR LIKE TRDIR
577 FSTR_THEAD LIKE MSTR_THEAD.
578 DATA:
579 LC_OBJ_NAME LIKE E071-OBJ_NAME,
580 LC_LINE2(40) TYPE C,
581 LC_ANSWER(1) TYPE C.
582 *-- read trdir to see if the report already exists, if it does, prompt
583 *-- user to overwrite or abort.
584 SELECT SINGLE * FROM TRDIR WHERE NAME = FSTR_TRDIR-NAME.
585 IF SY-SUBRC = 0. " Already exists
586 CONCATENATE 'want to overwrite report'
587 FSTR_TRDIR-NAME
588 INTO LC_LINE2 SEPARATED BY SPACE.
589 CONCATENATE LC_LINE2
590 '?'
591 INTO LC_LINE2.
592 CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
593 EXPORTING
594 DEFAULTOPTION = 'N'
595 TEXTLINE1 = 'The selected report already exists, do you'
596 TEXTLINE2 = LC_LINE2
597 TITEL = 'Report already exists'
598 CANCEL_DISPLAY = SPACE
599 IMPORTING
600 ANSWER = LC_ANSWER
601 EXCEPTIONS
602 OTHERS = 1.
603 ELSE.
604 LC_ANSWER = 'J'.
605 ENDIF.
606 IF LC_ANSWER = 'J'.
607 *-- Create the TADIR entry. (TRDIR entry created by INSERT REPORT)
608 LC_OBJ_NAME = TRDIR-NAME.
609 CALL FUNCTION 'TR_TADIR_POPUP_ENTRY_E071'
610 EXPORTING
611 WI_E071_PGMID = 'R3TR'
612 WI_E071_OBJECT = 'PROG'
613 WI_E071_OBJ_NAME = LC_OBJ_NAME
614 WI_TADIR_DEVCLASS = '$TMP'
615 EXCEPTIONS
616 EXIT = 3
617 OTHERS = 4.
618 IF SY-SUBRC = 0.
619 *-- Create Report
620 INSERT REPORT FSTR_TRDIR-NAME FROM FTAB_PROGRAM_SOURCE.
621 *-- Create Texts
622 INSERT TEXTPOOL FSTR_TRDIR-NAME FROM FTAB_PROGRAM_TEXTS
623 LANGUAGE SY-LANGU.
624 *-- Save Documentation
625 CALL FUNCTION 'DOCU_UPDATE'
626 EXPORTING
627 HEAD = FSTR_THEAD
628 STATE = 'A'
629 TYP = 'E'
630 VERSION = '1'
631 TABLES
632 LINE = FTAB_PROGRAM_DOCUMENTATION
633 EXCEPTIONS
634 OTHERS = 1.
635 ELSE.
636 WRITE: / 'Error updating the TADIR entry' COLOR COL_NEGATIVE,
637 'Program' COLOR COL_NEGATIVE INTENSIFIED OFF,
638 FSTR_TRDIR-NAME, 'was not loaded into SAP.'
639 COLOR COL_NEGATIVE INTENSIFIED OFF.
640 ENDIF.
641 ELSE.
642 WRITE: / FSTR_TRDIR-NAME COLOR COL_NEGATIVE,
643 'was not uploaded into SAP. Action cancelled by user'
644 COLOR COL_NEGATIVE INTENSIFIED OFF.
645 ENDIF.
646 ENDFORM. " INSERT_NEW_REPORT
647 *---------------------------------------------------------------------*
648 * FORM GET_NAME *
649 *---------------------------------------------------------------------*
650 * .. *
651 *---------------------------------------------------------------------*
652 * --> VALUE(F_FIELD) *
653 * --> F_NAME *
654 *---------------------------------------------------------------------*
655 FORM GET_NAME USING VALUE(F_FIELD)
656 CHANGING F_NAME.
657 DATA: LTAB_FIELDS LIKE DYNPREAD OCCURS 0 WITH HEADER LINE,
658 LC_PROG LIKE D020S-PROG,
659 LC_DNUM LIKE D020S-DNUM.
660 TRANSLATE F_FIELD TO UPPER CASE.
661 refresh ltab_fields.
662 LTAB_FIELDS-FIELDNAME = F_FIELD.
663 append ltab_fields.
664 LC_PROG = SY-REPID .
665 LC_DNUM = SY-DYNNR .
666 CALL FUNCTION 'DYNP_VALUES_READ'
667 EXPORTING
668 DYNAME = LC_PROG
669 DYNUMB = LC_DNUM
670 TABLES
671 dynpfields = ltab_fields
672 EXCEPTIONS
673 OTHERS = 01.
674 read table ltab_fields index 1.
675 IF SY-SUBRC EQ 0.
676 F_NAME = LTAB_FIELDS-FIELDVALUE.
677 refresh ltab_fields.
678 ENDIF.
679 CALL FUNCTION 'F4_USER'
680 EXPORTING
681 OBJECT = F_NAME
682 IMPORTING
683 RESULT = F_NAME.
684 ENDFORM. " GET_NAME
685
686 *Program Texts
687 *DIR File Download Options (File Selection)
688 *FIL File Options
689 *FNA Enter filename below (under File Options)
690 *H01 Prog Name
691 *H03 Program Description
692 *SNG Upload a single file
693 *UDL Upload to SAP/Download from SAP
694 *UPL File Upload Options
695 *R Backup/Restore program source code with texts
696 *P_PATH Path to save programs to
697 *RB_DOS Files on local computer
698 *RB_DOWN Download Programs
699 *RB_FILE Upload a single file
700 *RB_LIST Select program(s) from a list
701 *RB_UNIX Files on remote computer
702 *RB_UP Upload Programs to SAP
703 *S_CDAT Date Created
704 *S_CNAM Created by UserID
705 *S_NAME Program Name
706 *S_SUBC Program Type
707 *S_UDAT Date Changed
708 *S_UNAM Last Changed by UserID
2 * Report: ZKBPROGS *
3 *----------------------------------------------------------------------*
4 * Function : Up/Download ABAP reports complete with texts *
5 *----------------------------------------------------------------------*
6 * Change Log : *
7 * July 5, 1999 *
8 * - Combined existing programs that did the upload and download into*
9 * - one program. *
10 * - Changed format that the reports are saved in to be compatible *
11 * with Wolfgang Morgenthaler's upload/download program(YSTRASN00 *
12 * at http://www.antarcon.de/). Major differences between this program and*
13 * Wolfgang's are:
14 * - this program does not update TRDIR with the *
15 * TRDIR entries that are in the program uploaded. Instead, *
16 * current users stats are used. *
17 * - this program allows selection of reports from a list or *
18 * a single report can be tuped in and uploaded *
19 * - this program also updates TADIR so that a development class*
20 * is assigned to the program *
21 * - this program checks to see if the program already has a *
22 * TRDIR entry, and if it does, warns the user *
23 * - this program will save/restore the program documenation too*
24 * *
25 * Jan 09, 2006 *
26 * - TextPool中数据导出对Unicode支持问题,致使原来的代码不能编译通过,
27 * 修改以后运行正常;上载部分同样修改。
28 * *
29 * *
30 *----------------------------------------------------------------------*
31 REPORT ZKBPROGS
32 NO STANDARD PAGE HEADING
33 LINE-SIZE 255.
34 *----------------------------------------------------------------------*
35 * Declare Database Objects *
36 *----------------------------------------------------------------------*
37 tables:
38 DOKIL, "表DOKH文档的索引
39 DOKTL, "文档 - 文本行
40 TADIR, "资源库对象的目录
41 TRDIR. "系统表 TRDIR
42 *----------------------------------------------------------------------*
43 * Constants*
44 CONSTANTS:
45 MC_TRDIR_IDENTIFIER(72) TYPE C VALUE '%&%& RDIR',
46 MC_REPORT_IDENTIFIER(72) TYPE C VALUE '%&%& REPO',
47 MC_TEXT_IDENTIFIER(72) TYPE C VALUE '%&%& TEXP',
48 MC_THEAD_IDENTIFIER(72) TYPE C VALUE '%&%& HEAD',
49 MC_DOC_IDENTIFIER(72) TYPE C VALUE '%&%& DOKL',
50 MC_TRDIR_SHORT(4) TYPE C VALUE 'RDIR',
51 MC_REPORT_SHORT(4) TYPE C VALUE 'REPO',
52 MC_TEXT_SHORT(4) TYPE C VALUE 'TEXP',
53 MC_THEAD_SHORT(4) TYPE C VALUE 'HEAD',
54 MC_DOC_SHORT(4) TYPE C VALUE 'DOKP'.
55 *----------------------------------------------------------------------*
56 *----------------------------------------------------------------------*
57 * Declare Module level data structures *
58 *----------------------------------------------------------------------*
59 DATA: BEGIN OF MTAB_PROGRAM_SOURCE OCCURS 0,
60 LINE(255) TYPE C,
61 END OF MTAB_PROGRAM_SOURCE.
62 DATA: MTAB_PROGRAM_TRDIR LIKE TRDIR OCCURS 0 WITH HEADER LINE.
63 DATA: MTAB_PROGRAM_TEXTS LIKE TEXTPOOL OCCURS 0 WITH HEADER LINE.
64 DATA: MSTR_THEAD LIKE THEAD.
65 DATA: BEGIN OF MTAB_PROGRAM_FILE OCCURS 0,
66 LINE(275) TYPE C,
67 END OF MTAB_PROGRAM_FILE.
68 DATA: BEGIN OF MTAB_DIRECTORY OCCURS 0,
69 NAME LIKE TRDIR-NAME,
70 DESC(72) TYPE C,
71 SAVENAME LIKE RLGRAP-FILENAME,
72 END OF MTAB_DIRECTORY.
73 DATA: BEGIN OF MTAB_PROGRAM_DOCUMENTATION OCCURS 0,
74 LINE(255) TYPE C,
75 END OF MTAB_PROGRAM_DOCUMENTATION.
76 *----------------------------------------------------------------------*
77 * Selection Screen *
78 *----------------------------------------------------------------------*
79 *-- Options for upload/download of programs
80 SELECTION-SCREEN BEGIN OF BLOCK FRM_OPTIONS WITH FRAME TITLE TEXT-UDL.
81 PARAMETERS:
82 RB_DOWN RADIOBUTTON GROUP UDL DEFAULT 'X'. " Download reports
83 SELECTION-SCREEN BEGIN OF BLOCK FRM_TRDIR WITH FRAME TITLE TEXT-DIR.
84 SELECT-OPTIONS:
85 S_NAME FOR TRDIR-NAME, " Program Name
86 S_SUBC FOR TRDIR-SUBC " Program Type
87 DEFAULT 'F' OPTION EQ SIGN E," Exclude Functions by default
88 S_CNAM FOR TRDIR-CNAM " Created by
89 DEFAULT SY-UNAME,
90 S_UNAM FOR TRDIR-UNAM, " Last Changed by
91 S_CDAT FOR TRDIR-CDAT, " Creation date
92 S_UDAT FOR TRDIR-UDAT. " Last update date
93 SELECTION-SCREEN END OF BLOCK FRM_TRDIR.
94 *-- Options for uploading programs
95 PARAMETERS:
96 RB_UP RADIOBUTTON GROUP UDL. " Upload reports
97 SELECTION-SCREEN BEGIN OF BLOCK FRM_UPLOAD WITH FRAME TITLE TEXT-UPL.
98 SELECTION-SCREEN BEGIN OF LINE.
99 SELECTION-SCREEN COMMENT 1(29) TEXT-SNG.
100 PARAMETERS:
101 RB_FILE RADIOBUTTON GROUP HOW DEFAULT 'X'.
102 SELECTION-SCREEN COMMENT 33(42) TEXT-FNA.
103 SELECTION-SCREEN END OF LINE.
104 PARAMETERS:
105 RB_LIST RADIOBUTTON GROUP HOW.
106 SELECTION-SCREEN END OF BLOCK FRM_UPLOAD.
107 SELECTION-SCREEN END OF BLOCK FRM_OPTIONS.
108 *-- Options for up/downloading programs
109 SELECTION-SCREEN BEGIN OF BLOCK FRM_FILEN WITH FRAME TITLE TEXT-FIL.
110 PARAMETERS:
111 RB_DOS RADIOBUTTON GROUP FIL DEFAULT 'X', " Save to local
112 RB_UNIX RADIOBUTTON GROUP FIL, " Save to UNIX
113 P_PATH LIKE RLGRAP-FILENAME " Path to save files to
114 DEFAULT 'c:\temp\'.
115 SELECTION-SCREEN END OF BLOCK FRM_FILEN.
116
117 AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_NAME-LOW.
118 CALL FUNCTION 'F4_PROGRAM'
119 EXPORTING
120 OBJECT = S_NAME-LOW
121 SUPPRESS_SELECTION = 'X'
122 IMPORTING
123 RESULT = S_NAME-LOW
124 EXCEPTIONS
125 OTHERS = 1.
126
127 AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_NAME-HIGH.
128 CALL FUNCTION 'F4_PROGRAM'
129 EXPORTING
130 OBJECT = S_NAME-HIGH
131 SUPPRESS_SELECTION = 'X'
132 IMPORTING
133 RESULT = S_NAME-HIGH
134 EXCEPTIONS
135 OTHERS = 1.
136
137 AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_UNAM-LOW.
138 PERFORM GET_NAME USING 'S_UNAM-LOW'
139 CHANGING S_UNAM-LOW.
140
141 AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_UNAM-HIGH.
142 PERFORM GET_NAME USING 'S_UNAM-HIGH'
143 CHANGING S_UNAM-HIGH.
144
145 AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_CNAM-LOW.
146 PERFORM GET_NAME USING 'S_CNAM-LOW'
147 CHANGING S_CNAM-LOW.
148
149 AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_CNAM-HIGH.
150 PERFORM GET_NAME USING 'S_CNAM-HIGH'
151 CHANGING S_CNAM-HIGH.
152
153 TOP-OF-PAGE.
154 IF RB_LIST = 'X'.
155 FORMAT COLOR COL_HEADING.
156 NEW-LINE.
157 WRITE: AT 3 TEXT-H01,
158 AT 15 TEXT-H03.
159 FORMAT COLOR OFF.
160 ENDIF.
161
162 AT LINE-SELECTION.
163 CHECK RB_LIST = 'X'. " only do in list mode
164 READ LINE SY-CUROW FIELD VALUE MTAB_DIRECTORY-SAVENAME.
165 *-- Read file into an internal table
166 PERFORM READ_REPORT_FROM_DISK TABLES MTAB_PROGRAM_FILE
167 USING MTAB_DIRECTORY-SAVENAME.
168 *-- Split table into TADIR entry, report lines, and report text
169 PERFORM SPLIT_INCOMING_FILE TABLES MTAB_PROGRAM_FILE
170 MTAB_PROGRAM_SOURCE
171 MTAB_PROGRAM_TEXTS
172 MTAB_PROGRAM_DOCUMENTATION
173 CHANGING TRDIR
174 MSTR_THEAD.
175 *-- Save all of the data
176 PERFORM INSERT_NEW_REPORT TABLES MTAB_PROGRAM_SOURCE
177 MTAB_PROGRAM_TEXTS
178 MTAB_PROGRAM_DOCUMENTATION
179 USING TRDIR
180 MSTR_THEAD.
181 *----------------------------------------------------------------------*
182 * Start of processing *
183 *----------------------------------------------------------------------*
184 START-OF-SELECTION.
185 FORMAT COLOR COL_NORMAL.
186 IF RB_DOWN = 'X'.
187 PERFORM DOWNLOAD_REPORTS.
188 ELSEIF RB_UP = 'X'.
189 PERFORM UPLOAD_REPORTS.
190 ENDIF.
191
192 END-OF-SELECTION.
193 IF RB_DOWN = 'X'.
194 CONCATENATE P_PATH
195 'directory.txt'
196 INTO P_PATH.
197 PERFORM SAVE_TABLE_TO_FILE TABLES MTAB_DIRECTORY
198 USING P_PATH.
199 ENDIF.
200 *---------------------------------------------------------------------*
201 * FORM UPLOAD_REPORTS *
202 *---------------------------------------------------------------------*
203 FORM UPLOAD_REPORTS.
204 *-- Can upload a reports entered in selection criteria or
205 *-- select from a list. List can be from index.txt in same directory
206 *-- (created by the download) or by reading the first line of each file
207 *-- in the directory.
208 IF RB_FILE = 'X'. " Upload single program from a file
209 *-- Read file into an internal table
210 PERFORM READ_REPORT_FROM_DISK TABLES MTAB_PROGRAM_FILE
211 USING P_PATH.
212 *-- Split table into TADIR entry, report lines, and report text
213 PERFORM SPLIT_INCOMING_FILE TABLES MTAB_PROGRAM_FILE
214 MTAB_PROGRAM_SOURCE
215 MTAB_PROGRAM_TEXTS
216 MTAB_PROGRAM_DOCUMENTATION
217 CHANGING TRDIR
218 MSTR_THEAD.
219 *-- Save all of the data
220 PERFORM INSERT_NEW_REPORT TABLES MTAB_PROGRAM_SOURCE
221 MTAB_PROGRAM_TEXTS
222 MTAB_PROGRAM_DOCUMENTATION
223 USING TRDIR
224 MSTR_THEAD.
225 ELSEIF RB_LIST = 'X'. " Show list for user to choose from
226 *-- get list of report names/descriptions from directory text
227 CONCATENATE P_PATH
228 'directory.txt'
229 INTO P_PATH.
230 PERFORM READ_REPORT_FROM_DISK TABLES MTAB_DIRECTORY
231 USING P_PATH.
232 SORT MTAB_DIRECTORY.
233 *-- Write out list of report names/descriptions
234 LOOP AT MTAB_DIRECTORY.
235 WRITE:
236 / MTAB_DIRECTORY-NAME UNDER TEXT-H01,
237 MTAB_DIRECTORY-DESC UNDER TEXT-H03,
238 MTAB_DIRECTORY-SAVENAME.
239 ENDLOOP.
240 *-- Process user selections for reports to upload.
241 ENDIF.
242 ENDFORM. " upload_reports
243 *---------------------------------------------------------------------*
244 * FORM DOWNLOAD_REPORTS *
245 *---------------------------------------------------------------------*
246 * From the user selections, get all programs that meet the *
247 * criteria, and save them in ftab_program_directory. *
248 * Also save the report to disk. *
249 *---------------------------------------------------------------------*
250 FORM DOWNLOAD_REPORTS.
251 DATA:
252 LC_FULL_FILENAME LIKE RLGRAP-FILENAME.
253 *-- The table is put into an internal table because the program will
254 *-- abend if multiple transfers to a dataset occur within a SELECT/
255 *-- ENDSELCT (tested on 3.1H)
256 SELECT * FROM TRDIR
257 INTO TABLE MTAB_PROGRAM_TRDIR
258 WHERE NAME IN S_NAME
259 AND SUBC IN S_SUBC
260 AND CNAM IN S_CNAM
261 AND UNAM IN S_UNAM
262 AND CDAT IN S_CDAT
263 AND UDAT IN S_UDAT.
264 LOOP AT MTAB_PROGRAM_TRDIR.
265 *-- Clear out text and source code tables
266 CLEAR:
267 MTAB_PROGRAM_FILE,
268 MTAB_PROGRAM_SOURCE,
269 MTAB_PROGRAM_TEXTS,
270 MTAB_PROGRAM_DOCUMENTATION.
271 REFRESH:
272 MTAB_PROGRAM_FILE,
273 MTAB_PROGRAM_SOURCE,
274 MTAB_PROGRAM_TEXTS,
275 MTAB_PROGRAM_DOCUMENTATION.
276 *-- Get the report 源代码
277 READ REPORT MTAB_PROGRAM_TRDIR-NAME INTO MTAB_PROGRAM_SOURCE.
278 *-- Get the text for the report 文本元素S,文本符号I,清单标题T/H,程序Title=R
279 READ TEXTPOOL MTAB_PROGRAM_TRDIR-NAME INTO MTAB_PROGRAM_TEXTS.
280 *-- Get the documentation for the report 文档索引
281 CLEAR DOKIL.
282 SELECT * UP TO 1 ROWS FROM DOKIL
283 WHERE ID = 'RE'
284 AND OBJECT = MTAB_PROGRAM_TRDIR-NAME
285 AND LANGU = SY-LANGU
286 AND TYP = 'E'
287 ORDER BY VERSION DESCENDING.
288 ENDSELECT.
289 *-- Documentation exists for this object 文档
290 IF SY-SUBRC = 0.
291 CALL FUNCTION 'DOCU_READ'
292 EXPORTING
293 ID = DOKIL-ID
294 LANGU = DOKIL-LANGU
295 OBJECT = DOKIL-OBJECT
296 TYP = DOKIL-TYP
297 VERSION = DOKIL-VERSION
298 IMPORTING
299 HEAD = MSTR_THEAD
300 TABLES
301 LINE = MTAB_PROGRAM_DOCUMENTATION
302 EXCEPTIONS
303 OTHERS = 1.
304 ENDIF.
305 *-- Put the report code and texts into a single file
306 *-- Put the identifier line in so that the start of the TRDIR line
307 *-- is marked
308 CONCATENATE MC_TRDIR_IDENTIFIER
309 MTAB_PROGRAM_TRDIR-NAME
310 INTO MTAB_PROGRAM_FILE-LINE.
311 APPEND MTAB_PROGRAM_FILE.
312 *-- Add the TRDIR line
313 MTAB_PROGRAM_FILE-LINE = MTAB_PROGRAM_TRDIR.
314 APPEND MTAB_PROGRAM_FILE.
315 *-- Put the identifier line in so that the start of the report code
316 *-- is marked
317 CONCATENATE MC_REPORT_IDENTIFIER
318 MTAB_PROGRAM_TRDIR-NAME
319 INTO MTAB_PROGRAM_FILE-LINE.
320 APPEND MTAB_PROGRAM_FILE.
321 *-- Add the report code 所有源代码行
322 LOOP AT MTAB_PROGRAM_SOURCE.
323 MTAB_PROGRAM_FILE = MTAB_PROGRAM_SOURCE.
324 APPEND MTAB_PROGRAM_FILE.
325 ENDLOOP.
326 *-- Put the identifier line in so that the start of the report text
327 *-- is marked
328 CONCATENATE MC_TEXT_IDENTIFIER
329 MTAB_PROGRAM_TRDIR-NAME
330 INTO MTAB_PROGRAM_FILE-LINE.
331 APPEND MTAB_PROGRAM_FILE.
332 *-- Add the report texts 文本元素行
333 data:vl_length(10) type c.
334 LOOP AT MTAB_PROGRAM_TEXTS.
335 *{MODIFY BY ZHUMK
336 * vl_length = MTAB_PROGRAM_TEXTS-LENGTH.
337 vl_length = STRLEN( MTAB_PROGRAM_TEXTS-ENTRY ).
338 Concatenate MTAB_PROGRAM_TEXTS-ID
339 MTAB_PROGRAM_TEXTS-KEY
340 MTAB_PROGRAM_TEXTS-ENTRY
341 vl_length
342 into MTAB_PROGRAM_FILE-LINE.
343 * MTAB_PROGRAM_FILE = MTAB_PROGRAM_TEXTS.
344 *}
345 APPEND MTAB_PROGRAM_FILE.
346 ENDLOOP.
347 *-- Put the identifier line in so that the start of the THEAD record
348 *-- is marked
349 CONCATENATE MC_THEAD_IDENTIFIER
350 MTAB_PROGRAM_TRDIR-NAME
351 INTO MTAB_PROGRAM_FILE-LINE.
352 APPEND MTAB_PROGRAM_FILE.
353 MTAB_PROGRAM_FILE = MSTR_THEAD.
354 APPEND MTAB_PROGRAM_FILE.
355 *-- Put the identifier line in so that the start of the report
356 *-- documentation is marked
357 CONCATENATE MC_DOC_IDENTIFIER
358 MTAB_PROGRAM_TRDIR-NAME
359 INTO MTAB_PROGRAM_FILE-LINE.
360 APPEND MTAB_PROGRAM_FILE.
361 *-- Add the report documentation
362 LOOP AT MTAB_PROGRAM_DOCUMENTATION.
363 MTAB_PROGRAM_FILE = MTAB_PROGRAM_DOCUMENTATION.
364 APPEND MTAB_PROGRAM_FILE.
365 ENDLOOP.
366 *-- Make the fully pathed filename that report will be saved to
367 CONCATENATE P_PATH
368 MTAB_PROGRAM_TRDIR-NAME
369 '.txt'
370 INTO LC_FULL_FILENAME.
371 PERFORM SAVE_TABLE_TO_FILE TABLES MTAB_PROGRAM_FILE
372 USING LC_FULL_FILENAME.
373 *-- Write out message with Program Name/Description
374 READ TABLE MTAB_PROGRAM_TEXTS WITH KEY ID = 'R'.
375 IF SY-SUBRC = 0.
376 MTAB_DIRECTORY-NAME = MTAB_PROGRAM_TRDIR-NAME.
377 MTAB_DIRECTORY-DESC = MTAB_PROGRAM_TEXTS-ENTRY.
378 MTAB_DIRECTORY-SAVENAME = LC_FULL_FILENAME.
379 APPEND MTAB_DIRECTORY.
380 WRITE: / MTAB_PROGRAM_TRDIR-NAME,
381 MTAB_PROGRAM_TEXTS-ENTRY(65) COLOR COL_HEADING.
382 ELSE.
383 MTAB_DIRECTORY-NAME = MTAB_PROGRAM_TRDIR-NAME.
384 MTAB_DIRECTORY-DESC = 'No description available'.
385 MTAB_DIRECTORY-SAVENAME = LC_FULL_FILENAME.
386 APPEND MTAB_DIRECTORY.
387 WRITE: / MTAB_PROGRAM_TRDIR-NAME.
388 ENDIF.
389 ENDLOOP.
390 ENDFORM. " BUILD_PROGRAM_DIRECTORY
391 *---------------------------------------------------------------------*
392 * FORM SAVE_TABLE_TO_FILE *
393 *---------------------------------------------------------------------*
394 * .. *
395 *---------------------------------------------------------------------*
396 * --> FTAB_TABLE *
397 * --> F_FILENAME *
398 *---------------------------------------------------------------------*
399 FORM SAVE_TABLE_TO_FILE TABLES FTAB_TABLE
400 USING F_FILENAME.
401 IF RB_DOS = 'X'. " Save file to presentation server
402 CALL FUNCTION 'WS_DOWNLOAD'
403 EXPORTING
404 FILENAME = F_FILENAME
405 FILETYPE = 'ASC'
406 TABLES
407 DATA_TAB = FTAB_TABLE
408 EXCEPTIONS
409 OTHERS = 4.
410 IF SY-SUBRC NE 0.
411 WRITE: / 'Error opening dataset' COLOR COL_NEGATIVE,
412 F_FILENAME COLOR COL_NEGATIVE.
413 ENDIF.
414 ELSE. " Save file to application server
415 OPEN DATASET F_FILENAME FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
416 IF SY-SUBRC = 0.
417 LOOP AT FTAB_TABLE.
418 TRANSFER FTAB_TABLE TO F_FILENAME.
419 IF SY-SUBRC NE 0.
420 WRITE: / 'Error writing record to file;' COLOR COL_NEGATIVE,
421 F_FILENAME COLOR COL_NEGATIVE.
422 ENDIF.
423 ENDLOOP.
424 ELSE.
425 WRITE: / 'Error opening dataset' COLOR COL_NEGATIVE,
426 F_FILENAME COLOR COL_NEGATIVE.
427 ENDIF.
428 ENDIF. " End RB_DOS
429 ENDFORM. " SAVE_PROGRAM
430 *---------------------------------------------------------------------*
431 * FORM READ_REPORT_FROM_DISK *
432 *---------------------------------------------------------------------*
433 * Read report into internal table. Can read from local or *
434 * remote computer *
435 *---------------------------------------------------------------------*
436 FORM READ_REPORT_FROM_DISK TABLES FTAB_TABLE
437 USING F_FILENAME.
438 DATA:
439 LC_MESSAGE(128) TYPE C.
440 CLEAR FTAB_TABLE.
441 REFRESH FTAB_TABLE.
442 IF RB_DOS = 'X'.
443 TRANSLATE F_FILENAME USING '/\'. " correct slash for Dos PC file
444 CALL FUNCTION 'WS_UPLOAD'
445 EXPORTING
446 FILENAME = F_FILENAME
447 FILETYPE = 'ASC'
448 TABLES
449 DATA_TAB = FTAB_TABLE
450 EXCEPTIONS
451 CONVERSION_ERROR = 1
452 FILE_OPEN_ERROR = 2
453 FILE_READ_ERROR = 3
454 INVALID_TABLE_WIDTH = 4
455 INVALID_TYPE = 5
456 NO_BATCH = 6
457 UNKNOWN_ERROR = 7
458 OTHERS = 8.
459 IF SY-SUBRC >< 0.
460 WRITE: / 'Error reading file from local PC' COLOR COL_NEGATIVE.
461 ENDIF.
462 ELSEIF RB_UNIX = 'X'.
463 TRANSLATE F_FILENAME USING '\/'. " correct slash for unix
464 OPEN DATASET F_FILENAME FOR INPUT MESSAGE LC_MESSAGE IN TEXT MODE ENCODING UTF-8.
465 IF SY-SUBRC = 0.
466 DO.
467 READ DATASET F_FILENAME INTO FTAB_TABLE.
468 IF SY-SUBRC = 0.
469 APPEND FTAB_TABLE.
470 ELSE.
471 EXIT.
472 ENDIF.
473 ENDDO.
474 CLOSE DATASET F_FILENAME.
475 ELSE.
476 WRITE: / 'Error reading file from remote computer'
477 COLOR COL_NEGATIVE,
478 / LC_MESSAGE,
479 / F_FILENAME.
480 SY-SUBRC = 4.
481 ENDIF.
482 ENDIF.
483
484
485 ENDFORM. " READ_REPORT_FROM_DISK
486 *---------------------------------------------------------------------*
487 * FORM SPLIT_INCOMING_FILE *
488 *---------------------------------------------------------------------*
489 * .. *
490 *---------------------------------------------------------------------*
491 * --> FTAB_PROGRAM_FILE *
492 * --> FTAB_PROGRAM_SOURCE *
493 * --> ` *
494 * --> FTAB_PROGRAM_TEXTS *
495 *---------------------------------------------------------------------*
496 FORM SPLIT_INCOMING_FILE TABLES FTAB_PROGRAM_FILE
497 STRUCTURE MTAB_PROGRAM_FILE
498 FTAB_PROGRAM_SOURCE
499 STRUCTURE MTAB_PROGRAM_SOURCE
500 FTAB_PROGRAM_TEXTS
501 STRUCTURE MTAB_PROGRAM_TEXTS
502 FTAB_PROGRAM_DOCUMENTATION
503 STRUCTURE MTAB_PROGRAM_DOCUMENTATION
504 CHANGING FSTR_TRDIR
505 FSTR_THEAD.
506 DATA:
507 LC_DATATYPE(4) TYPE C, " Type of data, REPO, TEXP, RDIR
508 LC_PROGRAM_FILE LIKE MTAB_PROGRAM_FILE.
509 LOOP AT FTAB_PROGRAM_FILE.
510 LC_PROGRAM_FILE = FTAB_PROGRAM_FILE.
511 CASE LC_PROGRAM_FILE(9).
512 WHEN MC_TRDIR_IDENTIFIER.
513 LC_DATATYPE = MC_TRDIR_SHORT.
514 WHEN MC_REPORT_IDENTIFIER.
515 LC_DATATYPE = MC_REPORT_SHORT.
516 WHEN MC_TEXT_IDENTIFIER.
517 LC_DATATYPE = MC_TEXT_SHORT.
518 WHEN MC_DOC_IDENTIFIER.
519 LC_DATATYPE = MC_DOC_SHORT.
520 WHEN MC_THEAD_IDENTIFIER.
521 LC_DATATYPE = MC_THEAD_SHORT.
522 WHEN OTHERS. " Actual contents of report, trdir, or text
523 CASE LC_DATATYPE.
524 WHEN MC_TRDIR_SHORT.
525 FSTR_TRDIR = FTAB_PROGRAM_FILE.
526 WHEN MC_REPORT_SHORT.
527 FTAB_PROGRAM_SOURCE = FTAB_PROGRAM_FILE.
528 APPEND FTAB_PROGRAM_SOURCE.
529 WHEN MC_TEXT_SHORT.
530 *{modify by zhumk
531 * FTAB_PROGRAM_TEXTS = FTAB_PROGRAM_FILE.
532 data:vl_length type i,
533 vl_pos type i.
534
535 clear FTAB_PROGRAM_TEXTS.
536 vl_length = STRLEN( FTAB_PROGRAM_FILE-line ).
537 FTAB_PROGRAM_TEXTS-ID = FTAB_PROGRAM_FILE+0(1).
538 * length
539 vl_pos = vl_length - 9.
540 FTAB_PROGRAM_TEXTS-LENGTH = FTAB_PROGRAM_FILE+vl_pos(9).
541 * key
542 vl_pos = vl_length - 9 - FTAB_PROGRAM_TEXTS-LENGTH - 1.
543 if vl_pos > 0.
544 FTAB_PROGRAM_TEXTS-KEY = FTAB_PROGRAM_FILE+1(vl_pos).
545 endif.
546 * entry
547 vl_pos = vl_length - 9 - FTAB_PROGRAM_TEXTS-LENGTH.
548 FTAB_PROGRAM_TEXTS-ENTRY = FTAB_PROGRAM_FILE+vl_pos(FTAB_PROGRAM_TEXTS-LENGTH).
549 * FTAB_PROGRAM_TEXTS = FTAB_PROGRAM_FILE.
550 *}
551 APPEND FTAB_PROGRAM_TEXTS.
552 WHEN MC_THEAD_SHORT.
553 FSTR_THEAD = FTAB_PROGRAM_FILE.
554 WHEN MC_DOC_SHORT.
555 FTAB_PROGRAM_DOCUMENTATION = FTAB_PROGRAM_FILE.
556 APPEND FTAB_PROGRAM_DOCUMENTATION.
557 ENDCASE.
558 ENDCASE.
559 ENDLOOP.
560 ENDFORM. " SPLIT_INCOMING_FILE
561 *---------------------------------------------------------------------*
562 * FORM INSERT_NEW_REPORT*
563 *---------------------------------------------------------------------*
564 * .. *
565 *---------------------------------------------------------------------*
566 * --> FTAB_PROGRAM_SOURCE *
567 * --> FTAB_PROGRAM_TEXTS *
568 * --> F_TRDIR *
569 *---------------------------------------------------------------------*
570 FORM INSERT_NEW_REPORT TABLES FTAB_PROGRAM_SOURCE
571 STRUCTURE MTAB_PROGRAM_SOURCE
572 FTAB_PROGRAM_TEXTS
573 STRUCTURE MTAB_PROGRAM_TEXTS
574 FTAB_PROGRAM_DOCUMENTATION
575 STRUCTURE MTAB_PROGRAM_DOCUMENTATION
576 USING FSTR_TRDIR LIKE TRDIR
577 FSTR_THEAD LIKE MSTR_THEAD.
578 DATA:
579 LC_OBJ_NAME LIKE E071-OBJ_NAME,
580 LC_LINE2(40) TYPE C,
581 LC_ANSWER(1) TYPE C.
582 *-- read trdir to see if the report already exists, if it does, prompt
583 *-- user to overwrite or abort.
584 SELECT SINGLE * FROM TRDIR WHERE NAME = FSTR_TRDIR-NAME.
585 IF SY-SUBRC = 0. " Already exists
586 CONCATENATE 'want to overwrite report'
587 FSTR_TRDIR-NAME
588 INTO LC_LINE2 SEPARATED BY SPACE.
589 CONCATENATE LC_LINE2
590 '?'
591 INTO LC_LINE2.
592 CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
593 EXPORTING
594 DEFAULTOPTION = 'N'
595 TEXTLINE1 = 'The selected report already exists, do you'
596 TEXTLINE2 = LC_LINE2
597 TITEL = 'Report already exists'
598 CANCEL_DISPLAY = SPACE
599 IMPORTING
600 ANSWER = LC_ANSWER
601 EXCEPTIONS
602 OTHERS = 1.
603 ELSE.
604 LC_ANSWER = 'J'.
605 ENDIF.
606 IF LC_ANSWER = 'J'.
607 *-- Create the TADIR entry. (TRDIR entry created by INSERT REPORT)
608 LC_OBJ_NAME = TRDIR-NAME.
609 CALL FUNCTION 'TR_TADIR_POPUP_ENTRY_E071'
610 EXPORTING
611 WI_E071_PGMID = 'R3TR'
612 WI_E071_OBJECT = 'PROG'
613 WI_E071_OBJ_NAME = LC_OBJ_NAME
614 WI_TADIR_DEVCLASS = '$TMP'
615 EXCEPTIONS
616 EXIT = 3
617 OTHERS = 4.
618 IF SY-SUBRC = 0.
619 *-- Create Report
620 INSERT REPORT FSTR_TRDIR-NAME FROM FTAB_PROGRAM_SOURCE.
621 *-- Create Texts
622 INSERT TEXTPOOL FSTR_TRDIR-NAME FROM FTAB_PROGRAM_TEXTS
623 LANGUAGE SY-LANGU.
624 *-- Save Documentation
625 CALL FUNCTION 'DOCU_UPDATE'
626 EXPORTING
627 HEAD = FSTR_THEAD
628 STATE = 'A'
629 TYP = 'E'
630 VERSION = '1'
631 TABLES
632 LINE = FTAB_PROGRAM_DOCUMENTATION
633 EXCEPTIONS
634 OTHERS = 1.
635 ELSE.
636 WRITE: / 'Error updating the TADIR entry' COLOR COL_NEGATIVE,
637 'Program' COLOR COL_NEGATIVE INTENSIFIED OFF,
638 FSTR_TRDIR-NAME, 'was not loaded into SAP.'
639 COLOR COL_NEGATIVE INTENSIFIED OFF.
640 ENDIF.
641 ELSE.
642 WRITE: / FSTR_TRDIR-NAME COLOR COL_NEGATIVE,
643 'was not uploaded into SAP. Action cancelled by user'
644 COLOR COL_NEGATIVE INTENSIFIED OFF.
645 ENDIF.
646 ENDFORM. " INSERT_NEW_REPORT
647 *---------------------------------------------------------------------*
648 * FORM GET_NAME *
649 *---------------------------------------------------------------------*
650 * .. *
651 *---------------------------------------------------------------------*
652 * --> VALUE(F_FIELD) *
653 * --> F_NAME *
654 *---------------------------------------------------------------------*
655 FORM GET_NAME USING VALUE(F_FIELD)
656 CHANGING F_NAME.
657 DATA: LTAB_FIELDS LIKE DYNPREAD OCCURS 0 WITH HEADER LINE,
658 LC_PROG LIKE D020S-PROG,
659 LC_DNUM LIKE D020S-DNUM.
660 TRANSLATE F_FIELD TO UPPER CASE.
661 refresh ltab_fields.
662 LTAB_FIELDS-FIELDNAME = F_FIELD.
663 append ltab_fields.
664 LC_PROG = SY-REPID .
665 LC_DNUM = SY-DYNNR .
666 CALL FUNCTION 'DYNP_VALUES_READ'
667 EXPORTING
668 DYNAME = LC_PROG
669 DYNUMB = LC_DNUM
670 TABLES
671 dynpfields = ltab_fields
672 EXCEPTIONS
673 OTHERS = 01.
674 read table ltab_fields index 1.
675 IF SY-SUBRC EQ 0.
676 F_NAME = LTAB_FIELDS-FIELDVALUE.
677 refresh ltab_fields.
678 ENDIF.
679 CALL FUNCTION 'F4_USER'
680 EXPORTING
681 OBJECT = F_NAME
682 IMPORTING
683 RESULT = F_NAME.
684 ENDFORM. " GET_NAME
685
686 *Program Texts
687 *DIR File Download Options (File Selection)
688 *FIL File Options
689 *FNA Enter filename below (under File Options)
690 *H01 Prog Name
691 *H03 Program Description
692 *SNG Upload a single file
693 *UDL Upload to SAP/Download from SAP
694 *UPL File Upload Options
695 *R Backup/Restore program source code with texts
696 *P_PATH Path to save programs to
697 *RB_DOS Files on local computer
698 *RB_DOWN Download Programs
699 *RB_FILE Upload a single file
700 *RB_LIST Select program(s) from a list
701 *RB_UNIX Files on remote computer
702 *RB_UP Upload Programs to SAP
703 *S_CDAT Date Created
704 *S_CNAM Created by UserID
705 *S_NAME Program Name
706 *S_SUBC Program Type
707 *S_UDAT Date Changed
708 *S_UNAM Last Changed by UserID