1
*&---------------------------------------------------------------------* 2 *& Report ZDOWN 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 9 REPORT Z_DOWNLOAD. 10 *====================================================================================================================== 11 * Direct Download Enterprise version 1.3.1. 12 * 13 * THIS SOFTWARE IS FOR PERSONAL USE ONLY. 14 * THIS PROGRAM IS FREEWARE AND IS PROVIDED ON AN AS-IS BASIS WITHOUT WARRANTY OF ANY KIND. 15 * THE PROVIDER SPECIFICALLY DISCLAIMS ANY OTHER WARRANTY, EXPRESS OR IMPLIED, INCLUDING ANY WARRANTY OF MERCHANTABILITY 16 * OR FITNESS FOR A PARTICULAR PURPOSE. 17 * 18 * IN NO EVENT SHALL THE PROVIDER BE LIABLE FOR ANY CONSEQUENTIAL, INDIRECT, SPECIAL OR INCIDENTAL DAMAGES, EVEN IF PROVIDER 19 * HAS BEEN ADVISED BY CLIENT OF THE POSSIBILITY OF SUCH POTENTIAL LOSS OR DAMAGE. 20 * CLIENT AGREES TO HOLD PROVIDER HARMLESS FROM AND AGAINST ANY AND ALL CLAIMS, LOSSES, LIABILITIES AND EXPENSES. BY 21 * INSTALLING OR RUNNING THIS PROGRAM YOU ARE AGREEING TO THE TERMS AND CONDITONS STATED ABOVE. 22 * 23 *---------------------------------------------------------------------------------------------------------------------- 24 * PROGRAM DESCRIPTION & USE 25 * Allows a user to download programs, Functions, DD definitions, etc to the presentation server. This version searches 26 * recursively for nested includes and function modules, and allows you to download the resulting code as standard text 27 * or HTML web pages within a suitable directory structure. 28 * 29 * You can either search by object name, using wildcards if you wish, or a combination of Author and object name. If 30 * you want all objects returned for a particular author then select the author name and choose the most suitable 31 * radiobutton. All objects will be returned if the fields to the right hand side of the radiobutton are left completely 32 * blank. 33 * 34 * Compatible with R/3 Enterprise only, for older versions of SAP you will need Direct Download version 5.xx. 35 * This version removes the programming limitations imposed by developing across SAP releases 3 to 4.6. 36 * 37 * In order to be able to download files to the SAP server you must first set up a logical filepath within transaction 38 * 'FILE', or use an existing one. You must also create a external operating system command in SM69 called ZMKDIR. This 39 * will then be used to create any directories needed on the SAP server 40 41 * This program is intended to allow a person to keep a visual representation of a program for backup purposes only as 42 * has not been designed to allow programs to be uploaded to SAP systems. 43 *---------------------------------------------------------------------------------------------------------------------- 44 * 45 * author : E.G.Mellodew 46 * 47 * 48 * program contact : direct@dalestech.com 49 * www.dalestech.com 50 * 51 *---------------------------------------------------------------------------------------------------------------------- 52 53 *---------------------------------------------------------------------------------------------------------------------- 54 * SAP Tables 55 *---------------------------------------------------------------------------------------------------------------------- 56 TABLES: TRDIR, SEOCLASS, TFDIR, ENLFDIR, DD02L. 57 58 *---------------------------------------------------------------------------------------------------------------------- 59 * Types 60 *---------------------------------------------------------------------------------------------------------------------- 61 * text element structure 62 TYPES: TTEXTTABLE LIKE TEXTPOOL. 63 * GUI titles 64 TYPES: TGUITITLE LIKE D347T. 65 66 * Message classes 67 TYPES: BEGIN OF TMESSAGE, 68 ARBGB LIKE T100-ARBGB, 69 STEXT LIKE T100A-STEXT, 70 MSGNR LIKE T100-MSGNR, 71 TEXT LIKE T100-TEXT, 72 END OF TMESSAGE. 73 74 * Screen flow. 75 TYPES: BEGIN OF TSCREENFLOW, 76 SCREEN LIKE D020S-DNUM, 77 CODE LIKE D022S-LINE, 78 END OF TSCREENFLOW. 79 80 * Holds a table/structure definition 81 TYPES: BEGIN OF TDICTTABLESTRUCTURE, 82 FIELDNAME LIKE DD03L-FIELDNAME, 83 POSITION LIKE DD03L-POSITION, 84 KEYFLAG LIKE DD03L-KEYFLAG, 85 ROLLNAME LIKE DD03L-ROLLNAME, 86 DOMNAME LIKE DD03L-DOMNAME, 87 DATATYPE LIKE DD03L-DATATYPE, 88 LENG LIKE DD03L-LENG, 89 DDTEXT LIKE DD04T-DDTEXT, 90 END OF TDICTTABLESTRUCTURE. 91 92 * Holds a tables attributes + its definition 93 TYPES: BEGIN OF TDICTTABLE, 94 TABLENAME LIKE DD03L-TABNAME, 95 TABLETITLE LIKE DD02T-DDTEXT, 96 ISTRUCTURE TYPE TDICTTABLESTRUCTURE OCCURS 0, 97 END OF TDICTTABLE. 98 99 * Include program names 100 TYPES: BEGIN OF TINCLUDE, 101 INCLUDENAME LIKE TRDIR-NAME, 102 INCLUDETITLE LIKE TFTIT-STEXT, 103 END OF TINCLUDE. 104 105 * Exception class texts 106 TYPES: BEGIN OF TCONCEPT, 107 CONSTNAME TYPE STRING, 108 CONCEPT TYPE SOTR_CONC, 109 END OF TCONCEPT. 110 111 * Method 112 TYPES: BEGIN OF TMETHOD, 113 CMPNAME LIKE VSEOMETHOD-CMPNAME, 114 DESCRIPT LIKE VSEOMETHOD-DESCRIPT, 115 EXPOSURE LIKE VSEOMETHOD-EXPOSURE, 116 METHODKEY TYPE STRING, 117 END OF TMETHOD. 118 119 * Class 120 TYPES: BEGIN OF TCLASS, 121 SCANNED(1), 122 CLSNAME LIKE VSEOCLASS-CLSNAME, 123 DESCRIPT LIKE VSEOCLASS-DESCRIPT, 124 MSG_ID LIKE VSEOCLASS-MSG_ID, 125 EXPOSURE LIKE VSEOCLASS-EXPOSURE, 126 STATE LIKE VSEOCLASS-STATE, 127 CLSFINAL LIKE VSEOCLASS-CLSFINAL, 128 R3RELEASE LIKE VSEOCLASS-R3RELEASE, 129 IMETHODS TYPE TMETHOD OCCURS 0, 130 IDICTSTRUCT TYPE TDICTTABLE OCCURS 0, 131 ITEXTELEMENTS TYPE TTEXTTABLE OCCURS 0, 132 IMESSAGES TYPE TMESSAGE OCCURS 0, 133 ICONCEPTS TYPE TCONCEPT OCCURS 0, 134 TEXTELEMENTKEY TYPE STRING, 135 PUBLICCLASSKEY TYPE STRING, 136 PRIVATECLASSKEY TYPE STRING, 137 PROTECTEDCLASSKEY TYPE STRING, 138 TYPESCLASSKEY TYPE STRING, 139 EXCEPTIONCLASS TYPE I, 140 END OF TCLASS. 141 142 * function modules 143 TYPES: BEGIN OF TFUNCTION, 144 FUNCTIONNAME LIKE TFDIR-FUNCNAME, 145 FUNCTIONGROUP LIKE ENLFDIR-AREA, 146 INCLUDENUMBER LIKE TFDIR-INCLUDE, 147 FUNCTIONMAININCLUDE LIKE TFDIR-FUNCNAME, 148 FUNCTIONTITLE LIKE TFTIT-STEXT, 149 TOPINCLUDENAME LIKE TFDIR-FUNCNAME, 150 PROGNAME LIKE TFDIR-PNAME, 151 PROGRAMLINKNAME LIKE TFDIR-PNAME, 152 MESSAGECLASS LIKE T100-ARBGB, 153 ITEXTELEMENTS TYPE TTEXTTABLE OCCURS 0, 154 ISELECTIONTEXTS TYPE TTEXTTABLE OCCURS 0, 155 IMESSAGES TYPE TMESSAGE OCCURS 0, 156 IINCLUDES TYPE TINCLUDE OCCURS 0, 157 IDICTSTRUCT TYPE TDICTTABLE OCCURS 0, 158 IGUITITLE TYPE TGUITITLE OCCURS 0, 159 ISCREENFLOW TYPE TSCREENFLOW OCCURS 0, 160 END OF TFUNCTION. 161 162 TYPES: BEGIN OF TPROGRAM, 163 PROGNAME LIKE TRDIR-NAME, 164 PROGRAMTITLE LIKE TFTIT-STEXT, 165 SUBC LIKE TRDIR-SUBC, 166 MESSAGECLASS LIKE T100-ARBGB, 167 IMESSAGES TYPE TMESSAGE OCCURS 0, 168 ITEXTELEMENTS TYPE TTEXTTABLE OCCURS 0, 169 ISELECTIONTEXTS TYPE TTEXTTABLE OCCURS 0, 170 IGUITITLE TYPE TGUITITLE OCCURS 0, 171 ISCREENFLOW TYPE TSCREENFLOW OCCURS 0, 172 IINCLUDES TYPE TINCLUDE OCCURS 0, 173 IDICTSTRUCT TYPE TDICTTABLE OCCURS 0, 174 END OF TPROGRAM. 175 176 *---------------------------------------------------------------------------------------------------------------------- 177 * Internal tables 178 *---------------------------------------------------------------------------------------------------------------------- 179 * Dictionary object 180 DATA: IDICTIONARY TYPE STANDARD TABLE OF TDICTTABLE WITH HEADER LINE. 181 * Function modules. 182 DATA: IFUNCTIONS TYPE STANDARD TABLE OF TFUNCTION WITH HEADER LINE. 183 * Tree display structure. 184 DATA: ITREEDISPLAY TYPE STANDARD TABLE OF SNODETEXT WITH HEADER LINE. 185 * Message class data 186 DATA: IMESSAGES TYPE STANDARD TABLE OF TMESSAGE WITH HEADER LINE. 187 * Holds a single message class an all of its messages 188 DATA: ISINGLEMESSAGECLASS TYPE STANDARD TABLE OF TMESSAGE WITH HEADER LINE. 189 * Holds program related data 190 DATA: IPROGRAMS TYPE STANDARD TABLE OF TPROGRAM WITH HEADER LINE. 191 * Classes 192 DATA: ICLASSES TYPE STANDARD TABLE OF TCLASS WITH HEADER LINE. 193 * Table of paths created on the SAP server 194 DATA: ISERVERPATHS TYPE STANDARD TABLE OF STRING WITH HEADER LINE. 195 196 *---------------------------------------------------------------------------------------------------------------------- 197 * Table prototypes 198 *---------------------------------------------------------------------------------------------------------------------- 199 DATA: DUMIDICTSTRUCTURE TYPE STANDARD TABLE OF TDICTTABLESTRUCTURE. 200 DATA: DUMITEXTTAB TYPE STANDARD TABLE OF TTEXTTABLE. 201 DATA: DUMIINCLUDES TYPE STANDARD TABLE OF TINCLUDE. 202 DATA: DUMIHTML TYPE STANDARD TABLE OF STRING. 203 DATA: DUMIHEADER TYPE STANDARD TABLE OF STRING . 204 DATA: DUMISCREEN TYPE STANDARD TABLE OF TSCREENFLOW . 205 DATA: DUMIGUITITLE TYPE STANDARD TABLE OF TGUITITLE. 206 DATA: DUMIMETHODS TYPE STANDARD TABLE OF TMETHOD. 207 DATA: DUMICONCEPTS TYPE STANDARD TABLE OF TCONCEPT. 208 209 *---------------------------------------------------------------------------------------------------------------------- 210 * Global objects 211 *---------------------------------------------------------------------------------------------------------------------- 212 DATA: OBJFILE TYPE REF TO CL_GUI_FRONTEND_SERVICES. 213 DATA: OBJRUNTIMEERROR TYPE REF TO CX_ROOT. 214 215 *---------------------------------------------------------------------------------------------------------------------- 216 * Constants 217 *---------------------------------------------------------------------------------------------------------------------- 218 CONSTANTS: VERSIONNO TYPE STRING VALUE '1.3.1'. 219 CONSTANTS: TABLES TYPE STRING VALUE 'TABLES'. 220 CONSTANTS: TABLE TYPE STRING VALUE 'TABLE'. 221 CONSTANTS: LIKE TYPE STRING VALUE 'LIKE'. 222 CONSTANTS: TYPE TYPE STRING VALUE 'TYPE'. 223 CONSTANTS: TYPEREFTO TYPE STRING VALUE 'TYPE REF TO'. 224 CONSTANTS: STRUCTURE TYPE STRING VALUE 'STRUCTURE'. 225 CONSTANTS: LOWSTRUCTURE TYPE STRING VALUE 'structure'. 226 CONSTANTS: OCCURS TYPE STRING VALUE 'OCCURS'. 227 CONSTANTS: FUNCTION TYPE STRING VALUE 'FUNCTION'. 228 CONSTANTS: CALLFUNCTION TYPE STRING VALUE ' CALL FUNCTION'. 229 CONSTANTS: MESSAGE TYPE STRING VALUE 'MESSAGE'. 230 CONSTANTS: INCLUDE TYPE STRING VALUE 'INCLUDE'. 231 CONSTANTS: LOWINCLUDE TYPE STRING VALUE 'include'. 232 CONSTANTS: DESTINATION TYPE STRING VALUE 'DESTINATION'. 233 CONSTANTS: IS_TABLE TYPE STRING VALUE 'T'. 234 CONSTANTS: IS_PROGRAM TYPE STRING VALUE 'P'. 235 CONSTANTS: IS_SCREEN TYPE STRING VALUE 'S'. 236 CONSTANTS: IS_GUITITLE TYPE STRING VALUE 'G'. 237 CONSTANTS: IS_DOCUMENTATION TYPE STRING VALUE 'D'. 238 CONSTANTS: IS_MESSAGECLASS TYPE STRING VALUE 'MC'. 239 CONSTANTS: IS_FUNCTION TYPE STRING VALUE 'F'. 240 CONSTANTS: IS_CLASS TYPE STRING VALUE 'C'. 241 CONSTANTS: IS_METHOD TYPE STRING VALUE 'M'. 242 CONSTANTS: ASTERIX TYPE STRING VALUE '*'. 243 CONSTANTS: COMMA TYPE STRING VALUE ','. 244 CONSTANTS: PERIOD TYPE STRING VALUE '.'. 245 CONSTANTS: DASH TYPE STRING VALUE '-'. 246 CONSTANTS: TRUE TYPE I VALUE 1. 247 CONSTANTS: FALSE TYPE I VALUE 0. 248 CONSTANTS: LT TYPE STRING VALUE '&lt;'. 249 CONSTANTS: GT TYPE STRING VALUE '&gt;'. 250 CONSTANTS: UNIX TYPE STRING VALUE 'UNIX'. 251 CONSTANTS: NON_UNIX TYPE STRING VALUE 'not UNIX'. 252 CONSTANTS: BACKGROUND_COLOUR TYPE STRING VALUE '#FFFFE0'. 253 CONSTANTS: COLOUR_WHITE TYPE STRING VALUE '#FFFFFF'. 254 CONSTANTS: COLOUR_BLACK TYPE STRING VALUE '#000000'. 255 CONSTANTS: COLOUR_YELLOW TYPE STRING VALUE '#FFFF00'. 256 CONSTANTS: COMMENT_COLOUR TYPE STRING VALUE '#0000FF'. 257 CONSTANTS: HTMLEXTENSION TYPE STRING VALUE 'html'. 258 CONSTANTS: TEXTEXTENSION TYPE STRING VALUE 'txt'. 259 260 *---------------------------------------------------------------------------------------------------------------------- 261 * Global variables 262 *---------------------------------------------------------------------------------------------------------------------- 263 DATA: STATUSBARMESSAGE(100). 264 DATA: FORCEDEXIT TYPE I VALUE 0. 265 DATA: STARTTIME LIKE SY-UZEIT. 266 DATA: RUNTIME LIKE SY-UZEIT. 267 DATA: DOWNLOADFILEEXTENSION TYPE STRING. 268 DATA: DOWNLOADFOLDER TYPE STRING. 269 DATA: SERVERSLASHSEPARATOR TYPE STRING. 270 DATA: FRONTENDSLASHSEPARATOR TYPE STRING. 271 DATA: SLASHSEPARATORTOUSE TYPE STRING. 272 DATA: SERVERFILESYSTEM TYPE FILESYS_D. 273 DATA: SERVERFOLDER TYPE STRING. 274 DATA: FRONTENDOPSYSTEM TYPE STRING. 275 DATA: SERVEROPSYSTEM TYPE STRING. 276 DATA: CUSTOMERNAMESPACE TYPE STRING. 277 RANGES: SOPROGRAMNAME FOR TRDIR-NAME. 278 RANGES: SOAUTHOR FOR USR02-BNAME. 279 RANGES: SOTABLENAMES FOR DD02L-TABNAME. 280 RANGES: SOFUNCTIONNAME FOR TFDIR-FUNCNAME. 281 RANGES: SOCLASSNAME FOR VSEOCLASS-CLSNAME. 282 RANGES: SOFUNCTIONGROUP FOR ENLFDIR-AREA. 283 FIELD-SYMBOLS: <WADICTSTRUCT> TYPE TDICTTABLE. 284 285 *---------------------------------------------------------------------------------------------------------------------- 286 * Selection screen declaration 287 *---------------------------------------------------------------------------------------------------------------------- 288 * Author 289 SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TBLOCK1. 290 SELECTION-SCREEN BEGIN OF LINE. 291 SELECTION-SCREEN COMMENT 5(23) TAUTH. 292 PARAMETERS: PAUTH LIKE USR02-BNAME MEMORY ID MAUTH. 293 SELECTION-SCREEN END OF LINE. 294 295 SELECTION-SCREEN BEGIN OF LINE. 296 SELECTION-SCREEN COMMENT 5(36) TPMOD. 297 PARAMETERS: PMOD AS CHECKBOX. 298 SELECTION-SCREEN END OF LINE. 299 300 * Local objects 301 SELECTION-SCREEN BEGIN OF LINE. 302 SELECTION-SCREEN COMMENT 5(36) T$TMP. 303 PARAMETERS: P$TMP AS CHECKBOX DEFAULT ''. 304 SELECTION-SCREEN END OF LINE. 305 SELECTION-SCREEN: END OF BLOCK B1. 306 307 SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TBLOCK2. 308 * Tables 309 SELECTION-SCREEN BEGIN OF LINE. 310 PARAMETERS: RTABLE RADIOBUTTON GROUP R1. 311 SELECTION-SCREEN COMMENT 5(15) TRTABLE. 312 SELECTION-SCREEN END OF LINE. 313 314 SELECTION-SCREEN BEGIN OF LINE. 315 SELECTION-SCREEN COMMENT 10(15) TPTABLE. 316 SELECT-OPTIONS: SOTABLE FOR DD02L-TABNAME. 317 SELECTION-SCREEN END OF LINE. 318 319 SELECTION-SCREEN BEGIN OF LINE. 320 SELECTION-SCREEN COMMENT 10(79) TTNOTE. 321 SELECTION-SCREEN END OF LINE. 322 323 * Message classes 324 SELECTION-SCREEN BEGIN OF LINE. 325 PARAMETERS: RMESS RADIOBUTTON GROUP R1. 326 SELECTION-SCREEN COMMENT 5(18) TPMES. 327 SELECTION-SCREEN END OF LINE. 328 329 SELECTION-SCREEN BEGIN OF LINE. 330 SELECTION-SCREEN COMMENT 10(18) TMNAME. 331 PARAMETERS: PMNAME LIKE T100-ARBGB MEMORY ID MMNAME. 332 SELECTION-SCREEN END OF LINE. 333 334 * Function modules 335 SELECTION-SCREEN BEGIN OF LINE. 336 PARAMETERS: RFUNC RADIOBUTTON GROUP R1. 337 SELECTION-SCREEN COMMENT 5(30) TRFUNC. 338 SELECTION-SCREEN END OF LINE. 339 340 SELECTION-SCREEN BEGIN OF LINE. 341 SELECTION-SCREEN COMMENT 10(15) TPFNAME. 342 SELECT-OPTIONS: SOFNAME FOR TFDIR-FUNCNAME. 343 SELECTION-SCREEN END OF LINE. 344 345 SELECTION-SCREEN BEGIN OF LINE. 346 SELECTION-SCREEN COMMENT 10(15) TFGROUP. 347 SELECT-OPTIONS: SOFGROUP FOR ENLFDIR-AREA. 348 SELECTION-SCREEN END OF LINE. 349 350 * Classes 351 SELECTION-SCREEN BEGIN OF LINE. 352 PARAMETERS: RCLASS RADIOBUTTON GROUP R1. 353 SELECTION-SCREEN COMMENT 5(30) TRCLASS. 354 SELECTION-SCREEN END OF LINE. 355 356 SELECTION-SCREEN BEGIN OF LINE. 357 SELECTION-SCREEN COMMENT 10(15) TPCNAME. 358 SELECT-OPTIONS: SOCLASS FOR SEOCLASS-CLSNAME. 359 SELECTION-SCREEN END OF LINE. 360 361 * Programs / includes 362 SELECTION-SCREEN BEGIN OF LINE. 363 PARAMETERS: RPROG RADIOBUTTON GROUP R1 DEFAULT 'X'. 364 SELECTION-SCREEN COMMENT 5(18) TPROG. 365 SELECTION-SCREEN END OF LINE. 366 367 SELECTION-SCREEN BEGIN OF LINE. 368 SELECTION-SCREEN COMMENT 10(15) TRPNAME. 369 SELECT-OPTIONS: SOPROG FOR TRDIR-NAME. 370 SELECTION-SCREEN END OF LINE. 371 372 SELECTION-SCREEN SKIP. 373 * Language 374 SELECTION-SCREEN BEGIN OF LINE. 375 SELECTION-SCREEN COMMENT 1(18) TMLANG. 376 PARAMETERS: PMLANG LIKE T100-SPRSL DEFAULT 'EN'. 377 SELECTION-SCREEN END OF LINE. 378 379 * Package 380 SELECTION-SCREEN BEGIN OF LINE. 381 SELECTION-SCREEN COMMENT 1(18) TPACK. 382 PARAMETERS: PPACK LIKE TADIV-DEVCLASS MEMORY ID MPACK. 383 SELECTION-SCREEN END OF LINE. 384 385 * Customer objects 386 SELECTION-SCREEN BEGIN OF LINE. 387 SELECTION-SCREEN COMMENT 1(27) TCUST. 388 PARAMETERS: PCUST AS CHECKBOX DEFAULT 'X'. 389 SELECTION-SCREEN COMMENT 32(25) TNRANGE. 390 PARAMETERS: PCNAME TYPE NAMESPACE MEMORY ID MNAMESPACE. 391 SELECTION-SCREEN END OF LINE. 392 SELECTION-SCREEN: END OF BLOCK B2. 393 394 * Additional things to download. 395 SELECTION-SCREEN: BEGIN OF BLOCK B3 WITH FRAME TITLE TBLOCK3. 396 SELECTION-SCREEN BEGIN OF LINE. 397 SELECTION-SCREEN COMMENT 1(33) TPTEXT. 398 PARAMETERS: PTEXT AS CHECKBOX DEFAULT 'X' MEMORY ID MTEXT. 399 SELECTION-SCREEN END OF LINE. 400 401 SELECTION-SCREEN BEGIN OF LINE. 402 SELECTION-SCREEN COMMENT 1(33) TMESS. 403 PARAMETERS: PMESS AS CHECKBOX DEFAULT 'X' MEMORY ID MMESS. 404 SELECTION-SCREEN END OF LINE. 405 406 SELECTION-SCREEN BEGIN OF LINE. 407 SELECTION-SCREEN COMMENT 1(33) TPINC. 408 PARAMETERS: PINC AS CHECKBOX DEFAULT 'X' MEMORY ID MINC. 409 SELECTION-SCREEN COMMENT 40(20) TRECC. 410 PARAMETERS: PRECI AS CHECKBOX DEFAULT 'X' MEMORY ID MRECI. 411 SELECTION-SCREEN END OF LINE. 412 413 SELECTION-SCREEN BEGIN OF LINE. 414 SELECTION-SCREEN COMMENT 1(33) TPFUNC. 415 PARAMETERS: PFUNC AS CHECKBOX DEFAULT 'X' MEMORY ID MFUNC. 416 SELECTION-SCREEN COMMENT 40(20) TRECF. 417 PARAMETERS: PRECF AS CHECKBOX DEFAULT 'X' MEMORY ID MRECF. 418 SELECTION-SCREEN END OF LINE. 419 420 SELECTION-SCREEN BEGIN OF LINE. 421 SELECTION-SCREEN COMMENT 1(33) TDOC. 422 PARAMETERS: PDOC AS CHECKBOX DEFAULT 'X' MEMORY ID MDOC. 423 SELECTION-SCREEN END OF LINE. 424 425 SELECTION-SCREEN BEGIN OF LINE. 426 SELECTION-SCREEN COMMENT 1(33) TPSCR. 427 PARAMETERS: PSCR AS CHECKBOX DEFAULT 'X' MEMORY ID MSCR. 428 SELECTION-SCREEN END OF LINE. 429 430 SELECTION-SCREEN BEGIN OF LINE. 431 SELECTION-SCREEN COMMENT 1(33) TPDICT. 432 PARAMETERS: PDICT AS CHECKBOX DEFAULT 'X' MEMORY ID MDICT. 433 SELECTION-SCREEN END OF LINE. 434 435 SELECTION-SCREEN BEGIN OF LINE. 436 SELECTION-SCREEN COMMENT 1(33) TSORTT. 437 PARAMETERS: PSORTT AS CHECKBOX DEFAULT ' ' MEMORY ID MSORTT. 438 SELECTION-SCREEN END OF LINE. 439 SELECTION-SCREEN: END OF BLOCK B3. 440 441 * File details 442 SELECTION-SCREEN: BEGIN OF BLOCK B4 WITH FRAME TITLE TBLOCK4. 443 SELECTION-SCREEN BEGIN OF LINE. 444 SELECTION-SCREEN COMMENT 1(20) TPHTML. 445 PARAMETERS: PHTML RADIOBUTTON GROUP G1 DEFAULT 'X'. 446 SELECTION-SCREEN END OF LINE. 447 448 SELECTION-SCREEN BEGIN OF LINE. 449 SELECTION-SCREEN COMMENT 5(29) TCOMM. 450 PARAMETERS: PCOMM AS CHECKBOX DEFAULT 'X'. 451 SELECTION-SCREEN END OF LINE. 452 453 SELECTION-SCREEN BEGIN OF LINE. 454 SELECTION-SCREEN COMMENT 5(29) TBACK. 455 PARAMETERS: PBACK AS CHECKBOX DEFAULT 'X'. 456 SELECTION-SCREEN END OF LINE. 457 458 SELECTION-SCREEN BEGIN OF LINE. 459 SELECTION-SCREEN COMMENT 1(20) TPTXT. 460 PARAMETERS: PTXT RADIOBUTTON GROUP G1. 461 SELECTION-SCREEN END OF LINE. 462 463 SELECTION-SCREEN SKIP. 464 465 * Download to SAP server 466 SELECTION-SCREEN BEGIN OF LINE. 467 SELECTION-SCREEN COMMENT 1(25) TSERV. 468 PARAMETERS: PSERV RADIOBUTTON GROUP G2. 469 SELECTION-SCREEN END OF LINE. 470 SELECTION-SCREEN BEGIN OF LINE. 471 SELECTION-SCREEN COMMENT 8(20) TSPATH. 472 PARAMETERS: PLOGICAL LIKE FILENAME-FILEINTERN MEMORY ID MLOGICAL. 473 SELECTION-SCREEN END OF LINE. 474 SELECTION-SCREEN COMMENT /28(60) TSDPATH. 475 476 * Download to PC 477 SELECTION-SCREEN BEGIN OF LINE. 478 SELECTION-SCREEN COMMENT 1(25) TPC. 479 PARAMETERS: PPC RADIOBUTTON GROUP G2 DEFAULT 'X'. 480 SELECTION-SCREEN END OF LINE. 481 SELECTION-SCREEN BEGIN OF LINE. 482 SELECTION-SCREEN COMMENT 8(20) TPPATH. 483 PARAMETERS: PFOLDER LIKE RLGRAP-FILENAME MEMORY ID MFOLDER. 484 SELECTION-SCREEN END OF LINE. 485 SELECTION-SCREEN: END OF BLOCK B4. 486 487 * Display options 488 SELECTION-SCREEN: BEGIN OF BLOCK B5 WITH FRAME TITLE TBLOCK5. 489 * Display final report 490 SELECTION-SCREEN BEGIN OF LINE. 491 SELECTION-SCREEN COMMENT 1(33) TREP. 492 PARAMETERS: PREP AS CHECKBOX DEFAULT 'X'. 493 SELECTION-SCREEN END OF LINE. 494 * Display progress messages 495 SELECTION-SCREEN BEGIN OF LINE. 496 SELECTION-SCREEN COMMENT 1(33) TPROMESS. 497 PARAMETERS: PPROMESS AS CHECKBOX DEFAULT 'X'. 498 SELECTION-SCREEN END OF LINE. 499 SELECTION-SCREEN: END OF BLOCK B5. 500 501 *---------------------------------------------------------------------------------------------------------------------- 502 * Display a directory picker window 503 *---------------------------------------------------------------------------------------------------------------------- 504 AT SELECTION-SCREEN ON VALUE-REQUEST FOR PFOLDER. 505 506 DATA: OBJFILE TYPE REF TO CL_GUI_FRONTEND_SERVICES. 507 DATA: PICKEDFOLDER TYPE STRING. 508 DATA: INITIALFOLDER TYPE STRING. 509 510 IF SY-BATCH IS INITIAL. 511 CREATE OBJECT OBJFILE. 512 513 IF NOT PFOLDER IS INITIAL. 514 INITIALFOLDER = PFOLDER. 515 ELSE. 516 OBJFILE->GET_TEMP_DIRECTORY( CHANGING TEMP_DIR = INITIALFOLDER 517 EXCEPTIONS CNTL_ERROR = 1 518 ERROR_NO_GUI = 2 519 NOT_SUPPORTED_BY_GUI = 3 ). 520 ENDIF. 521 522 OBJFILE->DIRECTORY_BROWSE( EXPORTING INITIAL_FOLDER = INITIALFOLDER 523 CHANGING SELECTED_FOLDER = PICKEDFOLDER 524 EXCEPTIONS CNTL_ERROR = 1 525 ERROR_NO_GUI = 2 526 NOT_SUPPORTED_BY_GUI = 3 ). 527 528 IF SY-SUBRC = 0. 529 PFOLDER = PICKEDFOLDER. 530 ELSE. 531 WRITE: / 'An error has occured picking a folder'. 532 ENDIF. 533 ENDIF. 534 535 *---------------------------------------------------------------------------------------------------------------------- 536 AT SELECTION-SCREEN. 537 *---------------------------------------------------------------------------------------------------------------------- 538 CASE 'X'. 539 WHEN PPC. 540 IF PFOLDER IS INITIAL. 541 * User must enter a path to save to 542 MESSAGE E000(OO) WITH 'You must enter a file path'. 543 ENDIF. 544 545 WHEN PSERV. 546 IF PLOGICAL IS INITIAL. 547 * User must enter a logical path to save to 548 MESSAGE E000(OO) WITH 'You must enter a logical file name'. 549 ENDIF. 550 ENDCASE. 551 552 *---------------------------------------------------------------------------------------------------------------------- 553 AT SELECTION-SCREEN ON PLOGICAL. 554 *---------------------------------------------------------------------------------------------------------------------- 555 556 IF NOT PSERV IS INITIAL. 557 CALL FUNCTION 'FILE_GET_NAME' 558 EXPORTING 559 LOGICAL_FILENAME = PLOGICAL 560 IMPORTING 561 FILE_NAME = SERVERFOLDER 562 EXCEPTIONS 563 FILE_NOT_FOUND = 1 564 OTHERS = 2. 565 IF SY-SUBRC = 0. 566 IF SERVERFOLDER IS INITIAL. 567 MESSAGE E000(OO) WITH 'No file path returned from logical filename'. 568 ELSE. 569 * Path to display on the selection screen 570 TSDPATH = SERVERFOLDER. 571 * Remove the trailing slash off the path as the subroutine buildFilename will add an extra one 572 SHIFT SERVERFOLDER RIGHT DELETING TRAILING SERVERSLASHSEPARATOR. 573 SHIFT SERVERFOLDER LEFT DELETING LEADING SPACE. 574 ENDIF. 575 ELSE. 576 MESSAGE E000(OO) WITH 'Logical filename does not exist'. 577 ENDIF. 578 ENDIF. 579 580 * --------------------------------------------------------------------------------------------------------------------- 581 AT SELECTION-SCREEN ON VALUE-REQUEST FOR SOPROG-LOW. 582 * --------------------------------------------------------------------------------------------------------------------- 583 CALL FUNCTION 'REPOSITORY_INFO_SYSTEM_F4' 584 EXPORTING 585 OBJECT_TYPE = 'PROG' 586 OBJECT_NAME = SOPROG-LOW 587 SUPPRESS_SELECTION = 'X' 588 USE_ALV_GRID = '' 589 WITHOUT_PERSONAL_LIST = '' 590 IMPORTING 591 OBJECT_NAME_SELECTED = SOPROG-LOW 592 EXCEPTIONS 593 CANCEL = 1. 594 595 * --------------------------------------------------------------------------------------------------------------------- 596 AT SELECTION-SCREEN ON VALUE-REQUEST FOR SOPROG-HIGH. 597 * --------------------------------------------------------------------------------------------------------------------- 598 CALL FUNCTION 'REPOSITORY_INFO_SYSTEM_F4' 599 EXPORTING 600 OBJECT_TYPE = 'PROG' 601 OBJECT_NAME = SOPROG-HIGH 602 SUPPRESS_SELECTION = 'X' 603 USE_ALV_GRID = '' 604 WITHOUT_PERSONAL_LIST = '' 605 IMPORTING 606 OBJECT_NAME_SELECTED = SOPROG-HIGH 607 EXCEPTIONS 608 CANCEL = 1. 609 610 * --------------------------------------------------------------------------------------------------------------------- 611 AT SELECTION-SCREEN ON VALUE-REQUEST FOR SOCLASS-LOW. 612 * --------------------------------------------------------------------------------------------------------------------- 613 CALL FUNCTION 'F4_DD_ALLTYPES' 614 EXPORTING 615 OBJECT = SOCLASS-LOW 616 SUPPRESS_SELECTION = 'X' 617 DISPLAY_ONLY = '' 618 ONLY_TYPES_FOR_CLIFS = 'X' 619 IMPORTING 620 RESULT = SOCLASS-LOW. 621 622 * --------------------------------------------------------------------------------------------------------------------- 623 AT SELECTION-SCREEN ON VALUE-REQUEST FOR SOCLASS-HIGH. 624 * --------------------------------------------------------------------------------------------------------------------- 625 CALL FUNCTION 'F4_DD_ALLTYPES' 626 EXPORTING 627 OBJECT = SOCLASS-HIGH 628 SUPPRESS_SELECTION = 'X' 629 DISPLAY_ONLY = '' 630 ONLY_TYPES_FOR_CLIFS = 'X' 631 IMPORTING 632 RESULT = SOCLASS-HIGH. 633 634 * --------------------------------------------------------------------------------------------------------------------- 635 AT SELECTION-SCREEN ON VALUE-REQUEST FOR SOFNAME-LOW. 636 * --------------------------------------------------------------------------------------------------------------------- 637 CALL FUNCTION 'REPOSITORY_INFO_SYSTEM_F4' 638 EXPORTING 639 OBJECT_TYPE = 'FUNC' 640 OBJECT_NAME = SOFNAME-LOW 641 SUPPRESS_SELECTION = 'X' 642 USE_ALV_GRID = '' 643 WITHOUT_PERSONAL_LIST = '' 644 IMPORTING 645 OBJECT_NAME_SELECTED = SOFNAME-LOW 646 EXCEPTIONS 647 CANCEL = 1. 648 649 * --------------------------------------------------------------------------------------------------------------------- 650 AT SELECTION-SCREEN ON VALUE-REQUEST FOR SOFNAME-HIGH. 651 * --------------------------------------------------------------------------------------------------------------------- 652 CALL FUNCTION 'REPOSITORY_INFO_SYSTEM_F4' 653 EXPORTING 654 OBJECT_TYPE = 'FUNC' 655 OBJECT_NAME = SOFNAME-HIGH 656 SUPPRESS_SELECTION = 'X' 657 USE_ALV_GRID = '' 658 WITHOUT_PERSONAL_LIST = '' 659 IMPORTING 660 OBJECT_NAME_SELECTED = SOFNAME-HIGH 661 EXCEPTIONS 662 CANCEL = 1. 663 664 * --------------------------------------------------------------------------------------------------------------------- 665 AT SELECTION-SCREEN ON VALUE-REQUEST FOR SOFGROUP-LOW. 666 * --------------------------------------------------------------------------------------------------------------------- 667 CALL FUNCTION 'REPOSITORY_INFO_SYSTEM_F4' 668 EXPORTING 669 OBJECT_TYPE = 'FUGR' 670 OBJECT_NAME = SOFGROUP-LOW 671 SUPPRESS_SELECTION = 'X' 672 USE_ALV_GRID = '' 673 WITHOUT_PERSONAL_LIST = '' 674 IMPORTING 675 OBJECT_NAME_SELECTED = SOFGROUP-LOW 676 EXCEPTIONS 677 CANCEL = 1. 678 679 * --------------------------------------------------------------------------------------------------------------------- 680 AT SELECTION-SCREEN ON VALUE-REQUEST FOR SOFGROUP-HIGH. 681 * --------------------------------------------------------------------------------------------------------------------- 682 CALL FUNCTION 'REPOSITORY_INFO_SYSTEM_F4' 683 EXPORTING 684 OBJECT_TYPE = 'FUGR' 685 OBJECT_NAME = SOFGROUP-HIGH 686 SUPPRESS_SELECTION = 'X' 687 USE_ALV_GRID = '' 688 WITHOUT_PERSONAL_LIST = '' 689 IMPORTING 690 OBJECT_NAME_SELECTED = SOFGROUP-HIGH 691 EXCEPTIONS 692 CANCEL = 1. 693 694 *---------------------------------------------------------------------------------------------------------------------- 695 * initialisation 696 *---------------------------------------------------------------------------------------------------------------------- 697 INITIALIZATION. 698 * Parameter screen texts. 699 TBLOCK1 = 'Author (Optional)'. 700 T$TMP = 'Programs only: include local objects'. 701 TBLOCK2 = 'Objects to download'. 702 TBLOCK3 = 'Additional downloads for programs, function modules and classes'. 703 TBLOCK4 = 'Download parameters'. 704 TBLOCK5 = 'Display options'. 705 TAUTH = 'Author name'. 706 TPMOD = 'Include programs modified by author'. 707 TCUST = 'Only customer objects'. 708 TNRANGE = 'Alt customer name range'. 709 TRTABLE = 'Tables / Structures'. 710 TPTABLE = 'Table name'. 711 TTNOTE = 'Note: tables are stored under the username of the last person who modified them'. 712 TRFUNC = 'Function modules'. 713 TPFNAME = 'Function name'. 714 TFGROUP = 'Function group'. 715 TRCLASS = 'Classes'. 716 TPCNAME = 'Class name'. 717 TMESS = 'Message class'. 718 TMNAME = 'Class name'. 719 TMLANG = 'Language'. 720 TPROG = 'Programs'. 721 TRPNAME = 'Program name'. 722 TPACK = 'Package'. 723 TPTXT = 'Text document'. 724 TPHTML = 'HTML document'. 725 TCOMM = 'Highlight comments'. 726 TBACK = 'Include background colour'. 727 TPTEXT = 'Text elements'. 728 TPINC = 'Include programs'. 729 TRECC = 'Recursive search'. 730 TPPATH = 'File path'. 731 TSPATH = 'Logical file name'. 732 TPMES = 'Message classes'. 733 TPFUNC = 'Function modules'. 734 TDOC = 'Function module documentation'. 735 TRECF = 'Recursive search'. 736 TPSCR = 'Screens'. 737 TPDICT = 'Dictionary structures'. 738 TSORTT = 'Sort table fields alphabetically'. 739 TSERV = 'Download to server'. 740 TPC = 'Download to PC'. 741 TREP = 'Display download report'. 742 TPROMESS = 'Display progress messages'. 743 744 * Determine the frontend operating system type. 745 IF SY-BATCH IS INITIAL. 746 PERFORM DETERMINEFRONTENDOPSYSTEM USING FRONTENDSLASHSEPARATOR FRONTENDOPSYSTEM. 747 ENDIF. 748 PERFORM DETERMINESERVEROPSYSTEM USING SERVERSLASHSEPARATOR SERVERFILESYSTEM SERVEROPSYSTEM. 749 750 * Determine if the external command exists. If it doesn't then disable the server input field 751 PERFORM FINDEXTERNALCOMMAND. 752 753 *---------------------------------------------------------------------------------------------------------------------- 754 * start-of-selection. 755 *---------------------------------------------------------------------------------------------------------------------- 756 START-OF-SELECTION. 757 758 PERFORM CHECKCOMBOBOXES. 759 PERFORM FILLSELECTIONRANGES. 760 STARTTIME = SY-UZEIT. 761 762 * Don't display status messages if we are running in the background 763 IF NOT SY-BATCH IS INITIAL. 764 PPROMESS = ''. 765 ENDIF. 766 767 * Fool the HTML routines to stop them hyperlinking anything with a space in them 768 IF PCNAME IS INITIAL. 769 CUSTOMERNAMESPACE = '^'. 770 ELSE. 771 CUSTOMERNAMESPACE = PCNAME. 772 ENDIF. 773 774 * Determine which operating slash and download directory to use 775 CASE 'X'. 776 WHEN PPC. 777 SLASHSEPARATORTOUSE = FRONTENDSLASHSEPARATOR. 778 DOWNLOADFOLDER = PFOLDER. 779 WHEN PSERV. 780 SLASHSEPARATORTOUSE = SERVERSLASHSEPARATOR. 781 DOWNLOADFOLDER = SERVERFOLDER. 782 ENDCASE. 783 784 * Main program flow. 785 CASE 'X'. 786 * Select tables 787 WHEN RTABLE. 788 PERFORM RETRIEVETABLES USING IDICTIONARY[] 789 SOTABLENAMES[] 790 SOAUTHOR[]. 791 792 * Select message classes tables 793 WHEN RMESS. 794 PERFORM RETRIEVEMESSAGECLASS USING IMESSAGES[] 795 SOAUTHOR[] "Author 796 PMNAME "Message class name 797 PMLANG "Message class language 798 PMOD. "Modified by author 799 800 * Select function modules 801 WHEN RFUNC. 802 PERFORM RETRIEVEFUNCTIONS USING SOFUNCTIONNAME[] "Function name 803 SOFUNCTIONGROUP[] "Function group 804 IFUNCTIONS[] "Found functions 805 SOAUTHOR[] "Author 806 PTEXT "Get text elements 807 PSCR "Get screens 808 PCUST "Customer data only 809 CUSTOMERNAMESPACE. "Customer name range 810 811 812 LOOP AT IFUNCTIONS. 813 * Find Dict structures, messages, functions, includes etc. 814 PERFORM SCANFORADDITIONALFUNCSTUFF USING IFUNCTIONS[] 815 PRECI "Search for includes recursively 816 PRECF "Search for functions recursively 817 PINC "Search for includes 818 PFUNC "Search for functions 819 PDICT "search for dictionary objects 820 PMESS "Search for messages 821 PCUST "Customer data only 822 CUSTOMERNAMESPACE. "Customer name range 823 ENDLOOP. 824 825 * Select Classes 826 WHEN RCLASS. 827 PERFORM RETRIEVECLASSES USING ICLASSES[] 828 IFUNCTIONS[] 829 SOCLASSNAME[] "Class name 830 SOAUTHOR[] "Author 831 CUSTOMERNAMESPACE "Customer name range 832 PMOD "Also modified by author 833 PCUST "Customer object only 834 PMESS "Find messages 835 PTEXT "Text Elements 836 PDICT "Dictionary structures 837 PFUNC "Get functions 838 PINC "Get includes 839 PRECF "Search recursively for functions 840 PRECI "Search recursively for includes 841 'X' "Search recursively for classes 842 PMLANG. "Language 843 844 LOOP AT IFUNCTIONS. 845 * Find Dict structures, messages, functions, includes etc. 846 PERFORM SCANFORADDITIONALFUNCSTUFF USING IFUNCTIONS[] 847 PRECI "Search for includes recursively 848 PRECF "Search for functions recursively 849 PINC "Search for includes 850 PFUNC "Search for functions 851 PDICT "search for dictionary objects 852 PMESS "Search for messages 853 PCUST "Customer data only 854 CUSTOMERNAMESPACE. "Customer name range 855 ENDLOOP. 856 857 * Select programs 858 WHEN RPROG. 859 PERFORM RETRIEVEPROGRAMS USING IPROGRAMS[] 860 IFUNCTIONS[] 861 SOPROGRAMNAME[] "Program name 862 SOAUTHOR[] "Author 863 CUSTOMERNAMESPACE "Customer name range 864 PMOD "Also modified by author 865 PCUST "Customer object only 866 PMESS "Find messages 867 PTEXT "Text Elements 868 PDICT "Dictionay structures 869 PFUNC "Get functions 870 PINC "Get includes 871 PSCR "Get screens 872 PRECF "Search recursively for functions 873 PRECI "Search recursively for includes 874 P$TMP "local objects 875 PPACK. "Package 876 ENDCASE. 877 878 *---------------------------------------------------------------------------------------------------------------------- 879 * end-of-selection 880 *---------------------------------------------------------------------------------------------------------------------- 881 END-OF-SELECTION. 882 883 IF FORCEDEXIT = 0. 884 * Set the file extension and output type of the file 885 IF PTXT IS INITIAL. 886 DOWNLOADFILEEXTENSION = HTMLEXTENSION. 887 ELSE. 888 DOWNLOADFILEEXTENSION = TEXTEXTENSION. 889 ENDIF. 890 891 * Decide what to download 892 CASE 'X'. 893 * Download tables 894 WHEN RTABLE. 895 IF NOT ( IDICTIONARY[] IS INITIAL ). 896 PERFORM DOWNLOADDDSTRUCTURES USING IDICTIONARY[] 897 DOWNLOADFOLDER 898 HTMLEXTENSION 899 SPACE 900 PSORTT 901 SLASHSEPARATORTOUSE 902 PSERV 903 PPROMESS. 904 905 * Free up any memory used for caching HTML versions of tables 906 LOOP AT IDICTIONARY. 907 FREE MEMORY ID IDICTIONARY-TABLENAME. 908 ENDLOOP. 909 910 * Display donwload report 911 IF NOT PREP IS INITIAL. 912 GET TIME. 913 RUNTIME = SY-UZEIT - STARTTIME. 914 PERFORM FILLTREENODETABLES USING IDICTIONARY[] 915 ITREEDISPLAY[] 916 RUNTIME. 917 ENDIF. 918 919 CLEAR IDICTIONARY[]. 920 ENDIF. 921 922 * Download message class 923 WHEN RMESS. 924 IF NOT ( IMESSAGES[] IS INITIAL ). 925 SORT IMESSAGES ASCENDING BY ARBGB MSGNR. 926 LOOP AT IMESSAGES. 927 APPEND IMESSAGES TO ISINGLEMESSAGECLASS. 928 AT END OF ARBGB. 929 PERFORM DOWNLOADMESSAGECLASS USING ISINGLEMESSAGECLASS[] 930 IMESSAGES-ARBGB 931 DOWNLOADFOLDER 932 DOWNLOADFILEEXTENSION 933 PHTML 934 SPACE 935 PCOMM 936 CUSTOMERNAMESPACE 937 PINC 938 PDICT 939 PMESS 940 SLASHSEPARATORTOUSE 941 PSERV 942 PPROMESS. 943 CLEAR ISINGLEMESSAGECLASS[]. 944 ENDAT. 945 ENDLOOP. 946 947 * Display download report 948 IF NOT PREP IS INITIAL. 949 GET TIME. 950 RUNTIME = SY-UZEIT - STARTTIME. 951 PERFORM FILLTREENODEMESSAGES USING IMESSAGES[] 952 ITREEDISPLAY[] 953 RUNTIME. 954 ENDIF. 955 956 CLEAR IMESSAGES[]. 957 ENDIF. 958 959 * Download functions 960 WHEN RFUNC. 961 IF NOT ( IFUNCTIONS[] IS INITIAL ). 962 PERFORM DOWNLOADFUNCTIONS USING IFUNCTIONS[] 963 DOWNLOADFOLDER 964 DOWNLOADFILEEXTENSION 965 SPACE 966 PDOC 967 PHTML 968 PCOMM 969 CUSTOMERNAMESPACE 970 PINC 971 PDICT 972 TEXTEXTENSION 973 HTMLEXTENSION 974 PSORTT 975 SLASHSEPARATORTOUSE 976 PSERV 977 PPROMESS. 978 979 * Free up any memory used for caching HTML versions of tables 980 LOOP AT IFUNCTIONS. 981 LOOP AT IFUNCTIONS-IDICTSTRUCT ASSIGNING <WADICTSTRUCT>. 982 FREE MEMORY ID <WADICTSTRUCT>-TABLENAME. 983 ENDLOOP. 984 ENDLOOP. 985 986 * Display donwload report 987 IF NOT PREP IS INITIAL. 988 GET TIME. 989 RUNTIME = SY-UZEIT - STARTTIME. 990 PERFORM FILLTREENODEFUNCTIONS USING IFUNCTIONS[] 991 ITREEDISPLAY[] 992 RUNTIME. 993 ENDIF. 994 995 CLEAR IFUNCTIONS[]. 996 ENDIF. 997 998 * Download Classes 999 WHEN RCLASS. 1000 IF NOT ( ICLASSES[] IS INITIAL ). 1001 PERFORM DOWNLOADCLASSES USING ICLASSES[] 1002 IFUNCTIONS[] 1003 DOWNLOADFOLDER 1004 DOWNLOADFILEEXTENSION 1005 HTMLEXTENSION 1006 TEXTEXTENSION 1007 PHTML 1008 PCOMM 1009 CUSTOMERNAMESPACE 1010 PINC 1011 PDICT 1012 PDOC 1013 PSORTT 1014 SLASHSEPARATORTOUSE 1015 PSERV 1016 PPROMESS. 1017 1018 * Free up any memory used for caching HTML versions of tables 1019 LOOP AT IFUNCTIONS. 1020 LOOP AT IFUNCTIONS-IDICTSTRUCT ASSIGNING <WADICTSTRUCT>. 1021 FREE MEMORY ID <WADICTSTRUCT>-TABLENAME. 1022 ENDLOOP. 1023 ENDLOOP. 1024 1025 * Free up any memory used for caching HTML versions of tables 1026 LOOP AT IPROGRAMS. 1027 LOOP AT IPROGRAMS-IDICTSTRUCT ASSIGNING <WADICTSTRUCT>. 1028 FREE MEMORY ID <WADICTSTRUCT>-TABLENAME. 1029 ENDLOOP. 1030 ENDLOOP. 1031 1032 * Display donwload report 1033 IF NOT PREP IS INITIAL. 1034 GET TIME. 1035 RUNTIME = SY-UZEIT - STARTTIME. 1036 PERFORM FILLTREENODECLASSES USING ICLASSES[] 1037 IFUNCTIONS[] 1038 ITREEDISPLAY[] 1039 RUNTIME. 1040 ENDIF. 1041 1042 CLEAR ICLASSES[]. 1043 CLEAR IFUNCTIONS[]. 1044 ENDIF. 1045 1046 * Download programs 1047 WHEN RPROG. 1048 IF NOT ( IPROGRAMS[] IS INITIAL ). 1049 PERFORM DOWNLOADPROGRAMS USING IPROGRAMS[] 1050 IFUNCTIONS[] 1051 DOWNLOADFOLDER 1052 DOWNLOADFILEEXTENSION 1053 HTMLEXTENSION 1054 TEXTEXTENSION 1055 PHTML 1056 PCOMM 1057 CUSTOMERNAMESPACE 1058 PINC 1059 PDICT 1060 PDOC 1061 PSORTT 1062 SLASHSEPARATORTOUSE 1063 PSERV 1064 PPROMESS. 1065 1066 * Free up any memory used for caching HTML versions of tables 1067 LOOP AT IFUNCTIONS. 1068 LOOP AT IFUNCTIONS-IDICTSTRUCT ASSIGNING <WADICTSTRUCT>. 1069 FREE MEMORY ID <WADICTSTRUCT>-TABLENAME. 1070 ENDLOOP. 1071 ENDLOOP. 1072 1073 * Free up any memory used for caching HTML versions of tables 1074 LOOP AT IPROGRAMS. 1075 LOOP AT IPROGRAMS-IDICTSTRUCT ASSIGNING <WADICTSTRUCT>. 1076 FREE MEMORY ID <WADICTSTRUCT>-TABLENAME. 1077 ENDLOOP. 1078 ENDLOOP. 1079 1080 * Display donwload report 1081 IF NOT PREP IS INITIAL. 1082 GET TIME. 1083 RUNTIME = SY-UZEIT - STARTTIME. 1084 PERFORM FILLTREENODEPROGRAMS USING IPROGRAMS[] 1085 IFUNCTIONS[] 1086 ITREEDISPLAY[] 1087 RUNTIME. 1088 ENDIF. 1089 1090 CLEAR IPROGRAMS[]. 1091 CLEAR IFUNCTIONS[]. 1092 ENDIF. 1093 ENDCASE. 1094 1095 IF NOT PREP IS INITIAL. 1096 IF NOT ( ITREEDISPLAY[] IS INITIAL ). 1097 PERFORM DISPLAYTREE USING ITREEDISPLAY[]. 1098 ELSE. 1099 STATUSBARMESSAGE = 'No items found matching selection criteria'. 1100 PERFORM DISPLAYSTATUS USING STATUSBARMESSAGE 2. 1101 ENDIF. 1102 ENDIF. 1103 ENDIF. 1104 1105 *--- Memory IDs 1106 * User name 1107 SET PARAMETER ID 'MAUTH' FIELD PAUTH. 1108 * Message class 1109 SET PARAMETER ID 'MMNAME' FIELD PMNAME. 1110 * Customer namespace 1111 SET PARAMETER ID 'MNAMESPACE' FIELD PCNAME. 1112 * Folder 1113 SET PARAMETER ID 'MFOLDER' FIELD PFOLDER. 1114 * Logical filepath 1115 SET PARAMETER ID 'MLOGICAL' FIELD PLOGICAL. 1116 * Package 1117 SET PARAMETER ID 'MPACK' FIELD PPACK. 1118 * Text element checkbox 1119 SET PARAMETER ID 'MTEXT' FIELD PTEXT. 1120 * Messages checkbox 1121 SET PARAMETER ID 'MMESS' FIELD PMESS. 1122 * Includes checkbox 1123 SET PARAMETER ID 'MINC' FIELD PINC. 1124 * Recursive includes checkbox. 1125 SET PARAMETER ID 'MRECI' FIELD PRECI. 1126 * Functions checkbox 1127 SET PARAMETER ID 'MFUNC' FIELD PFUNC. 1128 * Recursive functions checkbox 1129 SET PARAMETER ID 'MRECF' FIELD PRECF. 1130 * Function module documntation checkbox 1131 SET PARAMETER ID 'MDOC' FIELD PDOC. 1132 * Screens checkbox 1133 SET PARAMETER ID 'MSCR' FIELD PSCR. 1134 * Dictionary checkbox 1135 SET PARAMETER ID 'MDICT' FIELD PDICT. 1136 * Sort table ascending checkBox 1137 SET PARAMETER ID 'MSORTT' FIELD PSORTT. 1138 1139 *********************************************************************************************************************** 1140 ***************************************************SUBROUTINES********************************************************* 1141 *********************************************************************************************************************** 1142 1143 *---------------------------------------------------------------------------------------------------------------------- 1144 * checkComboBoxes... Check input parameters 1145 *---------------------------------------------------------------------------------------------------------------------- 1146 FORM CHECKCOMBOBOXES. 1147 1148 IF PAUTH IS INITIAL. 1149 CASE 'X'. 1150 WHEN RTABLE. 1151 IF SOTABLE[] IS INITIAL. 1152 STATUSBARMESSAGE = 'You must enter either a table name or author.'. 1153 ENDIF. 1154 WHEN RFUNC. 1155 IF ( SOFNAME[] IS INITIAL ) AND ( SOFGROUP[] IS INITIAL ). 1156 IF SOFNAME[] IS INITIAL. 1157 STATUSBARMESSAGE = 'You must enter either a function name or author.'. 1158 ELSE. 1159 IF SOFGROUP[] IS INITIAL. 1160 STATUSBARMESSAGE = 'You must enter either a function group, or an author name.'. 1161 ENDIF. 1162 ENDIF. 1163 ENDIF. 1164 WHEN RPROG. 1165 IF SOPROG[] IS INITIAL. 1166 STATUSBARMESSAGE = 'You must enter either a program name or author name.'. 1167 ENDIF. 1168 ENDCASE. 1169 ELSE. 1170 * Check the user name of the person objects are to be downloaded for 1171 IF PAUTH = 'SAP*' OR PAUTH = 'SAP'. 1172 STATUSBARMESSAGE = 'Sorry cannot download all objects for SAP standard user'. 1173 ENDIF. 1174 ENDIF. 1175 1176 IF NOT STATUSBARMESSAGE IS INITIAL. 1177 PERFORM DISPLAYSTATUS USING STATUSBARMESSAGE 3. 1178 FORCEDEXIT = 1. 1179 STOP. 1180 ENDIF. 1181 ENDFORM. "checkComboBoxes 1182 1183 *---------------------------------------------------------------------------------------------------------------------- 1184 * fillSelectionRanges... for selection routines 1185 *---------------------------------------------------------------------------------------------------------------------- 1186 FORM FILLSELECTIONRANGES. 1187 1188 DATA: STRLENGTH TYPE I. 1189 1190 STRLENGTH = STRLEN( PCNAME ). 1191 1192 IF NOT PAUTH IS INITIAL. 1193 SOAUTHOR-SIGN = 'I'. 1194 SOAUTHOR-OPTION = 'EQ'. 1195 SOAUTHOR-LOW = PAUTH. 1196 APPEND SOAUTHOR. 1197 ENDIF. 1198 1199 * Tables 1200 IF NOT SOTABLE IS INITIAL. 1201 SOTABLENAMES[] = SOTABLE[]. 1202 * Add in the customer namespace if we need to 1203 IF NOT PCNAME IS INITIAL. 1204 LOOP AT SOTABLENAMES. 1205 IF SOTABLENAMES-LOW+0(STRLENGTH) <> PCNAME. 1206 CONCATENATE PCNAME SOTABLENAMES-LOW INTO SOTABLENAMES-LOW. 1207 ENDIF. 1208 1209 IF SOTABLENAMES-HIGH+0(STRLENGTH) <> PCNAME. 1210 CONCATENATE PCNAME SOTABLENAMES-HIGH INTO SOTABLENAMES-HIGH. 1211 ENDIF. 1212 1213 MODIFY SOTABLENAMES. 1214 ENDLOOP. 1215 ENDIF. 1216 ENDIF. 1217 1218 * Function names 1219 IF NOT SOFNAME IS INITIAL. 1220 SOFUNCTIONNAME[] = SOFNAME[]. 1221 * Add in the customer namespace if we need to 1222 IF NOT PCNAME IS INITIAL. 1223 LOOP AT SOFUNCTIONNAME. 1224 IF SOFUNCTIONNAME-LOW+0(STRLENGTH) <> PCNAME. 1225 CONCATENATE PCNAME SOFUNCTIONNAME-LOW INTO SOFUNCTIONNAME-LOW. 1226 ENDIF. 1227 1228 IF SOFUNCTIONNAME-HIGH+0(STRLENGTH) <> PCNAME. 1229 CONCATENATE PCNAME SOFUNCTIONNAME-HIGH INTO SOFUNCTIONNAME-HIGH. 1230 ENDIF. 1231 1232 MODIFY SOFUNCTIONNAME. 1233 ENDLOOP. 1234 ENDIF. 1235 ENDIF. 1236 1237 * Function group 1238 IF NOT SOFGROUP IS INITIAL. 1239 SOFUNCTIONGROUP[] = SOFGROUP[]. 1240 * Add in the customer namespace if we need to 1241 IF NOT PCNAME IS INITIAL. 1242 LOOP AT SOFUNCTIONNAME. 1243 IF SOFUNCTIONGROUP-LOW+0(STRLENGTH) <> PCNAME. 1244 CONCATENATE PCNAME SOFUNCTIONGROUP-LOW INTO SOFUNCTIONGROUP-LOW. 1245 ENDIF. 1246 1247 IF SOFUNCTIONGROUP-HIGH+0(STRLENGTH) <> PCNAME. 1248 CONCATENATE PCNAME SOFUNCTIONGROUP-HIGH INTO SOFUNCTIONGROUP-HIGH. 1249 ENDIF. 1250 1251 MODIFY SOFUNCTIONGROUP. 1252 ENDLOOP. 1253 ENDIF. 1254 ENDIF. 1255 1256 * Class names 1257 IF NOT SOCLASS IS INITIAL. 1258 SOCLASSNAME[] = SOCLASS[]. 1259 * Add in the customer namespace if we need to 1260 IF NOT PCNAME IS INITIAL. 1261 LOOP AT SOCLASSNAME. 1262 IF SOCLASSNAME-LOW+0(STRLENGTH) <> PCNAME. 1263 CONCATENATE PCNAME SOCLASSNAME-LOW INTO SOCLASSNAME-LOW. 1264 ENDIF. 1265 1266 IF SOCLASSNAME-HIGH+0(STRLENGTH) <> PCNAME. 1267 CONCATENATE PCNAME SOCLASSNAME-HIGH INTO SOCLASSNAME-HIGH. 1268 ENDIF. 1269 1270 MODIFY SOCLASSNAME. 1271 ENDLOOP. 1272 ENDIF. 1273 ENDIF. 1274 1275 * Program names 1276 IF NOT SOPROG IS INITIAL. 1277 SOPROGRAMNAME[] = SOPROG[]. 1278 * Add in the customer namespace if we need to 1279 IF NOT PCNAME IS INITIAL. 1280 LOOP AT SOPROGRAMNAME. 1281 IF SOPROGRAMNAME-LOW+0(STRLENGTH) <> PCNAME. 1282 CONCATENATE PCNAME SOPROGRAMNAME-LOW INTO SOPROGRAMNAME-LOW. 1283 ENDIF. 1284 1285 IF SOPROGRAMNAME-HIGH+0(STRLENGTH) <> PCNAME. 1286 CONCATENATE PCNAME SOPROGRAMNAME-HIGH INTO SOPROGRAMNAME-HIGH. 1287 ENDIF. 1288 1289 MODIFY SOPROGRAMNAME. 1290 ENDLOOP. 1291 ENDIF. 1292 ENDIF. 1293 ENDFORM. " fillSelectionRanges 1294 1295 *---------------------------------------------------------------------------------------------------------------------- 1296 * retrieveTables... Search for tables in dictionary 1297 *---------------------------------------------------------------------------------------------------------------------- 1298 FORM RETRIEVETABLES USING ILOCDICTSTRUCTURE LIKE IDICTIONARY[] 1299 SOTABLE LIKE SOTABLE[] 1300 SOAUTHOR LIKE SOAUTHOR[]. 1301 1302 DATA: WADICTSTRUCTURE TYPE TDICTTABLE. 1303 1304 SELECT TABNAME 1305 FROM DD02L 1306 INTO WADICTSTRUCTURE-TABLENAME 1307 WHERE TABNAME IN SOTABLE 1308 AND TABCLASS <> 'CLUSTER' 1309 AND TABCLASS <> 'POOL' 1310 AND TABCLASS <> 'VIEW' 1311 AND AS4USER IN SOAUTHOR 1312 AND AS4LOCAL = 'A'. 1313 1314 PERFORM FINDTABLEDESCRIPTION USING WADICTSTRUCTURE-TABLENAME 1315 WADICTSTRUCTURE-TABLETITLE. 1316 1317 PERFORM FINDTABLEDEFINITION USING WADICTSTRUCTURE-TABLENAME 1318 WADICTSTRUCTURE-ISTRUCTURE[]. 1319 1320 APPEND WADICTSTRUCTURE TO ILOCDICTSTRUCTURE. 1321 CLEAR WADICTSTRUCTURE. 1322 ENDSELECT. 1323 ENDFORM. "retrieveTables 1324 1325 *---------------------------------------------------------------------------------------------------------------------- 1326 * findTableDescription... Search for table description in dictionary 1327 *---------------------------------------------------------------------------------------------------------------------- 1328 FORM FINDTABLEDESCRIPTION USING VALUE(TABLENAME) 1329 TABLEDESCRIPTION. 1330 1331 SELECT SINGLE DDTEXT 1332 FROM DD02T 1333 INTO TABLEDESCRIPTION 1334 WHERE TABNAME = TABLENAME 1335 AND DDLANGUAGE = SY-LANGU. 1336 ENDFORM. "findTableDescription 1337 1338 *---------------------------------------------------------------------------------------------------------------------- 1339 * findTableDefinition... Find the structure of a table from the SAP database. 1340 *---------------------------------------------------------------------------------------------------------------------- 1341 FORM FINDTABLEDEFINITION USING VALUE(TABLENAME) 1342 IDICTSTRUCT LIKE DUMIDICTSTRUCTURE[]. 1343 1344 DATA GOTSTATE LIKE DCOBJIF-GOTSTATE. 1345 DATA: DEFINITION TYPE STANDARD TABLE OF DD03P WITH HEADER LINE. 1346 DATA: WADICTSTRUCT TYPE TDICTTABLESTRUCTURE. 1347 1348 CALL FUNCTION 'DDIF_TABL_GET' 1349 EXPORTING 1350 NAME = TABLENAME 1351 STATE = 'A' 1352 LANGU = SY-LANGU 1353 IMPORTING 1354 GOTSTATE = GOTSTATE 1355 TABLES 1356 DD03P_TAB = DEFINITION 1357 EXCEPTIONS 1358 ILLEGAL_INPUT = 1 1359 OTHERS = 2. 1360 1361 IF SY-SUBRC = 0 AND GOTSTATE = 'A'. 1362 LOOP AT DEFINITION. 1363 MOVE-CORRESPONDING DEFINITION TO WADICTSTRUCT. 1364 PERFORM REMOVELEADINGZEROS CHANGING WADICTSTRUCT-POSITION. 1365 PERFORM REMOVELEADINGZEROS CHANGING WADICTSTRUCT-LENG. 1366 APPEND WADICTSTRUCT TO IDICTSTRUCT. 1367 ENDLOOP. 1368 ENDIF. 1369 ENDFORM. "findTableDefinition 1370 1371 *---------------------------------------------------------------------------------------------------------------------- 1372 * retrieveMessageClass... Retrieve a message class from the SAP database 1373 *---------------------------------------------------------------------------------------------------------------------- 1374 FORM RETRIEVEMESSAGECLASS USING ILOCMESSAGES LIKE IMESSAGES[] 1375 RANGEAUTHOR LIKE SOAUTHOR[] 1376 VALUE(MESSAGECLASSNAME) 1377 VALUE(MESSAGECLASSLANG) 1378 VALUE(MODIFIEDBY). 1379 1380 DATA: WAMESSAGE TYPE TMESSAGE. 1381 1382 IF NOT MESSAGECLASSNAME IS INITIAL. 1383 SELECT * FROM T100 1384 APPENDING CORRESPONDING FIELDS OF TABLE ILOCMESSAGES 1385 WHERE SPRSL = MESSAGECLASSLANG 1386 AND ARBGB = MESSAGECLASSNAME. 1387 1388 LOOP AT ILOCMESSAGES INTO WAMESSAGE. 1389 SELECT SINGLE STEXT 1390 FROM T100A "#EC CI_BUFFJOIN 1391 INTO WAMESSAGE-STEXT 1392 WHERE ARBGB = WAMESSAGE-ARBGB. 1393 MODIFY ILOCMESSAGES FROM WAMESSAGE INDEX SY-TABIX. 1394 ENDLOOP. 1395 ELSE. 1396 IF MODIFIEDBY IS INITIAL. 1397 * Select by author 1398 SELECT T100~ARBGB "#EC CI_BUFFJOIN 1399 T100~MSGNR 1400 T100~TEXT 1401 T100A~STEXT 1402 APPENDING CORRESPONDING FIELDS OF TABLE ILOCMESSAGES 1403 FROM T100 1404 INNER JOIN T100A ON T100A~ARBGB = T100~ARBGB 1405 WHERE T100A~MASTERLANG = MESSAGECLASSLANG 1406 AND T100A~RESPUSER IN RANGEAUTHOR[]. 1407 ELSE. 1408 * Select also by the last person who modified the message class 1409 SELECT T100~ARBGB "#EC CI_BUFFJOIN 1410 T100~MSGNR 1411 T100~TEXT 1412 T100A~STEXT 1413 APPENDING CORRESPONDING FIELDS OF TABLE ILOCMESSAGES 1414 FROM T100 1415 INNER JOIN T100A ON T100A~ARBGB = T100~ARBGB 1416 WHERE T100A~MASTERLANG = MESSAGECLASSLANG 1417 AND T100A~RESPUSER IN RANGEAUTHOR[] 1418 AND T100A~LASTUSER IN RANGEAUTHOR[]. 1419 ENDIF. 1420 ENDIF. 1421 ENDFORM. "retrieveMessageClass 1422 1423 *---------------------------------------------------------------------------------------------------------------------- 1424 * retrieveFunctions... Retrieve function modules from SAP DB. May be called in one of two ways 1425 *---------------------------------------------------------------------------------------------------------------------- 1426 FORM RETRIEVEFUNCTIONS USING SOFNAME LIKE SOFUNCTIONNAME[] 1427 SOFGROUP LIKE SOFUNCTIONGROUP[] 1428 ILOCFUNCTIONNAMES LIKE IFUNCTIONS[] 1429 VALUE(SOLOCAUTHOR) LIKE SOAUTHOR[] 1430 VALUE(GETTEXTELEMENTS) 1431 VALUE(GETSCREENS) 1432 VALUE(CUSTOMERONLY) 1433 VALUE(CUSTOMERNAMERANGE). 1434 1435 RANGES: RANGEFUNCNAME FOR TFDIR-FUNCNAME. 1436 RANGES: RANGEFUNCGROUP FOR ENLFDIR-AREA. 1437 DATA: WAFUNCTIONNAME TYPE TFUNCTION. 1438 DATA: NOGROUPSFOUND TYPE I VALUE TRUE. 1439 DATA: PREVIOUSFG TYPE V_FDIR-AREA. 1440 1441 RANGEFUNCNAME[] = SOFNAME[]. 1442 RANGEFUNCGROUP[] = SOFGROUP[]. 1443 1444 IF NOT SOLOCAUTHOR[] IS INITIAL. 1445 *-- Need to select all function groups by author 1446 SELECT AREA 1447 FROM TLIBV 1448 INTO RANGEFUNCGROUP-LOW 1449 WHERE UNAME IN SOLOCAUTHOR 1450 AND AREA IN SOFGROUP[]. 1451 1452 RANGEFUNCGROUP-SIGN = 'I'. 1453 RANGEFUNCGROUP-OPTION = 'EQ'. 1454 APPEND RANGEFUNCGROUP. 1455 NOGROUPSFOUND = FALSE. 1456 ENDSELECT. 1457 ELSE. 1458 NOGROUPSFOUND = FALSE. 1459 ENDIF. 1460 1461 IF NOGROUPSFOUND = FALSE. 1462 * select by function name and/or function group. 1463 SELECT FUNCNAME AREA 1464 FROM V_FDIR 1465 INTO (WAFUNCTIONNAME-FUNCTIONNAME, 1466 WAFUNCTIONNAME-FUNCTIONGROUP) 1467 WHERE FUNCNAME IN RANGEFUNCNAME 1468 AND AREA IN RANGEFUNCGROUP 1469 AND GENERATED = '' 1470 ORDER BY AREA. 1471 1472 APPEND WAFUNCTIONNAME TO ILOCFUNCTIONNAMES. 1473 ENDSELECT. 1474 ENDIF. 1475 1476 LOOP AT ILOCFUNCTIONNAMES INTO WAFUNCTIONNAME. 1477 PERFORM RETRIEVEFUNCTIONDETAIL USING WAFUNCTIONNAME-FUNCTIONNAME 1478 WAFUNCTIONNAME-PROGNAME 1479 WAFUNCTIONNAME-INCLUDENUMBER 1480 WAFUNCTIONNAME-FUNCTIONTITLE. 1481 1482 PERFORM FINDMAINFUNCTIONINCLUDE USING WAFUNCTIONNAME-PROGNAME 1483 WAFUNCTIONNAME-INCLUDENUMBER 1484 WAFUNCTIONNAME-FUNCTIONMAININCLUDE. 1485 1486 PERFORM FINDFUNCTIONTOPINCLUDE USING WAFUNCTIONNAME-PROGNAME 1487 WAFUNCTIONNAME-TOPINCLUDENAME. 1488 1489 * Find all user defined includes within the function group 1490 PERFORM SCANFORFUNCTIONINCLUDES USING WAFUNCTIONNAME-PROGNAME 1491 CUSTOMERONLY 1492 CUSTOMERNAMERANGE 1493 WAFUNCTIONNAME-IINCLUDES[]. 1494 * Find main message class 1495 PERFORM FINDMAINMESSAGECLASS USING WAFUNCTIONNAME-PROGNAME 1496 WAFUNCTIONNAME-MESSAGECLASS. 1497 1498 * Find any screens declared within the main include 1499 IF NOT GETSCREENS IS INITIAL. 1500 IF PREVIOUSFG IS INITIAL OR PREVIOUSFG <> WAFUNCTIONNAME-FUNCTIONGROUP. 1501 PERFORM FINDFUNCTIONSCREENFLOW USING WAFUNCTIONNAME. 1502 1503 * Search for any GUI texts 1504 PERFORM RETRIEVEGUITITLES USING WAFUNCTIONNAME-IGUITITLE[] 1505 WAFUNCTIONNAME-PROGNAME. 1506 ENDIF. 1507 ENDIF. 1508 1509 IF NOT GETTEXTELEMENTS IS INITIAL. 1510 * Find the program texts from out of the database. 1511 PERFORM RETRIEVEPROGRAMTEXTS USING WAFUNCTIONNAME-ISELECTIONTEXTS[] 1512 WAFUNCTIONNAME-ITEXTELEMENTS[] 1513 WAFUNCTIONNAME-PROGNAME. 1514 ENDIF. 1515 1516 PREVIOUSFG = WAFUNCTIONNAME-FUNCTIONGROUP. 1517 MODIFY ILOCFUNCTIONNAMES FROM WAFUNCTIONNAME. 1518 ENDLOOP. 1519 ENDFORM. "retrieveFunctions 1520 1521 *---------------------------------------------------------------------------------------------------------------------- 1522 * retrieveFunctionDetail... Retrieve function module details from SAP DB. 1523 *---------------------------------------------------------------------------------------------------------------------- 1524 FORM RETRIEVEFUNCTIONDETAIL USING VALUE(FUNCTIONNAME) 1525 PROGNAME 1526 INCLUDENAME 1527 TITLETEXT. 1528 1529 SELECT SINGLE PNAME 1530 INCLUDE 1531 FROM TFDIR 1532 INTO (PROGNAME, INCLUDENAME) 1533 WHERE FUNCNAME = FUNCTIONNAME. 1534 1535 IF SY-SUBRC = 0. 1536 SELECT SINGLE STEXT 1537 FROM TFTIT 1538 INTO TITLETEXT 1539 WHERE SPRAS = SY-LANGU 1540 AND FUNCNAME = FUNCTIONNAME. 1541 ENDIF. 1542 ENDFORM. "retrieveFunctionDetail 1543 1544 *---------------------------------------------------------------------------------------------------------------------- 1545 * findMainFunctionInclude... Find the main include that contains the source code 1546 *---------------------------------------------------------------------------------------------------------------------- 1547 FORM FINDMAINFUNCTIONINCLUDE USING VALUE(PROGRAMNAME) 1548 VALUE(INCLUDENO) 1549 INTERNALINCLUDENAME. 1550 DATA: NEWINCLUDENUMBER TYPE STRING. 1551 1552 CONCATENATE '%U' INCLUDENO INTO NEWINCLUDENUMBER. 1553 SELECT SINGLE INCLUDE 1554 FROM D010INC 1555 INTO INTERNALINCLUDENAME 1556 WHERE MASTER = PROGRAMNAME 1557 AND INCLUDE LIKE NEWINCLUDENUMBER. 1558 ENDFORM. "findMainFunctionInclude 1559 1560 *---------------------------------------------------------------------------------------------------------------------- 1561 * findFunctionTopInclude... Find the top include for the function group 1562 *---------------------------------------------------------------------------------------------------------------------- 1563 FORM FINDFUNCTIONTOPINCLUDE USING VALUE(PROGRAMNAME) 1564 TOPINCLUDENAME. 1565 1566 SELECT SINGLE INCLUDE 1567 FROM D010INC 1568 INTO TOPINCLUDENAME 1569 WHERE MASTER = PROGRAMNAME 1570 AND INCLUDE LIKE '%TOP'. 1571 ENDFORM. "findFunctionTopInclude 1572 1573 *---------------------------------------------------------------------------------------------------------------------- 1574 * scanForAdditionalFuncStuff... Search for additional things relating to functions 1575 *---------------------------------------------------------------------------------------------------------------------- 1576 FORM SCANFORADDITIONALFUNCSTUFF USING ILOCFUNCTIONS LIKE IFUNCTIONS[] 1577 VALUE(RECURSIVEINCLUDES) 1578 VALUE(RECURSIVEFUNCTIONS) 1579 VALUE(SEARCHFORINCLUDES) 1580 VALUE(SEARCHFORFUNCTIONS) 1581 VALUE(SEARCHFORDICTIONARY) 1582 VALUE(SEARCHFORMESSAGES) 1583 VALUE(CUSTOMERONLY) 1584 VALUE(CUSTOMERNAMERANGE). 1585 1586 DATA: WAFUNCTION TYPE TFUNCTION. 1587 DATA: WAINCLUDE TYPE TINCLUDE. 1588 1589 LOOP AT ILOCFUNCTIONS INTO WAFUNCTION. 1590 IF NOT SEARCHFORINCLUDES IS INITIAL. 1591 * Search in the main include 1592 PERFORM SCANFORINCLUDEPROGRAMS USING WAFUNCTION-FUNCTIONMAININCLUDE 1593 RECURSIVEINCLUDES 1594 CUSTOMERONLY 1595 CUSTOMERNAMERANGE 1596 WAFUNCTION-IINCLUDES[]. 1597 1598 * Search in the top include 1599 PERFORM SCANFORINCLUDEPROGRAMS USING WAFUNCTION-TOPINCLUDENAME 1600 RECURSIVEINCLUDES 1601 CUSTOMERONLY 1602 CUSTOMERNAMERANGE 1603 WAFUNCTION-IINCLUDES[]. 1604 ENDIF. 1605 1606 IF NOT SEARCHFORFUNCTIONS IS INITIAL. 1607 PERFORM SCANFORFUNCTIONS USING WAFUNCTION-FUNCTIONMAININCLUDE 1608 WAFUNCTION-PROGRAMLINKNAME 1609 RECURSIVEINCLUDES 1610 RECURSIVEFUNCTIONS 1611 CUSTOMERONLY 1612 CUSTOMERNAMERANGE 1613 ILOCFUNCTIONS[]. 1614 ENDIF. 1615 1616 MODIFY ILOCFUNCTIONS FROM WAFUNCTION. 1617 ENDLOOP. 1618 1619 * Now we have everthing perhaps we had better find all the dictionary structures 1620 IF NOT SEARCHFORDICTIONARY IS INITIAL. 1621 LOOP AT ILOCFUNCTIONS INTO WAFUNCTION. 1622 PERFORM SCANFORTABLES USING WAFUNCTION-PROGNAME 1623 CUSTOMERONLY 1624 CUSTOMERNAMERANGE 1625 WAFUNCTION-IDICTSTRUCT[]. 1626 1627 PERFORM SCANFORLIKEORTYPE USING WAFUNCTION-PROGNAME 1628 CUSTOMERONLY 1629 CUSTOMERNAMERANGE 1630 WAFUNCTION-IDICTSTRUCT[]. 1631 1632 LOOP AT WAFUNCTION-IINCLUDES INTO WAINCLUDE. 1633 PERFORM SCANFORTABLES USING WAINCLUDE-INCLUDENAME 1634 CUSTOMERONLY 1635 CUSTOMERNAMERANGE 1636 WAFUNCTION-IDICTSTRUCT[]. 1637 1638 PERFORM SCANFORLIKEORTYPE USING WAINCLUDE-INCLUDENAME 1639 CUSTOMERONLY 1640 CUSTOMERNAMERANGE 1641 WAFUNCTION-IDICTSTRUCT[]. 1642 ENDLOOP. 1643 1644 MODIFY ILOCFUNCTIONS FROM WAFUNCTION. 1645 ENDLOOP. 1646 ENDIF. 1647 1648 * Now search for all messages 1649 IF NOT SEARCHFORMESSAGES IS INITIAL. 1650 LOOP AT ILOCFUNCTIONS INTO WAFUNCTION. 1651 PERFORM SCANFORMESSAGES USING WAFUNCTION-PROGNAME 1652 WAFUNCTION-MESSAGECLASS 1653 WAFUNCTION-IMESSAGES[]. 1654 MODIFY ILOCFUNCTIONS FROM WAFUNCTION. 1655 ENDLOOP. 1656 ENDIF. 1657 ENDFORM. "scanForAdditionalFuncStuff 1658 1659 *---------------------------------------------------------------------------------------------------------------------- 1660 * scanForClasses... Search each class or method for other classes 1661 *---------------------------------------------------------------------------------------------------------------------- 1662 FORM SCANFORCLASSES USING VALUE(CLASSNAME) 1663 VALUE(CLASSLINKNAME) 1664 VALUE(CUSTOMERONLY) 1665 VALUE(CUSTOMERNAMERANGE) 1666 ILOCCLASSES LIKE ICLASSES[]. 1667 1668 DATA ILINES TYPE STANDARD TABLE OF STRING WITH HEADER LINE. 1669 DATA: HEAD TYPE STRING. 1670 DATA: TAIL TYPE STRING. 1671 DATA: LINELENGTH TYPE I VALUE 0. 1672 DATA: WALINE TYPE STRING. 1673 DATA: WACLASS TYPE TCLASS. 1674 DATA: CASTCLASSNAME TYPE PROGRAM. 1675 DATA: EXCEPTIONCUSTOMERNAMERANGE TYPE STRING. 1676 1677 * Build the name of the possible cusotmer exception classes 1678 CONCATENATE CUSTOMERNAMERANGE 'CX_' INTO EXCEPTIONCUSTOMERNAMERANGE. 1679 1680 * Read the program code from the textpool. 1681 CASTCLASSNAME = CLASSNAME. 1682 READ REPORT CASTCLASSNAME INTO ILINES. 1683 1684 LOOP AT ILINES INTO WALINE. 1685 * Find custom tables. 1686 LINELENGTH = STRLEN( WALINE ). 1687 IF LINELENGTH > 0. 1688 IF WALINE(1) = ASTERIX. 1689 CONTINUE. 1690 ENDIF. 1691 1692 TRANSLATE WALINE TO UPPER CASE. 1693 1694 FIND TYPEREFTO IN WALINE IGNORING CASE. 1695 IF SY-SUBRC = 0. 1696 * Have found a reference to another class 1697 SPLIT WALINE AT TYPE INTO HEAD TAIL. 1698 SHIFT TAIL LEFT DELETING LEADING SPACE. 1699 SPLIT TAIL AT 'REF' INTO HEAD TAIL. 1700 SHIFT TAIL LEFT DELETING LEADING SPACE. 1701 SPLIT TAIL AT 'TO' INTO HEAD TAIL. 1702 SHIFT TAIL LEFT DELETING LEADING SPACE. 1703 IF TAIL CS PERIOD. 1704 SPLIT TAIL AT PERIOD INTO HEAD TAIL. 1705 ELSE. 1706 IF TAIL CS COMMA. 1707 SPLIT TAIL AT COMMA INTO HEAD TAIL. 1708 ENDIF. 1709 ENDIF. 1710 ELSE. 1711 * Try and find classes which are only referenced through static mehods 1712 FIND '=>' IN WALINE MATCH OFFSET SY-FDPOS. 1713 IF SY-SUBRC = 0. 1714 HEAD = WALINE+0(SY-FDPOS). 1715 SHIFT HEAD LEFT DELETING LEADING SPACE. 1716 CONDENSE HEAD. 1717 FIND 'call method' IN HEAD IGNORING CASE. 1718 IF SY-SUBRC = 0. 1719 SHIFT HEAD LEFT DELETING LEADING SPACE. 1720 SPLIT HEAD AT SPACE INTO HEAD TAIL. 1721 SPLIT TAIL AT SPACE INTO HEAD TAIL. 1722 * Should have the class name here 1723 HEAD = TAIL. 1724 ELSE. 1725 * Still have a class name even though it does not have the words call method in front 1726 IF WALINE CS '='. 1727 SPLIT WALINE AT '=' INTO TAIL HEAD. 1728 SHIFT HEAD LEFT DELETING LEADING SPACE. 1729 SPLIT HEAD AT '=' INTO HEAD TAIL. 1730 ENDIF. 1731 SY-SUBRC = 0. 1732 ENDIF. 1733 ENDIF. 1734 ENDIF. 1735 1736 IF SY-SUBRC = 0. 1737 TRY. 1738 IF HEAD+0(1) = 'Y' OR HEAD+0(1) = 'Z' OR HEAD CS CUSTOMERNAMERANGE. 1739 * We have found a class best append it to our class table if we do not already have it. 1740 READ TABLE ILOCCLASSES INTO WACLASS WITH KEY CLSNAME = HEAD. 1741 IF SY-SUBRC <> 0. 1742 IF HEAD+0(3) = 'CX_' 1743 OR HEAD+0(4) = 'ZCX_' 1744 OR HEAD+0(4) = 'YCX_' 1745 OR HEAD CS EXCEPTIONCUSTOMERNAMERANGE. 1746 1747 WACLASS-EXCEPTIONCLASS = TRUE. 1748 ENDIF. 1749 1750 WACLASS-CLSNAME = HEAD. 1751 APPEND WACLASS TO ILOCCLASSES. 1752 ENDIF. 1753 ENDIF. 1754 CATCH CX_SY_RANGE_OUT_OF_BOUNDS. 1755 ENDTRY. 1756 ENDIF. 1757 ENDIF. 1758 ENDLOOP. 1759 ENDFORM. "scanForClasses 1760 1761 *---------------------------------------------------------------------------------------------------------------------- 1762 * scanForIncludePrograms... Search each program for include programs 1763 *---------------------------------------------------------------------------------------------------------------------- 1764 FORM SCANFORINCLUDEPROGRAMS USING VALUE(PROGRAMNAME) 1765 VALUE(RECURSIVEINCLUDES) 1766 VALUE(CUSTOMERONLY) 1767 VALUE(CUSTOMERNAMERANGE) 1768 ILOCINCLUDES LIKE DUMIINCLUDES[]. 1769 1770 DATA: IINCLUDELINES TYPE STANDARD TABLE OF STRING WITH HEADER LINE. 1771 DATA: ITOKENS TYPE STANDARD TABLE OF STOKES WITH HEADER LINE. 1772 DATA: IKEYWORDS TYPE STANDARD TABLE OF TEXT20 WITH HEADER LINE. 1773 DATA: ISTATEMENTS TYPE STANDARD TABLE OF SSTMNT WITH HEADER LINE. 1774 DATA: WATOKENS TYPE STOKES. 1775 DATA: WAINCLUDE TYPE TINCLUDE. 1776 DATA: WAINCLUDEEXISTS TYPE TINCLUDE. 1777 DATA: MAXLINES TYPE I. 1778 DATA: NEXTLINE TYPE I. 1779 DATA: CASTPROGRAMNAME TYPE PROGRAM. 1780 1781 * Read the program code from the textpool. 1782 CASTPROGRAMNAME = PROGRAMNAME. 1783 READ REPORT CASTPROGRAMNAME INTO IINCLUDELINES. 1784 1785 APPEND INCLUDE TO IKEYWORDS. 1786 SCAN ABAP-SOURCE IINCLUDELINES TOKENS INTO ITOKENS WITH INCLUDES STATEMENTS INTO ISTATEMENTS KEYWORDS FROM IKEYWORDS. 1787 1788 CLEAR IINCLUDELINES[]. 1789 1790 MAXLINES = LINES( ITOKENS ). 1791 LOOP AT ITOKENS WHERE STR = INCLUDE AND TYPE = 'I'. 1792 NEXTLINE = SY-TABIX + 1. 1793 IF NEXTLINE <= MAXLINES. 1794 READ TABLE ITOKENS INDEX NEXTLINE INTO WATOKENS. 1795 1796 * Are we only to find customer includes? 1797 IF NOT CUSTOMERONLY IS INITIAL. 1798 TRY. 1799 IF WATOKENS-STR+0(1) = 'Y' OR WATOKENS-STR+0(1) = 'Z' OR WATOKENS-STR CS CUSTOMERNAMERANGE 1800 OR WATOKENS-STR+0(2) = 'MZ' OR WATOKENS-STR+0(2) = 'MY'. 1801 1802 ELSE. 1803 CONTINUE. 1804 ENDIF. 1805 CATCH CX_SY_RANGE_OUT_OF_BOUNDS INTO OBJRUNTIMEERROR. 1806 ENDTRY. 1807 ENDIF. 1808 1809 WAINCLUDE-INCLUDENAME = WATOKENS-STR. 1810 1811 * Best find the program title text as well. 1812 PERFORM FINDPROGRAMORINCLUDETITLE USING WAINCLUDE-INCLUDENAME 1813 WAINCLUDE-INCLUDETITLE. 1814 1815 * Don't append the include if we already have it listed 1816 READ TABLE ILOCINCLUDES INTO WAINCLUDEEXISTS WITH KEY INCLUDENAME = WAINCLUDE-INCLUDENAME. 1817 IF SY-SUBRC <> 0. 1818 APPEND WAINCLUDE TO ILOCINCLUDES. 1819 1820 IF NOT RECURSIVEINCLUDES IS INITIAL. 1821 * Do a recursive search for other includes 1822 PERFORM SCANFORINCLUDEPROGRAMS USING WAINCLUDE-INCLUDENAME 1823 RECURSIVEINCLUDES 1824 CUSTOMERONLY 1825 CUSTOMERNAMERANGE 1826 ILOCINCLUDES[]. 1827 ENDIF. 1828 ENDIF. 1829 ENDIF. 1830 ENDLOOP. 1831 ENDFORM. "scanForIncludePrograms 1832 1833 *---------------------------------------------------------------------------------------------------------------------- 1834 * scanForFunctions... Search each program for function modules 1835 *---------------------------------------------------------------------------------------------------------------------- 1836 FORM SCANFORFUNCTIONS USING VALUE(PROGRAMNAME) 1837 VALUE(PROGRAMLINKNAME) 1838 VALUE(RECURSIVEINCLUDES) 1839 VALUE(RECURSIVEFUNCTIONS) 1840 VALUE(CUSTOMERONLY) 1841 VALUE(CUSTOMERNAMERANGE) 1842 ILOCFUNCTIONS LIKE IFUNCTIONS[]. 1843 1844 DATA: IINCLUDELINES TYPE STANDARD TABLE OF STRING WITH HEADER LINE. 1845 DATA: ITOKENS TYPE STANDARD TABLE OF STOKES WITH HEADER LINE. 1846 DATA: ISTATEMENTS TYPE STANDARD TABLE OF SSTMNT WITH HEADER LINE. 1847 DATA: WATOKENS TYPE STOKES. 1848 DATA: WAFUNCTION TYPE TFUNCTION. 1849 DATA: WAFUNCTIONCOMPARISON TYPE TFUNCTION. 1850 DATA: MAXLINES TYPE I. 1851 DATA: NEXTLINE TYPE I. 1852 DATA: CASTPROGRAMNAME TYPE PROGRAM. 1853 DATA: SKIPTHISLOOP TYPE I. 1854 1855 * Read the program code from the textpool. 1856 CASTPROGRAMNAME = PROGRAMNAME. 1857 READ REPORT CASTPROGRAMNAME INTO IINCLUDELINES. 1858 SCAN ABAP-SOURCE IINCLUDELINES TOKENS INTO ITOKENS WITH INCLUDES STATEMENTS INTO ISTATEMENTS. 1859 CLEAR IINCLUDELINES[]. 1860 1861 MAXLINES = LINES( ITOKENS ). 1862 LOOP AT ITOKENS WHERE STR = FUNCTION AND TYPE = 'I'. 1863 1864 NEXTLINE = SY-TABIX + 1. 1865 IF NEXTLINE <= MAXLINES. 1866 READ TABLE ITOKENS INDEX NEXTLINE INTO WATOKENS. 1867 1868 * Are we only to find customer functions 1869 SKIPTHISLOOP = FALSE. 1870 IF NOT CUSTOMERONLY IS INITIAL. 1871 TRY. 1872 IF WATOKENS-STR+1(1) = 'Y' OR WATOKENS-STR+1(1) = 'Z' OR WATOKENS-STR CS CUSTOMERNAMERANGE. 1873 ELSE. 1874 SKIPTHISLOOP = TRUE. 1875 ENDIF. 1876 CATCH CX_SY_RANGE_OUT_OF_BOUNDS INTO OBJRUNTIMEERROR. 1877 CLEANUP. 1878 SKIPTHISLOOP = TRUE. 1879 ENDTRY. 1880 ENDIF. 1881 1882 IF SKIPTHISLOOP = FALSE. 1883 WAFUNCTION-FUNCTIONNAME = WATOKENS-STR. 1884 REPLACE ALL OCCURRENCES OF '''' IN WAFUNCTION-FUNCTIONNAME WITH ' '. 1885 CONDENSE WAFUNCTION-FUNCTIONNAME. 1886 1887 * Don't add a function if we alread have it listed. 1888 READ TABLE ILOCFUNCTIONS WITH KEY FUNCTIONNAME = WAFUNCTION-FUNCTIONNAME INTO WAFUNCTIONCOMPARISON. 1889 IF SY-SUBRC <> 0. 1890 * Add in the link name if the function is linked to a program 1891 WAFUNCTION-PROGRAMLINKNAME = PROGRAMLINKNAME. 1892 1893 * Don't download functions which are called through an RFC destination 1894 NEXTLINE = SY-TABIX + 2. 1895 READ TABLE ITOKENS INDEX NEXTLINE INTO WATOKENS. 1896 IF WATOKENS-STR <> DESTINATION. 1897 1898 * Find the function group 1899 SELECT SINGLE AREA FROM V_FDIR INTO WAFUNCTION-FUNCTIONGROUP WHERE FUNCNAME = WAFUNCTION-FUNCTIONNAME. 1900 1901 IF SY-SUBRC = 0. 1902 * Best find the function number as well. 1903 PERFORM RETRIEVEFUNCTIONDETAIL USING WAFUNCTION-FUNCTIONNAME 1904 WAFUNCTION-PROGNAME 1905 WAFUNCTION-INCLUDENUMBER 1906 WAFUNCTION-FUNCTIONTITLE. 1907 1908 PERFORM FINDMAINFUNCTIONINCLUDE USING WAFUNCTION-PROGNAME 1909 WAFUNCTION-INCLUDENUMBER 1910 WAFUNCTION-FUNCTIONMAININCLUDE. 1911 1912 PERFORM FINDFUNCTIONTOPINCLUDE USING WAFUNCTION-PROGNAME 1913 WAFUNCTION-TOPINCLUDENAME. 1914 1915 * Find main message class 1916 PERFORM FINDMAINMESSAGECLASS USING WAFUNCTION-PROGNAME 1917 WAFUNCTION-MESSAGECLASS. 1918 1919 APPEND WAFUNCTION TO ILOCFUNCTIONS. 1920 1921 * Now lets search a little bit deeper and do a recursive search for other includes 1922 IF NOT RECURSIVEINCLUDES IS INITIAL. 1923 PERFORM SCANFORINCLUDEPROGRAMS USING WAFUNCTION-FUNCTIONMAININCLUDE 1924 RECURSIVEINCLUDES 1925 CUSTOMERONLY 1926 CUSTOMERNAMERANGE 1927 WAFUNCTION-IINCLUDES[]. 1928 ENDIF. 1929 1930 * Now lets search a little bit deeper and do a recursive search for other functions 1931 IF NOT RECURSIVEFUNCTIONS IS INITIAL. 1932 PERFORM SCANFORFUNCTIONS USING WAFUNCTION-FUNCTIONMAININCLUDE 1933 SPACE 1934 RECURSIVEINCLUDES 1935 RECURSIVEFUNCTIONS 1936 CUSTOMERONLY 1937 CUSTOMERNAMERANGE 1938 ILOCFUNCTIONS[]. 1939 ENDIF. 1940 CLEAR WAFUNCTION. 1941 ENDIF. 1942 ENDIF. 1943 ENDIF. 1944 1945 CLEAR WAFUNCTION. 1946 ENDIF. 1947 ENDIF. 1948 ENDLOOP. 1949 ENDFORM. "scanForFunctions 1950 1951 *---------------------------------------------------------------------------------------------------------------------- 1952 * scanForFunctionIncludes... Find all user defined includes within the function group 1953 *---------------------------------------------------------------------------------------------------------------------- 1954 FORM SCANFORFUNCTIONINCLUDES USING POOLNAME 1955 VALUE(CUSTOMERONLY) 1956 VALUE(CUSTOMERNAMERANGE) 1957 ILOCINCLUDES LIKE DUMIINCLUDES[]. 1958 1959 DATA: IINCLUDELINES TYPE STANDARD TABLE OF STRING WITH HEADER LINE. 1960 DATA: ITOKENS TYPE STANDARD TABLE OF STOKES WITH HEADER LINE. 1961 DATA: IKEYWORDS TYPE STANDARD TABLE OF TEXT20 WITH HEADER LINE. 1962 DATA: ISTATEMENTS TYPE STANDARD TABLE OF SSTMNT WITH HEADER LINE. 1963 DATA: WATOKENS TYPE STOKES. 1964 DATA: WAINCLUDE TYPE TINCLUDE. 1965 DATA: WAINCLUDEEXISTS TYPE TINCLUDE. 1966 DATA: MAXLINES TYPE I. 1967 DATA: NEXTLINE TYPE I. 1968 DATA: CASTPROGRAMNAME TYPE PROGRAM. 1969 1970 * Read the program code from the textpool. 1971 CASTPROGRAMNAME = POOLNAME. 1972 READ REPORT CASTPROGRAMNAME INTO IINCLUDELINES. 1973 1974 APPEND INCLUDE TO IKEYWORDS. 1975 SCAN ABAP-SOURCE IINCLUDELINES TOKENS INTO ITOKENS WITH INCLUDES STATEMENTS INTO ISTATEMENTS KEYWORDS FROM IKEYWORDS. 1976 1977 CLEAR IINCLUDELINES[]. 1978 1979 MAXLINES = LINES( ITOKENS ). 1980 LOOP AT ITOKENS WHERE STR = INCLUDE AND TYPE = 'I'. 1981 NEXTLINE = SY-TABIX + 1. 1982 IF NEXTLINE <= MAXLINES. 1983 READ TABLE ITOKENS INDEX NEXTLINE INTO WATOKENS. 1984 1985 IF WATOKENS-STR CP '*F++'. 1986 * Are we only to find customer includes? 1987 IF NOT CUSTOMERONLY IS INITIAL. 1988 TRY. 1989 IF WATOKENS-STR+0(2) = 'LY' OR WATOKENS-STR+0(2) = 'LZ' OR WATOKENS-STR CS CUSTOMERNAMERANGE. 1990 ELSE. 1991 CONTINUE. 1992 ENDIF. 1993 CATCH CX_SY_RANGE_OUT_OF_BOUNDS INTO OBJRUNTIMEERROR. 1994 ENDTRY. 1995 ENDIF. 1996 1997 WAINCLUDE-INCLUDENAME = WATOKENS-STR. 1998 1999 * Best find the program title text as well. 2000 PERFORM FINDPROGRAMORINCLUDETITLE USING WAINCLUDE-INCLUDENAME 2001 WAINCLUDE-INCLUDETITLE. 2002 2003 * Don't append the include if we already have it listed 2004 READ TABLE ILOCINCLUDES INTO WAINCLUDEEXISTS WITH KEY INCLUDENAME = WAINCLUDE-INCLUDENAME. 2005 IF SY-SUBRC <> 0. 2006 APPEND WAINCLUDE TO ILOCINCLUDES. 2007 ENDIF. 2008 ENDIF. 2009 ENDIF. 2010 ENDLOOP. 2011 ENDFORM. "scanForFunctionIncludes 2012 2013 *---------------------------------------------------------------------------------------------------------------------- 2014 * findProgramOrIncludeTitle... Finds the title text of a program. 2015 *---------------------------------------------------------------------------------------------------------------------- 2016 FORM FINDPROGRAMORINCLUDETITLE USING VALUE(PROGRAMNAME) 2017 TITLETEXT. 2018 2019 SELECT SINGLE TEXT 2020 FROM TRDIRT 2021 INTO TITLETEXT 2022 WHERE NAME = PROGRAMNAME 2023 AND SPRSL = SY-LANGU. 2024 ENDFORM. "findProgramOrIncludeTitle 2025 2026 *---------------------------------------------------------------------------------------------------------------------- 2027 * retrievePrograms... find programs and sub objects from SAP DB 2028 *---------------------------------------------------------------------------------------------------------------------- 2029 FORM RETRIEVEPROGRAMS USING ILOCPROGRAM LIKE IPROGRAMS[] 2030 ILOCFUNCTIONS LIKE IFUNCTIONS[] 2031 RANGEPROGRAM LIKE SOPROGRAMNAME[] 2032 RANGEAUTHOR LIKE SOAUTHOR[] 2033 VALUE(CUSTNAMERANGE) 2034 VALUE(ALSOMODIFIEDBYAUTHOR) 2035 VALUE(CUSTOMERPROGSONLY) 2036 VALUE(GETMESSAGES) 2037 VALUE(GETTEXTELEMENTS) 2038 VALUE(GETCUSTDICTSTRUCTURES) 2039 VALUE(GETFUNCTIONS) 2040 VALUE(GETINCLUDES) 2041 VALUE(GETSCREENS) 2042 VALUE(RECURSIVEFUNCSEARCH) 2043 VALUE(RECURSIVEINCLUDESEARCH) 2044 VALUE(GETLOCALOBJECTS) 2045 VALUE(PACKAGE). 2046 2047 DATA: WARANGEPROGRAM LIKE LINE OF RANGEPROGRAM. 2048 2049 IF RANGEPROGRAM[] IS INITIAL. 2050 * We are finding all programs by an author 2051 PERFORM FINDALLPROGRAMSFORAUTHOR USING ILOCPROGRAM[] 2052 RANGEPROGRAM[] 2053 RANGEAUTHOR[] 2054 CUSTNAMERANGE 2055 ALSOMODIFIEDBYAUTHOR 2056 CUSTOMERPROGSONLY 2057 GETLOCALOBJECTS 2058 PACKAGE. 2059 ELSE. 2060 READ TABLE RANGEPROGRAM INDEX 1 INTO WARANGEPROGRAM. 2061 IF WARANGEPROGRAM-LOW CS ASTERIX. 2062 PERFORM FINDPROGRAMSBYWILDCARD USING ILOCPROGRAM[] 2063 RANGEPROGRAM[] 2064 RANGEAUTHOR[] 2065 CUSTNAMERANGE 2066 CUSTOMERPROGSONLY 2067 GETLOCALOBJECTS 2068 PACKAGE. 2069 ELSE. 2070 PERFORM CHECKPROGRAMDOESEXIST USING ILOCPROGRAM[] 2071 RANGEPROGRAM[]. 2072 ENDIF. 2073 ENDIF. 2074 2075 * Find extra items 2076 PERFORM SCANFORADDITIONALPROGSTUFF USING ILOCPROGRAM[] 2077 ILOCFUNCTIONS[] 2078 GETTEXTELEMENTS 2079 GETMESSAGES 2080 GETSCREENS 2081 GETCUSTDICTSTRUCTURES 2082 GETFUNCTIONS 2083 GETINCLUDES 2084 CUSTOMERPROGSONLY 2085 CUSTNAMERANGE 2086 RECURSIVEINCLUDESEARCH 2087 RECURSIVEFUNCSEARCH. 2088 ENDFORM. "retrievePrograms 2089 2090 *------------------------------------------------------------------------------------------------------- 2091 * scanForAdditionalProgStuff... 2092 *------------------------------------------------------------------------------------------------------- 2093 FORM SCANFORADDITIONALPROGSTUFF USING ILOCPROGRAM LIKE IPROGRAMS[] 2094 ILOCFUNCTIONS LIKE IFUNCTIONS[] 2095 VALUE(GETTEXTELEMENTS) 2096 VALUE(GETMESSAGES) 2097 VALUE(GETSCREENS) 2098 VALUE(GETCUSTDICTSTRUCTURES) 2099 VALUE(GETFUNCTIONS) 2100 VALUE(GETINCLUDES) 2101 VALUE(CUSTOMERONLY) 2102 VALUE(CUSTOMERNAMERANGE) 2103 VALUE(RECURSIVEINCLUDESEARCH) 2104 VALUE(RECURSIVEFUNCSEARCH). 2105 2106 DATA: WAPROGRAM TYPE TPROGRAM. 2107 DATA: WAINCLUDE TYPE TINCLUDE. 2108 DATA: MYTABIX TYPE SYTABIX. 2109 2110 * Best to find all the includes used in a program first 2111 IF NOT GETINCLUDES IS INITIAL. 2112 LOOP AT ILOCPROGRAM INTO WAPROGRAM. 2113 MYTABIX = SY-TABIX. 2114 PERFORM SCANFORINCLUDEPROGRAMS USING WAPROGRAM-PROGNAME 2115 RECURSIVEINCLUDESEARCH 2116 CUSTOMERONLY 2117 CUSTOMERNAMERANGE 2118 WAPROGRAM-IINCLUDES[]. 2119 2120 MODIFY ILOCPROGRAM FROM WAPROGRAM INDEX MYTABIX. 2121 ENDLOOP. 2122 ENDIF. 2123 2124 * Once we have a list of all the includes we need to loop round them an select all the other objects 2125 LOOP AT ILOCPROGRAM INTO WAPROGRAM. 2126 MYTABIX = SY-TABIX. 2127 PERFORM FINDPROGRAMDETAILS USING WAPROGRAM-PROGNAME 2128 WAPROGRAM-SUBC 2129 WAPROGRAM-PROGRAMTITLE 2130 WAPROGRAM 2131 GETTEXTELEMENTS 2132 GETMESSAGES 2133 GETSCREENS 2134 GETCUSTDICTSTRUCTURES 2135 CUSTOMERONLY 2136 CUSTOMERNAMERANGE. 2137 2138 * Find any screens 2139 IF NOT GETSCREENS IS INITIAL. 2140 PERFORM FINDPROGRAMSCREENFLOW USING WAPROGRAM. 2141 ENDIF. 2142 2143 LOOP AT WAPROGRAM-IINCLUDES INTO WAINCLUDE. 2144 PERFORM FINDPROGRAMDETAILS USING WAINCLUDE-INCLUDENAME 2145 'I' 2146 WAINCLUDE-INCLUDETITLE 2147 WAPROGRAM 2148 GETTEXTELEMENTS 2149 GETMESSAGES 2150 GETSCREENS 2151 GETCUSTDICTSTRUCTURES 2152 CUSTOMERONLY 2153 CUSTOMERNAMERANGE. 2154 ENDLOOP. 2155 2156 MODIFY ILOCPROGRAM FROM WAPROGRAM INDEX MYTABIX. 2157 ENDLOOP. 2158 2159 * Now we have all the program includes and details we need to find extra functions 2160 IF NOT GETFUNCTIONS IS INITIAL. 2161 LOOP AT ILOCPROGRAM INTO WAPROGRAM. 2162 * Find any functions defined in the code 2163 PERFORM SCANFORFUNCTIONS USING WAPROGRAM-PROGNAME 2164 WAPROGRAM-PROGNAME 2165 SPACE 2166 SPACE 2167 CUSTOMERONLY 2168 CUSTOMERNAMERANGE 2169 ILOCFUNCTIONS[]. 2170 ENDLOOP. 2171 ENDIF. 2172 2173 * We have a list of all the functions so lets go and find details and other function calls 2174 PERFORM SCANFORADDITIONALFUNCSTUFF USING ILOCFUNCTIONS[] 2175 RECURSIVEINCLUDESEARCH 2176 RECURSIVEFUNCSEARCH 2177 GETINCLUDES 2178 GETFUNCTIONS 2179 GETCUSTDICTSTRUCTURES 2180 GETMESSAGES 2181 CUSTOMERONLY 2182 CUSTOMERNAMERANGE. 2183 ENDFORM. "scanForAdditionalProgStuff 2184 2185 *------------------------------------------------------------------------------------------------------- 2186 * findProgramDetails... 2187 *------------------------------------------------------------------------------------------------------- 2188 FORM FINDPROGRAMDETAILS USING VALUE(PROGRAMNAME) 2189 VALUE(PROGRAMTYPE) 2190 PROGRAMTITLE 2191 WAPROGRAM TYPE TPROGRAM 2192 VALUE(GETTEXTELEMENTS) 2193 VALUE(GETMESSAGES) 2194 VALUE(GETSCREENS) 2195 VALUE(GETCUSTDICTSTRUCTURES) 2196 VALUE(CUSTOMERONLY) 2197 VALUE(CUSTOMERNAMERANGE). 2198 2199 PERFORM FINDPROGRAMORINCLUDETITLE USING PROGRAMNAME 2200 PROGRAMTITLE. 2201 2202 IF NOT GETTEXTELEMENTS IS INITIAL. 2203 * Find the program texts from out of the database. 2204 PERFORM RETRIEVEPROGRAMTEXTS USING WAPROGRAM-ISELECTIONTEXTS[] 2205 WAPROGRAM-ITEXTELEMENTS[] 2206 PROGRAMNAME. 2207 ENDIF. 2208 2209 * Search for any GUI texts 2210 IF NOT GETSCREENS IS INITIAL AND ( PROGRAMTYPE = 'M' OR PROGRAMTYPE = '1' ). 2211 PERFORM RETRIEVEGUITITLES USING WAPROGRAM-IGUITITLE[] 2212 PROGRAMNAME. 2213 ENDIF. 2214 2215 * Find individual messages 2216 IF NOT GETMESSAGES IS INITIAL. 2217 IF PROGRAMTYPE = 'M' OR PROGRAMTYPE = '1'. 2218 PERFORM FINDMAINMESSAGECLASS USING PROGRAMNAME 2219 WAPROGRAM-MESSAGECLASS. 2220 ENDIF. 2221 2222 PERFORM SCANFORMESSAGES USING PROGRAMNAME 2223 WAPROGRAM-MESSAGECLASS 2224 WAPROGRAM-IMESSAGES[]. 2225 ENDIF. 2226 2227 IF NOT GETCUSTDICTSTRUCTURES IS INITIAL. 2228 PERFORM SCANFORTABLES USING PROGRAMNAME 2229 CUSTOMERONLY 2230 CUSTOMERNAMERANGE 2231 WAPROGRAM-IDICTSTRUCT[]. 2232 2233 PERFORM SCANFORLIKEORTYPE USING PROGRAMNAME 2234 CUSTOMERONLY 2235 CUSTOMERNAMERANGE 2236 WAPROGRAM-IDICTSTRUCT[]. 2237 ENDIF. 2238 ENDFORM. "findProgramDetails 2239 2240 *------------------------------------------------------------------------------------------------------- 2241 * findAllProgramsForAuthor... 2242 *------------------------------------------------------------------------------------------------------- 2243 FORM FINDALLPROGRAMSFORAUTHOR USING ILOCPROGRAM LIKE IPROGRAMS[] 2244 RANGEPROGRAM LIKE SOPROGRAMNAME[] 2245 RANGEAUTHOR LIKE SOAUTHOR[] 2246 VALUE(CUSTNAMERANGE) 2247 VALUE(ALSOMODIFIEDBYAUTHOR) 2248 VALUE(CUSTOMERPROGSONLY) 2249 VALUE(GETLOCALOBJECTS) 2250 VALUE(PACKAGE). 2251 2252 DATA: ALTCUSTOMERNAMERANGE TYPE STRING. 2253 FIELD-SYMBOLS: <WAPROGRAM> TYPE TPROGRAM. 2254 DATA: GENFLAG TYPE GENFLAG. 2255 2256 * build up the customer name range used for select statements 2257 CONCATENATE CUSTNAMERANGE '%' INTO ALTCUSTOMERNAMERANGE. 2258 2259 * select by name and author 2260 IF NOT ALSOMODIFIEDBYAUTHOR IS INITIAL. 2261 * Programs modified by author 2262 * Program to search for is an executable program 2263 IF CUSTOMERPROGSONLY IS INITIAL. 2264 * Select all programs 2265 SELECT PROGNAME 2266 SUBC 2267 FROM REPOSRC 2268 APPENDING CORRESPONDING FIELDS OF TABLE ILOCPROGRAM 2269 WHERE PROGNAME IN RANGEPROGRAM 2270 AND CNAM IN RANGEAUTHOR 2271 AND ( SUBC = '1' OR SUBC = 'M' OR SUBC = 'S' ). 2272 2273 ELSE. 2274 * Select only customer specific programs 2275 SELECT PROGNAME 2276 SUBC 2277 FROM REPOSRC 2278 APPENDING CORRESPONDING FIELDS OF TABLE ILOCPROGRAM 2279 WHERE PROGNAME IN RANGEPROGRAM 2280 AND ( PROGNAME LIKE ALTCUSTOMERNAMERANGE 2281 OR PROGNAME LIKE 'Z%' 2282 OR PROGNAME LIKE 'Y%' 2283 OR PROGNAME LIKE 'SAPMZ%' 2284 OR PROGNAME LIKE 'SAPMY%') 2285 AND CNAM IN RANGEAUTHOR 2286 AND ( SUBC = '1' OR SUBC = 'M' OR SUBC = 'S' ). 2287 ENDIF. 2288 ELSE. 2289 2290 * Programs created by author 2291 IF CUSTOMERPROGSONLY IS INITIAL. 2292 * Select all programs 2293 SELECT PROGNAME 2294 SUBC 2295 FROM REPOSRC 2296 APPENDING CORRESPONDING FIELDS OF TABLE ILOCPROGRAM 2297 WHERE PROGNAME IN RANGEPROGRAM 2298 AND ( SUBC = '1' OR SUBC = 'M' OR SUBC = 'S' ) 2299 AND ( CNAM IN RANGEAUTHOR OR UNAM IN RANGEAUTHOR ). 2300 ELSE. 2301 * Select only customer specific programs 2302 SELECT PROGNAME 2303 SUBC 2304 FROM REPOSRC 2305 APPENDING CORRESPONDING FIELDS OF TABLE ILOCPROGRAM 2306 WHERE PROGNAME IN RANGEPROGRAM 2307 AND ( PROGNAME LIKE ALTCUSTOMERNAMERANGE 2308 OR PROGNAME LIKE 'Z%' 2309 OR PROGNAME LIKE 'Y%' 2310 OR PROGNAME LIKE 'SAPMZ%' 2311 OR PROGNAME LIKE 'SAPMY%') 2312 AND ( SUBC = '1' OR SUBC = 'M' OR SUBC = 'S' ) 2313 AND ( CNAM IN RANGEAUTHOR OR UNAM IN RANGEAUTHOR ). 2314 ENDIF. 2315 ENDIF. 2316 2317 * Delete any programs which are local objects 2318 IF GETLOCALOBJECTS IS INITIAL. 2319 LOOP AT ILOCPROGRAM ASSIGNING <WAPROGRAM>. 2320 SELECT SINGLE GENFLAG 2321 FROM TADIV 2322 INTO GENFLAG 2323 WHERE PGMID = 'R3TR' 2324 AND OBJECT = 'PROG' 2325 AND OBJ_NAME = <WAPROGRAM>-PROGNAME 2326 AND DEVCLASS = '$TMP'. 2327 IF SY-SUBRC = 0. 2328 DELETE ILOCPROGRAM. 2329 ENDIF. 2330 ENDLOOP. 2331 ENDIF. 2332 2333 * Delete any programs which are not in the specified package 2334 IF NOT PACKAGE IS INITIAL. 2335 IF PACKAGE CS '*'. 2336 TRANSLATE PACKAGE USING '*%'. 2337 ENDIF. 2338 2339 LOOP AT ILOCPROGRAM ASSIGNING <WAPROGRAM>. 2340 SELECT SINGLE GENFLAG 2341 FROM TADIV 2342 INTO GENFLAG 2343 WHERE PGMID = 'R3TR' 2344 AND OBJECT = 'PROG' 2345 AND OBJ_NAME = <WAPROGRAM>-PROGNAME 2346 AND DEVCLASS LIKE PACKAGE. 2347 IF SY-SUBRC <> 0. 2348 DELETE ILOCPROGRAM. 2349 ENDIF. 2350 ENDLOOP. 2351 ENDIF. 2352 ENDFORM. "findAllProgramsForAuthor 2353 2354 *------------------------------------------------------------------------------------------------------- 2355 * checkProgramDoesExist... 2356 *------------------------------------------------------------------------------------------------------- 2357 FORM CHECKPROGRAMDOESEXIST USING ILOCPROGRAM LIKE IPROGRAMS[] 2358 RANGEPROGRAM LIKE SOPROGRAMNAME[]. 2359 2360 DATA: WAPROGRAM TYPE TPROGRAM. 2361 2362 * Check to see if the program is an executable program 2363 SELECT SINGLE PROGNAME 2364 SUBC 2365 INTO (WAPROGRAM-PROGNAME, WAPROGRAM-SUBC) 2366 FROM REPOSRC 2367 WHERE PROGNAME IN RANGEPROGRAM 2368 AND ( SUBC = '1' OR 2369 SUBC = 'I' OR 2370 SUBC = 'M' OR 2371 SUBC = 'S' ). 2372 2373 IF NOT WAPROGRAM-PROGNAME IS INITIAL. 2374 APPEND WAPROGRAM TO ILOCPROGRAM. 2375 ENDIF. 2376 ENDFORM. "checkProgramDoesExist 2377 2378 *------------------------------------------------------------------------------------------------------- 2379 * findProgramsByWildcard.. Search in the system for programs 2380 *------------------------------------------------------------------------------------------------------- 2381 FORM FINDPROGRAMSBYWILDCARD USING ILOCPROGRAM LIKE IPROGRAMS[] 2382 VALUE(RANGEPROGRAM) LIKE SOPROGRAMNAME[] 2383 VALUE(RANGEAUTHOR) LIKE SOAUTHOR[] 2384 VALUE(CUSTNAMERANGE) 2385 VALUE(CUSTOMERPROGSONLY) 2386 VALUE(GETLOCALOBJECTS) 2387 VALUE(PACKAGE). 2388 2389 DATA: ALTCUSTOMERNAMERANGE TYPE STRING. 2390 FIELD-SYMBOLS: <WAPROGRAM> TYPE TPROGRAM. 2391 DATA: GENFLAG TYPE GENFLAG. 2392 2393 IF CUSTOMERPROGSONLY IS INITIAL. 2394 * build up the customer name range used for select statements 2395 IF CUSTNAMERANGE <> '^'. 2396 CONCATENATE CUSTNAMERANGE '%' INTO ALTCUSTOMERNAMERANGE. 2397 2398 SELECT PROGNAME 2399 SUBC 2400 FROM REPOSRC 2401 APPENDING CORRESPONDING FIELDS OF TABLE ILOCPROGRAM 2402 WHERE PROGNAME IN RANGEPROGRAM 2403 AND PROGNAME LIKE ALTCUSTOMERNAMERANGE 2404 AND ( SUBC = '1' OR SUBC = 'M' OR SUBC = 'S' ) 2405 AND ( CNAM IN RANGEAUTHOR OR UNAM IN RANGEAUTHOR ). 2406 ELSE. 2407 SELECT PROGNAME 2408 SUBC 2409 FROM REPOSRC 2410 APPENDING CORRESPONDING FIELDS OF TABLE ILOCPROGRAM 2411 WHERE PROGNAME IN RANGEPROGRAM 2412 AND ( SUBC = '1' OR SUBC = 'M' OR SUBC = 'S' ) 2413 AND ( CNAM IN RANGEAUTHOR OR UNAM IN RANGEAUTHOR ). 2414 ENDIF. 2415 ELSE. 2416 * Only customer programs 2417 IF CUSTNAMERANGE <> '^'. 2418 CONCATENATE CUSTNAMERANGE '%' INTO ALTCUSTOMERNAMERANGE. 2419 2420 SELECT PROGNAME 2421 SUBC 2422 FROM REPOSRC 2423 APPENDING CORRESPONDING FIELDS OF TABLE ILOCPROGRAM 2424 WHERE PROGNAME IN RANGEPROGRAM 2425 AND ( PROGNAME LIKE ALTCUSTOMERNAMERANGE 2426 OR PROGNAME LIKE 'Z%' 2427 OR PROGNAME LIKE 'Y%' 2428 OR PROGNAME LIKE 'SAPMZ%' 2429 OR PROGNAME LIKE 'SAPMY%') 2430 AND ( SUBC = '1' OR SUBC = 'M' OR SUBC = 'S' ) 2431 AND ( CNAM IN RANGEAUTHOR OR UNAM IN RANGEAUTHOR ). 2432 ELSE. 2433 SELECT PROGNAME 2434 SUBC 2435 FROM REPOSRC 2436 APPENDING CORRESPONDING FIELDS OF TABLE ILOCPROGRAM 2437 WHERE PROGNAME IN RANGEPROGRAM 2438 AND ( PROGNAME LIKE 'Z%' 2439 OR PROGNAME LIKE 'Y%' 2440 OR PROGNAME LIKE 'SAPMZ%' 2441 OR PROGNAME LIKE 'SAPMY%') 2442 AND ( SUBC = '1' OR SUBC = 'M' OR SUBC = 'S' ) 2443 AND ( CNAM IN RANGEAUTHOR OR UNAM IN RANGEAUTHOR ). 2444 ENDIF. 2445 ENDIF. 2446 2447 * Delete any programs which are local objects 2448 IF GETLOCALOBJECTS IS INITIAL. 2449 LOOP AT ILOCPROGRAM ASSIGNING <WAPROGRAM>. 2450 SELECT SINGLE GENFLAG 2451 FROM TADIV 2452 INTO GENFLAG 2453 WHERE PGMID = 'R3TR' 2454 AND OBJECT = 'PROG' 2455 AND OBJ_NAME = <WAPROGRAM>-PROGNAME 2456 AND DEVCLASS = '$TMP'. 2457 IF SY-SUBRC = 0. 2458 DELETE ILOCPROGRAM. 2459 ENDIF. 2460 ENDLOOP. 2461 ENDIF. 2462 2463 * Delete any programs which are not in the specified package 2464 IF NOT PACKAGE IS INITIAL. 2465 LOOP AT ILOCPROGRAM ASSIGNING <WAPROGRAM>. 2466 SELECT SINGLE GENFLAG 2467 FROM TADIV 2468 INTO GENFLAG 2469 WHERE PGMID = 'R3TR' 2470 AND OBJECT = 'PROG' 2471 AND OBJ_NAME = <WAPROGRAM>-PROGNAME 2472 AND DEVCLASS <> PACKAGE. 2473 IF SY-SUBRC = 0. 2474 DELETE ILOCPROGRAM. 2475 ENDIF. 2476 ENDLOOP. 2477 ENDIF. 2478 ENDFORM. "findProgramsByWildcard 2479 2480 *------------------------------------------------------------------------------------------------------- 2481 * retrieveProgramTexts... Find the text elements and selection texts for a program 2482 *------------------------------------------------------------------------------------------------------- 2483 FORM RETRIEVEPROGRAMTEXTS USING ILOCSELECTIONTEXTS LIKE DUMITEXTTAB[] 2484 ILOCTEXTELEMENTS LIKE DUMITEXTTAB[] 2485 VALUE(PROGRAMNAME). 2486 2487 DATA: ITEXTTABLE TYPE STANDARD TABLE OF TTEXTTABLE WITH HEADER LINE. 2488 DATA: WATEXTS TYPE TTEXTTABLE. 2489 DATA: CASTPROGRAMNAME(50). 2490 2491 MOVE PROGRAMNAME TO CASTPROGRAMNAME. 2492 2493 READ TEXTPOOL CASTPROGRAMNAME INTO ITEXTTABLE LANGUAGE SY-LANGU. 2494 DELETE ITEXTTABLE WHERE KEY = 'R'. 2495 2496 * Selection texts. 2497 LOOP AT ITEXTTABLE WHERE ID = 'S'. 2498 MOVE ITEXTTABLE-KEY TO WATEXTS-KEY. 2499 MOVE ITEXTTABLE-ENTRY TO WATEXTS-ENTRY. 2500 APPEND WATEXTS TO ILOCSELECTIONTEXTS. 2501 CLEAR WATEXTS. 2502 ENDLOOP. 2503 2504 * Text elements. 2505 DELETE ITEXTTABLE WHERE KEY = 'S'. 2506 LOOP AT ITEXTTABLE WHERE ID = 'I'. 2507 MOVE ITEXTTABLE-KEY TO WATEXTS-KEY. 2508 MOVE ITEXTTABLE-ENTRY TO WATEXTS-ENTRY. 2509 APPEND WATEXTS TO ILOCTEXTELEMENTS. 2510 ENDLOOP. 2511 ENDFORM. "retrieveProgramTexts 2512 2513 *------------------------------------------------------------------------------------------------------- 2514 * retrieveGUITitles... Search for any GUI texts 2515 *------------------------------------------------------------------------------------------------------- 2516 FORM RETRIEVEGUITITLES USING ILOCGUITITLE LIKE DUMIGUITITLE[] 2517 VALUE(PROGRAMNAME). 2518 2519 SELECT OBJ_CODE 2520 TEXT 2521 FROM D347T 2522 APPENDING CORRESPONDING FIELDS OF TABLE ILOCGUITITLE 2523 WHERE PROGNAME = PROGRAMNAME. 2524 ENDFORM. "retrieveGUITitles 2525 2526 *------------------------------------------------------------------------------------------------------- 2527 * findMainMessageClass... find the message class stated at the top of program. 2528 *------------------------------------------------------------------------------------------------------- 2529 FORM FINDMAINMESSAGECLASS USING VALUE(PROGRAMNAME) 2530 MESSAGECLASS. 2531 2532 SELECT SINGLE MSGID 2533 FROM TRDIRE INTO MESSAGECLASS 2534 WHERE REPORT = PROGRAMNAME. 2535 ENDFORM. "findMainMessageClass 2536 2537 *------------------------------------------------------------------------------------------------------- 2538 * retrieveClasses... find classes and sub objects from SAP DB 2539 *------------------------------------------------------------------------------------------------------- 2540 FORM RETRIEVECLASSES USING ILOCCLASSES LIKE ICLASSES[] 2541 ILOCFUNCTIONS LIKE IFUNCTIONS[] 2542 RANGECLASS LIKE SOCLASSNAME[] 2543 RANGEAUTHOR LIKE SOAUTHOR[] 2544 VALUE(CUSTNAMERANGE) 2545 VALUE(ALSOMODIFIEDBYAUTHOR) 2546 VALUE(CUSTOMERPROGSONLY) 2547 VALUE(GETMESSAGES) 2548 VALUE(GETTEXTELEMENTS) 2549 VALUE(GETCUSTDICTSTRUCTURES) 2550 VALUE(GETFUNCTIONS) 2551 VALUE(GETINCLUDES) 2552 VALUE(RECURSIVEFUNCSEARCH) 2553 VALUE(RECURSIVEINCLUDESEARCH) 2554 VALUE(RECURSIVECLASSSEARCH) 2555 VALUE(LANGUAGE). 2556 2557 DATA: WARANGECLASS LIKE LINE OF RANGECLASS. 2558 2559 IF RANGECLASS[] IS INITIAL. 2560 * We are finding all programs by an author 2561 PERFORM FINDALLCLASSESFORAUTHOR USING ILOCCLASSES[] 2562 RANGECLASS[] 2563 RANGEAUTHOR[] 2564 CUSTNAMERANGE 2565 ALSOMODIFIEDBYAUTHOR 2566 CUSTOMERPROGSONLY 2567 LANGUAGE. 2568 ELSE. 2569 READ TABLE RANGECLASS INDEX 1 INTO WARANGECLASS. 2570 IF WARANGECLASS-LOW CS ASTERIX. 2571 PERFORM FINDCLASSESBYWILDCARD USING ILOCCLASSES[] 2572 RANGECLASS[] 2573 RANGEAUTHOR[] 2574 CUSTNAMERANGE 2575 CUSTOMERPROGSONLY 2576 LANGUAGE. 2577 ELSE. 2578 PERFORM CHECKCLASSDOESEXIST USING ILOCCLASSES[] 2579 RANGECLASS[]. 2580 ENDIF. 2581 ENDIF. 2582 2583 * Find extra items 2584 IF NOT ILOCCLASSES[] IS INITIAL. 2585 PERFORM SCANFORADDITIONALCLASSSTUFF USING ILOCCLASSES[] 2586 ILOCFUNCTIONS[] 2587 GETTEXTELEMENTS 2588 GETMESSAGES 2589 GETCUSTDICTSTRUCTURES 2590 GETFUNCTIONS 2591 GETINCLUDES 2592 CUSTOMERPROGSONLY 2593 CUSTNAMERANGE 2594 RECURSIVEINCLUDESEARCH 2595 RECURSIVEFUNCSEARCH 2596 RECURSIVECLASSSEARCH. 2597 ENDIF. 2598 ENDFORM. "retrieveClasses 2599 2600 *------------------------------------------------------------------------------------------------------- 2601 * findAllClassesForAuthor... 2602 *------------------------------------------------------------------------------------------------------- 2603 FORM FINDALLCLASSESFORAUTHOR USING ILOCCLASS LIKE ICLASSES[] 2604 RANGECLASS LIKE SOCLASSNAME[] 2605 RANGEAUTHOR LIKE SOAUTHOR[] 2606 VALUE(CUSTNAMERANGE) 2607 VALUE(ALSOMODIFIEDBYAUTHOR) 2608 VALUE(CUSTOMERCLASSESONLY) 2609 VALUE(LANGUAGE). 2610 2611 DATA: ALTCUSTOMERNAMERANGE(2). 2612 2613 * build up the customer name range used for select statements 2614 CONCATENATE CUSTNAMERANGE '%' INTO ALTCUSTOMERNAMERANGE. 2615 2616 * select by name and author 2617 IF NOT ALSOMODIFIEDBYAUTHOR IS INITIAL. 2618 * Classes modified by author 2619 IF CUSTOMERCLASSESONLY IS INITIAL. 2620 * Select all classes 2621 SELECT CLSNAME DESCRIPT MSG_ID 2622 FROM VSEOCLASS 2623 APPENDING CORRESPONDING FIELDS OF TABLE ILOCCLASS 2624 WHERE CLSNAME IN RANGECLASS 2625 AND LANGU = LANGUAGE 2626 AND ( AUTHOR IN RANGEAUTHOR OR CHANGEDBY IN RANGEAUTHOR ) 2627 AND VERSION = '1' 2628 AND ( STATE = '0' OR STATE = '1' ). 2629 2630 IF SY-SUBRC <> 0. 2631 SELECT CLSNAME DESCRIPT MSG_ID 2632 FROM VSEOCLASS 2633 APPENDING CORRESPONDING FIELDS OF TABLE ILOCCLASS 2634 WHERE CLSNAME IN RANGECLASS 2635 AND LANGU = LANGUAGE 2636 AND ( AUTHOR IN RANGEAUTHOR OR CHANGEDBY IN RANGEAUTHOR ) 2637 AND VERSION = '0' 2638 AND ( STATE = '0' OR STATE = '1' ). 2639 ENDIF. 2640 ELSE. 2641 * Select only customer specific classes 2642 SELECT CLSNAME DESCRIPT MSG_ID 2643 FROM VSEOCLASS 2644 APPENDING CORRESPONDING FIELDS OF TABLE ILOCCLASS 2645 WHERE CLSNAME IN RANGECLASS 2646 AND ( CLSNAME LIKE ALTCUSTOMERNAMERANGE 2647 OR CLSNAME LIKE 'Z%' 2648 OR CLSNAME LIKE 'Y%') 2649 AND LANGU = LANGUAGE 2650 AND ( AUTHOR IN RANGEAUTHOR OR CHANGEDBY IN RANGEAUTHOR ) 2651 AND VERSION = '1' 2652 AND ( STATE = '0' OR STATE = '1' ). 2653 2654 IF SY-SUBRC <> 0. 2655 SELECT CLSNAME DESCRIPT MSG_ID 2656 FROM VSEOCLASS 2657 APPENDING CORRESPONDING FIELDS OF TABLE ILOCCLASS 2658 WHERE CLSNAME IN RANGECLASS 2659 AND ( CLSNAME LIKE ALTCUSTOMERNAMERANGE 2660 OR CLSNAME LIKE 'Z%' 2661 OR CLSNAME LIKE 'Y%') 2662 AND LANGU = LANGUAGE 2663 AND ( AUTHOR IN RANGEAUTHOR OR CHANGEDBY IN RANGEAUTHOR ) 2664 AND VERSION = '0' 2665 AND ( STATE = '0' OR STATE = '1' ). 2666 ENDIF. 2667 ENDIF. 2668 ELSE. 2669 * Programs created by author 2670 IF CUSTOMERCLASSESONLY IS INITIAL. 2671 * Select all classes 2672 SELECT CLSNAME DESCRIPT MSG_ID 2673 FROM VSEOCLASS 2674 APPENDING CORRESPONDING FIELDS OF TABLE ILOCCLASS 2675 WHERE CLSNAME IN RANGECLASS 2676 AND LANGU = LANGUAGE 2677 AND AUTHOR IN RANGEAUTHOR 2678 AND VERSION = '1' 2679 AND ( STATE = '0' OR STATE = '1' ). 2680 2681 IF SY-SUBRC <> 0. 2682 SELECT CLSNAME DESCRIPT MSG_ID 2683 FROM VSEOCLASS 2684 APPENDING CORRESPONDING FIELDS OF TABLE ILOCCLASS 2685 WHERE CLSNAME IN RANGECLASS 2686 AND LANGU = LANGUAGE 2687 AND AUTHOR IN RANGEAUTHOR 2688 AND VERSION = '0' 2689 AND ( STATE = '0' OR STATE = '1' ). 2690 ENDIF. 2691 ELSE. 2692 * Select only customer specific classes 2693 SELECT CLSNAME DESCRIPT MSG_ID 2694 FROM VSEOCLASS 2695 APPENDING CORRESPONDING FIELDS OF TABLE ILOCCLASS 2696 WHERE CLSNAME IN RANGECLASS 2697 AND ( CLSNAME LIKE ALTCUSTOMERNAMERANGE 2698 OR CLSNAME LIKE 'Z%' 2699 OR CLSNAME LIKE 'Y%') 2700 AND LANGU = LANGUAGE 2701 AND AUTHOR IN RANGEAUTHOR 2702 AND VERSION = '1' 2703 AND ( STATE = '0' OR STATE = '1' ). 2704 2705 IF SY-SUBRC <> 0. 2706 SELECT CLSNAME DESCRIPT MSG_ID 2707 FROM VSEOCLASS 2708 APPENDING CORRESPONDING FIELDS OF TABLE ILOCCLASS 2709 WHERE CLSNAME IN RANGECLASS 2710 AND ( CLSNAME LIKE ALTCUSTOMERNAMERANGE 2711 OR CLSNAME LIKE 'Z%' 2712 OR CLSNAME LIKE 'Y%') 2713 AND LANGU = LANGUAGE 2714 AND AUTHOR IN RANGEAUTHOR 2715 AND VERSION = '0' 2716 AND ( STATE = '0' OR STATE = '1' ). 2717 ENDIF. 2718 ENDIF. 2719 ENDIF. 2720 ENDFORM. "findAllClassesForAuthor 2721 2722 *------------------------------------------------------------------------------------------------------- 2723 * findClassesByWildcard... Find classes using a wildcard search 2724 *------------------------------------------------------------------------------------------------------- 2725 FORM FINDCLASSESBYWILDCARD USING ILOCCLASS LIKE ICLASSES[] 2726 RANGECLASS LIKE SOCLASSNAME[] 2727 VALUE(RANGEAUTHOR) LIKE SOAUTHOR[] 2728 VALUE(CUSTNAMERANGE) 2729 VALUE(CUSTOMERCLASSESONLY) 2730 VALUE(LANGUAGE). 2731 2732 DATA: ALTCUSTOMERNAMERANGE(2). 2733 2734 IF CUSTOMERCLASSESONLY IS INITIAL. 2735 * Searching for customer and SAP classes 2736 IF CUSTNAMERANGE <> '^'. 2737 * build up the customer name range used for select statements 2738 CONCATENATE CUSTNAMERANGE '%' INTO ALTCUSTOMERNAMERANGE. 2739 2740 SELECT CLSNAME DESCRIPT MSG_ID 2741 FROM VSEOCLASS 2742 APPENDING CORRESPONDING FIELDS OF TABLE ILOCCLASS 2743 WHERE CLSNAME IN RANGECLASS 2744 AND CLSNAME LIKE CUSTNAMERANGE 2745 AND LANGU = LANGUAGE 2746 AND ( AUTHOR IN RANGEAUTHOR OR CHANGEDBY IN RANGEAUTHOR ) 2747 AND VERSION = '1' 2748 AND ( STATE = '0' OR STATE = '1' ). 2749 IF SY-SUBRC <> 0. 2750 SELECT CLSNAME DESCRIPT MSG_ID 2751 FROM VSEOCLASS 2752 APPENDING CORRESPONDING FIELDS OF TABLE ILOCCLASS 2753 WHERE CLSNAME IN RANGECLASS 2754 AND CLSNAME LIKE CUSTNAMERANGE 2755 AND LANGU = LANGUAGE 2756 AND ( AUTHOR IN RANGEAUTHOR OR CHANGEDBY IN RANGEAUTHOR ) 2757 AND VERSION = '0' 2758 AND ( STATE = '0' OR STATE = '1' ). 2759 ENDIF. 2760 ELSE. 2761 * Searching using normal name ranges 2762 SELECT CLSNAME DESCRIPT MSG_ID 2763 FROM VSEOCLASS 2764 APPENDING CORRESPONDING FIELDS OF TABLE ILOCCLASS 2765 WHERE CLSNAME IN RANGECLASS 2766 AND LANGU = LANGUAGE 2767 AND ( AUTHOR IN RANGEAUTHOR OR CHANGEDBY IN RANGEAUTHOR ) 2768 AND VERSION = '1' 2769 AND ( STATE = '0' OR STATE = '1' ). 2770 IF SY-SUBRC <> 0. 2771 SELECT CLSNAME DESCRIPT MSG_ID 2772 FROM VSEOCLASS 2773 APPENDING CORRESPONDING FIELDS OF TABLE ILOCCLASS 2774 WHERE CLSNAME IN RANGECLASS 2775 AND LANGU = LANGUAGE 2776 AND ( AUTHOR IN RANGEAUTHOR OR CHANGEDBY IN RANGEAUTHOR ) 2777 AND VERSION = '0' 2778 AND ( STATE = '0' OR STATE = '1' ). 2779 ENDIF. 2780 ENDIF. 2781 ELSE. 2782 * searching for only customer classes 2783 IF CUSTNAMERANGE <> '^'. 2784 * build up the customer name range used for select statements 2785 CONCATENATE CUSTNAMERANGE '%' INTO ALTCUSTOMERNAMERANGE. 2786 2787 SELECT CLSNAME DESCRIPT MSG_ID 2788 FROM VSEOCLASS 2789 APPENDING CORRESPONDING FIELDS OF TABLE ILOCCLASS 2790 WHERE CLSNAME IN RANGECLASS 2791 AND CLSNAME LIKE CUSTNAMERANGE 2792 AND LANGU = LANGUAGE 2793 AND ( CLSNAME LIKE 'ZC%' OR CLSNAME LIKE 'YC%' ) 2794 AND ( AUTHOR IN RANGEAUTHOR OR CHANGEDBY IN RANGEAUTHOR ) 2795 AND VERSION = '1' 2796 AND ( STATE = '0' OR STATE = '1' ). 2797 IF SY-SUBRC <> 0. 2798 SELECT CLSNAME DESCRIPT MSG_ID 2799 FROM VSEOCLASS 2800 APPENDING CORRESPONDING FIELDS OF TABLE ILOCCLASS 2801 WHERE CLSNAME IN RANGECLASS 2802 AND LANGU = LANGUAGE 2803 AND ( CLSNAME LIKE 'ZC%' OR CLSNAME LIKE 'YC%' ) 2804 AND ( AUTHOR IN RANGEAUTHOR OR CHANGEDBY IN RANGEAUTHOR ) 2805 AND VERSION = '0' 2806 AND ( STATE = '0' OR STATE = '1' ). 2807 ENDIF. 2808 ELSE. 2809 * Searching using normal name ranges 2810 SELECT CLSNAME DESCRIPT MSG_ID 2811 FROM VSEOCLASS 2812 APPENDING CORRESPONDING FIELDS OF TABLE ILOCCLASS 2813 WHERE CLSNAME IN RANGECLASS 2814 AND ( CLSNAME LIKE 'ZC%' OR CLSNAME LIKE 'YC%' ) 2815 AND ( AUTHOR IN RANGEAUTHOR OR CHANGEDBY IN RANGEAUTHOR ) 2816 AND VERSION = '1' 2817 AND ( STATE = '0' OR STATE = '1' ). 2818 IF SY-SUBRC <> 0. 2819 SELECT CLSNAME DESCRIPT MSG_ID 2820 FROM VSEOCLASS 2821 APPENDING CORRESPONDING FIELDS OF TABLE ILOCCLASS 2822 WHERE CLSNAME IN RANGECLASS 2823 AND ( CLSNAME LIKE 'ZC%' OR CLSNAME LIKE 'YC%' ) 2824 AND ( AUTHOR IN RANGEAUTHOR OR CHANGEDBY IN RANGEAUTHOR ) 2825 AND VERSION = '0' 2826 AND ( STATE = '0' OR STATE = '1' ). 2827 ENDIF. 2828 ENDIF. 2829 ENDIF. 2830 ENDFORM. "findClassesByWildcard 2831 2832 *------------------------------------------------------------------------------------------------------- 2833 * checkClassDoesExist... 2834 *------------------------------------------------------------------------------------------------------- 2835 FORM CHECKCLASSDOESEXIST USING ILOCCLASS LIKE ICLASSES[] 2836 RANGECLASS LIKE SOCLASSNAME[]. 2837 2838 DATA: WACLASS TYPE TCLASS. 2839 2840 SELECT SINGLE CLSNAME DESCRIPT MSG_ID 2841 FROM VSEOCLASS 2842 INTO CORRESPONDING FIELDS OF WACLASS 2843 WHERE CLSNAME IN RANGECLASS 2844 AND VERSION = '1' 2845 AND ( STATE = '0' OR STATE = '1' ). 2846 2847 IF SY-SUBRC <> 0. 2848 SELECT SINGLE CLSNAME DESCRIPT MSG_ID 2849 FROM VSEOCLASS 2850 INTO CORRESPONDING FIELDS OF WACLASS 2851 WHERE CLSNAME IN RANGECLASS 2852 AND VERSION = '0' 2853 AND ( STATE = '0' OR STATE = '1' ). 2854 ENDIF. 2855 2856 IF NOT WACLASS-CLSNAME IS INITIAL. 2857 APPEND WACLASS TO ILOCCLASS. 2858 ENDIF. 2859 ENDFORM. "checkClassDoesExist 2860 2861 *------------------------------------------------------------------------------------------------------- 2862 * scanForAdditionalClassStuff... 2863 *------------------------------------------------------------------------------------------------------- 2864 FORM SCANFORADDITIONALCLASSSTUFF USING ILOCCLASSES LIKE ICLASSES[] 2865 ILOCFUNCTIONS LIKE IFUNCTIONS[] 2866 VALUE(GETTEXTELEMENTS) 2867 VALUE(GETMESSAGES) 2868 VALUE(GETCUSTDICTSTRUCTURES) 2869 VALUE(GETFUNCTIONS) 2870 VALUE(GETINCLUDES) 2871 VALUE(CUSTOMERONLY) 2872 VALUE(CUSTOMERNAMERANGE) 2873 VALUE(RECURSIVEINCLUDESEARCH) 2874 VALUE(RECURSIVEFUNCSEARCH) 2875 VALUE(RECURSIVECLASSSEARCH). 2876 2877 DATA: WACLASS TYPE TCLASS. 2878 DATA: WAMETHOD TYPE TMETHOD. 2879 DATA: MYTABIX TYPE SYTABIX. 2880 DATA: SCANNINGFORCLASSES TYPE I VALUE FALSE. 2881 DATA: CLASSNEWLINES TYPE I VALUE 0. 2882 DATA: CLASSCURRENTLINES TYPE I VALUE 0. 2883 2884 LOOP AT ILOCCLASSES INTO WACLASS WHERE SCANNED IS INITIAL. 2885 * Once we have a list of all the classes we need to loop round them an select all the other objects 2886 MYTABIX = SY-TABIX. 2887 PERFORM FINDCLASSDETAILS USING WACLASS-CLSNAME 2888 WACLASS 2889 ILOCFUNCTIONS[] 2890 GETTEXTELEMENTS 2891 GETMESSAGES 2892 GETFUNCTIONS 2893 GETCUSTDICTSTRUCTURES 2894 CUSTOMERONLY 2895 CUSTOMERNAMERANGE. 2896 2897 * Set the scanned class so we do not check them again when running recursively. 2898 WACLASS-SCANNED = 'X'. 2899 MODIFY ILOCCLASSES FROM WACLASS INDEX MYTABIX. 2900 ENDLOOP. 2901 2902 * Now we have all the classes and details we need to find extra classes 2903 IF NOT RECURSIVECLASSSEARCH IS INITIAL. 2904 CLASSCURRENTLINES = LINES( ILOCCLASSES ). 2905 LOOP AT ILOCCLASSES INTO WACLASS. 2906 * Don't try and find any other details for an exception class 2907 IF ( WACLASS-CLSNAME NS 'ZCX_' OR WACLASS-CLSNAME NS 'CX_' ). 2908 * Find any classes defined in the main class definition 2909 PERFORM SCANFORCLASSES USING WACLASS-PRIVATECLASSKEY 2910 WACLASS-CLSNAME 2911 CUSTOMERONLY 2912 CUSTOMERNAMERANGE 2913 ILOCCLASSES[]. 2914 2915 PERFORM SCANFORCLASSES USING WACLASS-PUBLICCLASSKEY 2916 WACLASS-CLSNAME 2917 CUSTOMERONLY 2918 CUSTOMERNAMERANGE 2919 ILOCCLASSES[]. 2920 2921 PERFORM SCANFORCLASSES USING WACLASS-PROTECTEDCLASSKEY 2922 WACLASS-CLSNAME 2923 CUSTOMERONLY 2924 CUSTOMERNAMERANGE 2925 ILOCCLASSES[]. 2926 2927 LOOP AT WACLASS-IMETHODS INTO WAMETHOD. 2928 * Find any classes defined in any of the methods 2929 PERFORM SCANFORCLASSES USING WAMETHOD-METHODKEY 2930 WACLASS-CLSNAME 2931 CUSTOMERONLY 2932 CUSTOMERNAMERANGE 2933 ILOCCLASSES[]. 2934 ENDLOOP. 2935 ENDIF. 2936 ENDLOOP. 2937 2938 * We have a list of all the classes so lets go and find their details 2939 CLASSNEWLINES = LINES( ILOCCLASSES ). 2940 IF CLASSNEWLINES > CLASSCURRENTLINES. 2941 PERFORM SCANFORADDITIONALCLASSSTUFF USING ILOCCLASSES[] 2942 ILOCFUNCTIONS[] 2943 GETTEXTELEMENTS 2944 GETMESSAGES 2945 GETCUSTDICTSTRUCTURES 2946 GETFUNCTIONS 2947 GETINCLUDES 2948 CUSTOMERONLY 2949 CUSTOMERNAMERANGE 2950 RECURSIVEINCLUDESEARCH 2951 RECURSIVEFUNCSEARCH 2952 RECURSIVECLASSSEARCH. 2953 ENDIF. 2954 ENDIF. 2955 ENDFORM. "scanForAdditionalClassStuff 2956 2957 *------------------------------------------------------------------------------------------------------- 2958 * findClassDetails... 2959 *------------------------------------------------------------------------------------------------------- 2960 FORM FINDCLASSDETAILS USING VALUE(CLASSNAME) 2961 WACLASS TYPE TCLASS 2962 ILOCFUNCTIONS LIKE IFUNCTIONS[] 2963 VALUE(GETTEXTELEMENTS) 2964 VALUE(GETMESSAGES) 2965 VALUE(GETFUNCTIONS) 2966 VALUE(GETCUSTDICTSTRUCTURES) 2967 VALUE(CUSTOMERONLY) 2968 VALUE(CUSTOMERNAMERANGE). 2969 2970 DATA: IEMPTYSELECTIONTEXTS TYPE STANDARD TABLE OF TTEXTTABLE. 2971 DATA: MYTABIX TYPE SYTABIX. 2972 DATA: WAMETHOD TYPE TMETHOD. 2973 2974 * Build up the keys we will use for finding data 2975 PERFORM BUILDCLASSKEYS USING WACLASS. 2976 2977 IF WACLASS-DESCRIPT IS INITIAL. 2978 PERFORM FINDCLASSDESCRIPTION USING CLASSNAME 2979 WACLASS-DESCRIPT. 2980 ENDIF. 2981 2982 * Find the class attributes. 2983 SELECT SINGLE EXPOSURE MSG_ID STATE CLSFINAL R3RELEASE 2984 FROM VSEOCLASS 2985 INTO (WACLASS-EXPOSURE, WACLASS-MSG_ID, WACLASS-STATE, 2986 WACLASS-CLSFINAL, WACLASS-R3RELEASE) 2987 WHERE CLSNAME = WACLASS-CLSNAME. 2988 2989 * Don't try and find any other details for an exception class 2990 IF ( WACLASS-CLSNAME CS 'ZCX_' OR WACLASS-CLSNAME CS 'CX_' ). 2991 * Exception texts 2992 PERFORM FINDEXCEPTIONTEXTS USING WACLASS-PUBLICCLASSKEY 2993 WACLASS-ICONCEPTS[]. 2994 WACLASS-SCANNED = 'X'. 2995 ELSE. 2996 IF NOT GETTEXTELEMENTS IS INITIAL. 2997 * Find the class texts from out of the database. 2998 PERFORM RETRIEVEPROGRAMTEXTS USING IEMPTYSELECTIONTEXTS[] 2999 WACLASS-ITEXTELEMENTS[] 3000 WACLASS-TEXTELEMENTKEY. 3001 ENDIF. 3002 3003 * Find any declared dictionary structures 3004 IF NOT GETCUSTDICTSTRUCTURES IS INITIAL. 3005 PERFORM SCANFORTABLES USING WACLASS-PRIVATECLASSKEY 3006 CUSTOMERONLY 3007 CUSTOMERNAMERANGE 3008 WACLASS-IDICTSTRUCT[]. 3009 3010 PERFORM SCANFORTABLES USING WACLASS-PUBLICCLASSKEY 3011 CUSTOMERONLY 3012 CUSTOMERNAMERANGE 3013 WACLASS-IDICTSTRUCT[]. 3014 3015 PERFORM SCANFORTABLES USING WACLASS-PROTECTEDCLASSKEY 3016 CUSTOMERONLY 3017 CUSTOMERNAMERANGE 3018 WACLASS-IDICTSTRUCT[]. 3019 3020 PERFORM SCANFORTABLES USING WACLASS-TYPESCLASSKEY 3021 CUSTOMERONLY 3022 CUSTOMERNAMERANGE 3023 WACLASS-IDICTSTRUCT[]. 3024 3025 PERFORM SCANFORLIKEORTYPE USING WACLASS-PRIVATECLASSKEY 3026 CUSTOMERONLY 3027 CUSTOMERNAMERANGE 3028 WACLASS-IDICTSTRUCT[]. 3029 3030 PERFORM SCANFORLIKEORTYPE USING WACLASS-PUBLICCLASSKEY 3031 CUSTOMERONLY 3032 CUSTOMERNAMERANGE 3033 WACLASS-IDICTSTRUCT[]. 3034 3035 PERFORM SCANFORLIKEORTYPE USING WACLASS-PROTECTEDCLASSKEY 3036 CUSTOMERONLY 3037 CUSTOMERNAMERANGE 3038 WACLASS-IDICTSTRUCT[]. 3039 3040 PERFORM SCANFORLIKEORTYPE USING WACLASS-TYPESCLASSKEY 3041 CUSTOMERONLY 3042 CUSTOMERNAMERANGE 3043 WACLASS-IDICTSTRUCT[]. 3044 ENDIF. 3045 3046 3047 * Methods 3048 * Find all the methods for this class 3049 PERFORM FINDCLASSMETHODS USING CLASSNAME 3050 WACLASS-IMETHODS[]. 3051 3052 LOOP AT WACLASS-IMETHODS[] INTO WAMETHOD. 3053 MYTABIX = SY-TABIX. 3054 * Find individual messages 3055 IF NOT GETMESSAGES IS INITIAL. 3056 PERFORM SCANFORMESSAGES USING WAMETHOD-METHODKEY 3057 WACLASS-MSG_ID 3058 WACLASS-IMESSAGES[]. 3059 ENDIF. 3060 3061 IF NOT GETCUSTDICTSTRUCTURES IS INITIAL. 3062 * Find any declared dictionary structures 3063 PERFORM SCANFORTABLES USING WAMETHOD-METHODKEY 3064 CUSTOMERONLY 3065 CUSTOMERNAMERANGE 3066 WACLASS-IDICTSTRUCT[]. 3067 3068 PERFORM SCANFORLIKEORTYPE USING WAMETHOD-METHODKEY 3069 CUSTOMERONLY 3070 CUSTOMERNAMERANGE 3071 WACLASS-IDICTSTRUCT[]. 3072 ENDIF. 3073 3074 IF NOT GETFUNCTIONS IS INITIAL. 3075 PERFORM SCANFORFUNCTIONS USING WAMETHOD-METHODKEY 3076 WACLASS-CLSNAME 3077 SPACE 3078 SPACE 3079 CUSTOMERONLY 3080 CUSTOMERNAMERANGE 3081 ILOCFUNCTIONS[]. 3082 ENDIF. 3083 3084 MODIFY WACLASS-IMETHODS FROM WAMETHOD INDEX MYTABIX. 3085 ENDLOOP. 3086 ENDIF. 3087 ENDFORM. "findClassDetails 3088 3089 *------------------------------------------------------------------------------------------------------- 3090 * buildClassKeys... Finds the title text of a class. 3091 *------------------------------------------------------------------------------------------------------- 3092 FORM BUILDCLASSKEYS USING WACLASS TYPE TCLASS. 3093 3094 DATA: CLASSNAMELENGTH TYPE I. 3095 DATA: LOOPS TYPE I. 3096 3097 CLASSNAMELENGTH = STRLEN( WACLASS-CLSNAME ). 3098 3099 CL_OO_CLASSNAME_SERVICE=>GET_PUBSEC_NAME( EXPORTING CLSNAME = WACLASS-CLSNAME 3100 RECEIVING RESULT = WACLASS-PUBLICCLASSKEY ). 3101 3102 CL_OO_CLASSNAME_SERVICE=>GET_PRISEC_NAME( EXPORTING CLSNAME = WACLASS-CLSNAME 3103 RECEIVING RESULT = WACLASS-PRIVATECLASSKEY ). 3104 3105 CL_OO_CLASSNAME_SERVICE=>GET_PROSEC_NAME( EXPORTING CLSNAME = WACLASS-CLSNAME 3106 RECEIVING RESULT = WACLASS-PROTECTEDCLASSKEY ). 3107 3108 3109 * Text element key - length of text element key has to be 32 characters. 3110 LOOPS = 30 - CLASSNAMELENGTH. 3111 WACLASS-TEXTELEMENTKEY = WACLASS-CLSNAME. 3112 DO LOOPS TIMES. 3113 CONCATENATE WACLASS-TEXTELEMENTKEY '=' INTO WACLASS-TEXTELEMENTKEY. 3114 ENDDO. 3115 * Save this for later. 3116 CONCATENATE WACLASS-TEXTELEMENTKEY 'CP' INTO WACLASS-TEXTELEMENTKEY. 3117 3118 * Types Class key - length of class name has to be 32 characters. 3119 LOOPS = 30 - CLASSNAMELENGTH. 3120 WACLASS-TYPESCLASSKEY = WACLASS-CLSNAME. 3121 DO LOOPS TIMES. 3122 CONCATENATE WACLASS-TYPESCLASSKEY '=' INTO WACLASS-TYPESCLASSKEY. 3123 ENDDO. 3124 * Save this for later 3125 CONCATENATE WACLASS-TYPESCLASSKEY 'CT' INTO WACLASS-TYPESCLASSKEY. 3126 ENDFORM. "buildClassKeys 3127 3128 *------------------------------------------------------------------------------------------------------- 3129 * findClassDescription... Finds the title text of a class. 3130 *------------------------------------------------------------------------------------------------------- 3131 FORM FINDCLASSDESCRIPTION USING VALUE(CLASSNAME) 3132 TITLETEXT. 3133 3134 SELECT SINGLE DESCRIPT 3135 FROM VSEOCLASS 3136 INTO TITLETEXT 3137 WHERE CLSNAME = CLASSNAME 3138 AND LANGU = SY-LANGU. 3139 IF SY-SUBRC <> 0. 3140 SELECT SINGLE DESCRIPT 3141 FROM VSEOCLASS 3142 INTO TITLETEXT 3143 WHERE CLSNAME = CLASSNAME. 3144 ENDIF. 3145 ENDFORM. "findClassDescription 3146 3147 *------------------------------------------------------------------------------------------------------- 3148 * findExceptionTexts... Fiond the texts of an exception class. 3149 *------------------------------------------------------------------------------------------------------- 3150 FORM FINDEXCEPTIONTEXTS USING PUBLICCLASSKEY 3151 ICONCEPTS LIKE DUMICONCEPTS[]. 3152 3153 DATA: CASTCLASSNAME TYPE PROGRAM. 3154 DATA: ITEMPLINES TYPE STANDARD TABLE OF STRING WITH HEADER LINE. 3155 DATA: ITOKENS TYPE STANDARD TABLE OF STOKES WITH HEADER LINE. 3156 DATA: IKEYWORDS TYPE STANDARD TABLE OF TEXT20 WITH HEADER LINE. 3157 DATA: ISTATEMENTS TYPE STANDARD TABLE OF SSTMNT WITH HEADER LINE. 3158 DATA: WATOKENS TYPE STOKES. 3159 DATA: WACURRENTTOKEN TYPE STOKES. 3160 DATA: WACONCEPT LIKE LINE OF ICONCEPTS. 3161 DATA: TOKENLENGTH TYPE I. 3162 DATA: MYROW TYPE I. 3163 3164 CASTCLASSNAME = PUBLICCLASSKEY. 3165 READ REPORT CASTCLASSNAME INTO ITEMPLINES. 3166 3167 APPEND 'CONSTANTS' TO IKEYWORDS. 3168 SCAN ABAP-SOURCE ITEMPLINES TOKENS INTO ITOKENS STATEMENTS INTO ISTATEMENTS KEYWORDS FROM IKEYWORDS. 3169 3170 DELETE ITOKENS WHERE STR = 'CONSTANTS'. 3171 DELETE ITOKENS WHERE STR = 'VALUE'. 3172 DELETE ITOKENS WHERE STR = 'TYPE'. 3173 3174 LOOP AT ITOKENS INTO WATOKENS WHERE STR = 'SOTR_CONC'. 3175 * The loop before holds the constant name 3176 MYROW = SY-TABIX - 1. 3177 READ TABLE ITOKENS INDEX MYROW INTO WACURRENTTOKEN. 3178 WACONCEPT-CONSTNAME = WACURRENTTOKEN-STR. 3179 3180 * The loop after holds the constant name 3181 MYROW = MYROW + 2. 3182 READ TABLE ITOKENS INDEX MYROW INTO WACURRENTTOKEN. 3183 TOKENLENGTH = STRLEN( WACURRENTTOKEN-STR ). 3184 IF TOKENLENGTH = 34. 3185 * Most likely an exception text. 3186 REPLACE ALL OCCURRENCES OF '''' IN WACURRENTTOKEN-STR WITH ' ' . 3187 WACONCEPT-CONCEPT = WACURRENTTOKEN-STR. 3188 APPEND WACONCEPT TO ICONCEPTS. 3189 ENDIF. 3190 ENDLOOP. 3191 ENDFORM. 3192 3193 *------------------------------------------------------------------------------------------------------- 3194 * findClassMethods... Finds the methods of a class. 3195 *------------------------------------------------------------------------------------------------------- 3196 FORM FINDCLASSMETHODS USING VALUE(CLASSNAME) 3197 ILOCMETHODS LIKE DUMIMETHODS[]. 3198 3199 DATA: IMETHODS TYPE STANDARD TABLE OF TMETHOD WITH HEADER LINE. 3200 3201 SELECT CMPNAME DESCRIPT EXPOSURE 3202 FROM VSEOMETHOD 3203 INTO CORRESPONDING FIELDS OF TABLE IMETHODS 3204 WHERE CLSNAME = CLASSNAME 3205 AND VERSION = '1' 3206 AND LANGU = SY-LANGU 3207 AND ( STATE = '0' OR STATE = '1' ). 3208 3209 IF SY-SUBRC <> 0. 3210 SELECT CMPNAME DESCRIPT EXPOSURE 3211 FROM VSEOMETHOD 3212 INTO CORRESPONDING FIELDS OF TABLE IMETHODS 3213 WHERE CLSNAME = CLASSNAME 3214 AND VERSION = '0' 3215 AND LANGU = SY-LANGU 3216 AND ( STATE = '0' OR STATE = '1' ). 3217 ENDIF. 3218 3219 * Find the method key so that we can acces the source code later 3220 LOOP AT IMETHODS. 3221 PERFORM FINDMETHODKEY USING CLASSNAME 3222 IMETHODS-CMPNAME 3223 IMETHODS-METHODKEY. 3224 MODIFY IMETHODS. 3225 ENDLOOP. 3226 3227 ILOCMETHODS[] = IMETHODS[]. 3228 ENDFORM. "findClassMethods 3229 3230 *------------------------------------------------------------------------------------------------------- 3231 * findMethodKey... find the unique key which identifes this method 3232 *------------------------------------------------------------------------------------------------------- 3233 FORM FINDMETHODKEY USING VALUE(CLASSNAME) 3234 VALUE(METHODNAME) 3235 METHODKEY. 3236 3237 DATA: METHODID TYPE SEOCPDKEY. 3238 DATA: LOCMETHODKEY TYPE PROGRAM. 3239 3240 METHODID-CLSNAME = CLASSNAME. 3241 METHODID-CPDNAME = METHODNAME. 3242 3243 CL_OO_CLASSNAME_SERVICE=>GET_METHOD_INCLUDE( EXPORTING MTDKEY = METHODID 3244 RECEIVING RESULT = LOCMETHODKEY 3245 EXCEPTIONS CLASS_NOT_EXISTING = 1 3246 METHOD_NOT_EXISTING = 2 ). 3247 3248 METHODKEY = LOCMETHODKEY. 3249 ENDFORM. "findMethodKey 3250 3251 *------------------------------------------------------------------------------------------------------- 3252 * scanForMessages... Search each program for messages 3253 *------------------------------------------------------------------------------------------------------- 3254 FORM SCANFORMESSAGES USING VALUE(PROGRAMNAME) 3255 VALUE(MAINMESSAGECLASS) 3256 ILOCMESSAGES LIKE IMESSAGES[]. 3257 3258 DATA: IINCLUDELINES TYPE STANDARD TABLE OF STRING WITH HEADER LINE. 3259 DATA: ITOKENS TYPE STANDARD TABLE OF STOKES WITH HEADER LINE. 3260 DATA: ISTATEMENTS TYPE STANDARD TABLE OF SSTMNT WITH HEADER LINE. 3261 DATA: IKEYWORDS TYPE STANDARD TABLE OF TEXT20 WITH HEADER LINE. 3262 DATA: WAMESSAGE TYPE TMESSAGE. 3263 DATA: WAMESSAGECOMPARISON TYPE TMESSAGE. 3264 DATA: WATOKENS TYPE STOKES. 3265 DATA: NEXTLINE TYPE I. 3266 DATA: STRINGLENGTH TYPE I VALUE 0. 3267 DATA: WORKINGONMESSAGE TYPE I VALUE FALSE. 3268 DATA: CASTPROGRAMNAME TYPE PROGRAM. 3269 3270 * Read the program code from the textpool. 3271 CASTPROGRAMNAME = PROGRAMNAME. 3272 READ REPORT CASTPROGRAMNAME INTO IINCLUDELINES. 3273 3274 APPEND MESSAGE TO IKEYWORDS. 3275 SCAN ABAP-SOURCE IINCLUDELINES TOKENS INTO ITOKENS WITH INCLUDES STATEMENTS INTO ISTATEMENTS KEYWORDS FROM IKEYWORDS. 3276 3277 CLEAR IINCLUDELINES[]. 3278 3279 LOOP AT ITOKENS. 3280 IF ITOKENS-STR = MESSAGE. 3281 WORKINGONMESSAGE = TRUE. 3282 CONTINUE. 3283 ENDIF. 3284 3285 IF WORKINGONMESSAGE = TRUE. 3286 STRINGLENGTH = STRLEN( ITOKENS-STR ). 3287 3288 * Message declaration 1 3289 IF STRINGLENGTH = 4 AND ITOKENS-STR+0(1) CA SY-ABCDE. 3290 WAMESSAGE-MSGNR = ITOKENS-STR+1(3). 3291 WAMESSAGE-ARBGB = MAINMESSAGECLASS. 3292 ELSE. 3293 IF ITOKENS-STR CS '''' OR ITOKENS-STR CS '`'. 3294 * Message declaration 2 3295 TRANSLATE ITOKENS-STR USING ''' '. 3296 TRANSLATE ITOKENS-STR USING '` '. 3297 CONDENSE ITOKENS-STR. 3298 SHIFT ITOKENS-STR LEFT DELETING LEADING SPACE. 3299 WAMESSAGE-TEXT = ITOKENS-STR. 3300 WAMESSAGE-ARBGB = 'Hard coded'. 3301 ELSE. 3302 IF ITOKENS-STR = 'ID'. 3303 * Message declaration 3 3304 NEXTLINE = SY-TABIX + 1. 3305 READ TABLE ITOKENS INDEX NEXTLINE INTO WATOKENS. 3306 TRANSLATE WATOKENS-STR USING ''' '. 3307 CONDENSE ITOKENS-STR. 3308 SHIFT WATOKENS-STR LEFT DELETING LEADING SPACE. 3309 IF NOT WATOKENS-STR = 'SY-MSGID'. 3310 WAMESSAGE-ARBGB = WATOKENS-STR. 3311 3312 NEXTLINE = NEXTLINE + 4. 3313 READ TABLE ITOKENS INDEX NEXTLINE INTO WATOKENS. 3314 TRANSLATE WATOKENS-STR USING ''' '. 3315 CONDENSE WATOKENS-STR. 3316 SHIFT WATOKENS-STR LEFT DELETING LEADING SPACE. 3317 WAMESSAGE-MSGNR = WATOKENS-STR. 3318 ELSE. 3319 WORKINGONMESSAGE = FALSE. 3320 ENDIF. 3321 ELSE. 3322 IF STRINGLENGTH >= 5 AND ITOKENS-STR+4(1) = '('. 3323 * Message declaration 4 3324 WAMESSAGE-MSGNR = ITOKENS-STR+1(3). 3325 SHIFT ITOKENS-STR LEFT UP TO '('. 3326 REPLACE '(' INTO ITOKENS-STR WITH SPACE. 3327 REPLACE ')' INTO ITOKENS-STR WITH SPACE. 3328 CONDENSE ITOKENS-STR. 3329 WAMESSAGE-ARBGB = ITOKENS-STR. 3330 ENDIF. 3331 ENDIF. 3332 ENDIF. 3333 ENDIF. 3334 3335 * find the message text 3336 IF NOT WAMESSAGE-ARBGB IS INITIAL AND NOT WAMESSAGE-MSGNR IS INITIAL AND WAMESSAGE-TEXT IS INITIAL. 3337 SELECT SINGLE TEXT 3338 FROM T100 3339 INTO WAMESSAGE-TEXT 3340 WHERE SPRSL = SY-LANGU 3341 AND ARBGB = WAMESSAGE-ARBGB 3342 AND MSGNR = WAMESSAGE-MSGNR. 3343 ENDIF. 3344 3345 * Append the message 3346 IF NOT WAMESSAGE IS INITIAL. 3347 * Don't append the message if we already have it listed 3348 READ TABLE ILOCMESSAGES WITH KEY ARBGB = WAMESSAGE-ARBGB 3349 MSGNR = WAMESSAGE-MSGNR 3350 INTO WAMESSAGECOMPARISON. 3351 IF SY-SUBRC <> 0. 3352 APPEND WAMESSAGE TO ILOCMESSAGES. 3353 ENDIF. 3354 CLEAR WAMESSAGE. 3355 WORKINGONMESSAGE = FALSE. 3356 ENDIF. 3357 ENDIF. 3358 ENDLOOP. 3359 ENDFORM. "scanForMessages 3360 3361 *------------------------------------------------------------------------------------------------------- 3362 * scanForTables... Search each program for dictionary tables 3363 *------------------------------------------------------------------------------------------------------- 3364 FORM SCANFORTABLES USING VALUE(PROGRAMNAME) 3365 VALUE(CUSTOMERONLY) 3366 VALUE(CUSTOMERNAMERANGE) 3367 ILOCDICTIONARY LIKE IDICTIONARY[]. 3368 3369 DATA: IINCLUDELINES TYPE STANDARD TABLE OF STRING WITH HEADER LINE. 3370 DATA: ITOKENS TYPE STANDARD TABLE OF STOKES WITH HEADER LINE. 3371 DATA: ISTATEMENTS TYPE STANDARD TABLE OF SSTMNT WITH HEADER LINE. 3372 DATA: IKEYWORDS TYPE STANDARD TABLE OF TEXT20 WITH HEADER LINE. 3373 DATA: WADICTIONARY TYPE TDICTTABLE. 3374 DATA: WADICTIONARYCOMPARISON TYPE TDICTTABLE. 3375 DATA: CASTPROGRAMNAME TYPE PROGRAM. 3376 3377 * Read the program code from the textpool. 3378 CASTPROGRAMNAME = PROGRAMNAME. 3379 READ REPORT CASTPROGRAMNAME INTO IINCLUDELINES. 3380 3381 APPEND TABLES TO IKEYWORDS. 3382 3383 SCAN ABAP-SOURCE IINCLUDELINES TOKENS INTO ITOKENS WITH INCLUDES STATEMENTS INTO ISTATEMENTS KEYWORDS FROM IKEYWORDS. 3384 CLEAR IINCLUDELINES[]. 3385 3386 SORT ITOKENS ASCENDING BY STR. 3387 DELETE ITOKENS WHERE STR = TABLES. 3388 3389 LOOP AT ITOKENS. 3390 IF NOT CUSTOMERONLY IS INITIAL. 3391 TRY. 3392 IF ( ITOKENS-STR+0(1) <> 'Y' OR ITOKENS-STR+0(1) <> 'Z' OR ITOKENS-STR NS CUSTOMERNAMERANGE ). 3393 CONTINUE. 3394 ENDIF. 3395 CATCH CX_SY_RANGE_OUT_OF_BOUNDS INTO OBJRUNTIMEERROR. 3396 ENDTRY. 3397 ENDIF. 3398 3399 WADICTIONARY-TABLENAME = ITOKENS-STR. 3400 * Don't append the object if we already have it listed 3401 READ TABLE ILOCDICTIONARY INTO WADICTIONARYCOMPARISON WITH KEY TABLENAME = WADICTIONARY-TABLENAME. 3402 IF SY-SUBRC <> 0. 3403 PERFORM FINDTABLEDESCRIPTION USING WADICTIONARY-TABLENAME 3404 WADICTIONARY-TABLETITLE. 3405 3406 PERFORM FINDTABLEDEFINITION USING WADICTIONARY-TABLENAME 3407 WADICTIONARY-ISTRUCTURE[]. 3408 3409 APPEND WADICTIONARY TO ILOCDICTIONARY. 3410 ENDIF. 3411 ENDLOOP. 3412 ENDFORM. "scanForTables 3413 3414 *------------------------------------------------------------------------------------------------------- 3415 * findProgramScreenFlow... 3416 *------------------------------------------------------------------------------------------------------- 3417 FORM FINDPROGRAMSCREENFLOW USING WAPROGRAM TYPE TPROGRAM. 3418 3419 DATA: IFLOW TYPE STANDARD TABLE OF TSCREENFLOW WITH HEADER LINE. 3420 3421 CALL FUNCTION 'DYNPRO_PROCESSINGLOGIC' 3422 EXPORTING 3423 REP_NAME = WAPROGRAM-PROGNAME 3424 TABLES 3425 SCR_LOGIC = IFLOW. 3426 3427 SORT IFLOW ASCENDING BY SCREEN. 3428 DELETE ADJACENT DUPLICATES FROM IFLOW COMPARING SCREEN. 3429 IF WAPROGRAM-SUBC <> 'M'. 3430 DELETE IFLOW WHERE SCREEN >= '1000' AND SCREEN <= '1099'. 3431 ENDIF. 3432 3433 LOOP AT IFLOW. 3434 APPEND IFLOW TO WAPROGRAM-ISCREENFLOW. 3435 ENDLOOP. 3436 ENDFORM. "findProgramScreenFlow 3437 3438 *------------------------------------------------------------------------------------------------------- 3439 * findFunctionScreenFlow... 3440 *------------------------------------------------------------------------------------------------------- 3441 FORM FINDFUNCTIONSCREENFLOW USING WAFUNCTION TYPE TFUNCTION. 3442 3443 DATA: IFLOW TYPE STANDARD TABLE OF TSCREENFLOW WITH HEADER LINE. 3444 3445 CALL FUNCTION 'DYNPRO_PROCESSINGLOGIC' 3446 EXPORTING 3447 REP_NAME = WAFUNCTION-PROGNAME 3448 TABLES 3449 SCR_LOGIC = IFLOW. 3450 3451 SORT IFLOW ASCENDING BY SCREEN. 3452 DELETE ADJACENT DUPLICATES FROM IFLOW COMPARING SCREEN. 3453 3454 LOOP AT IFLOW. 3455 APPEND IFLOW TO WAFUNCTION-ISCREENFLOW. 3456 ENDLOOP. 3457 ENDFORM. "findFunctionScreenFlow 3458 3459 *------------------------------------------------------------------------------------------------------- 3460 * scanForLikeOrType... Look for any dictionary objects referenced by a like or type statement 3461 *------------------------------------------------------------------------------------------------------- 3462 FORM SCANFORLIKEORTYPE USING VALUE(PROGRAMNAME) 3463 VALUE(CUSTOMERONLY) 3464 VALUE(CUSTOMERNAMERANGE) 3465 ILOCDICTIONARY LIKE IDICTIONARY[]. 3466 3467 DATA ILINES TYPE STANDARD TABLE OF STRING WITH HEADER LINE. 3468 DATA: HEAD TYPE STRING. 3469 DATA: TAIL TYPE STRING. 3470 DATA: JUNK TYPE STRING. 3471 DATA: LINETYPE TYPE STRING. 3472 DATA: LINELENGTH TYPE I VALUE 0. 3473 DATA: ENDOFLINE TYPE I VALUE TRUE. 3474 DATA: WADICTIONARY TYPE TDICTTABLE. 3475 DATA: WADICTIONARYCOMPARISON TYPE TDICTTABLE. 3476 DATA: WALINE TYPE STRING. 3477 DATA: CASTPROGRAMNAME TYPE PROGRAM. 3478 3479 * Read the program code from the textpool. 3480 CASTPROGRAMNAME = PROGRAMNAME. 3481 READ REPORT CASTPROGRAMNAME INTO ILINES. 3482 3483 LOOP AT ILINES INTO WALINE. 3484 * Find custom tables. 3485 LINELENGTH = STRLEN( WALINE ). 3486 IF LINELENGTH > 0. 3487 IF WALINE(1) = ASTERIX. 3488 CONTINUE. 3489 ENDIF. 3490 3491 TRANSLATE WALINE TO UPPER CASE. 3492 3493 * Determine the lineType. 3494 IF ENDOFLINE = TRUE. 3495 SHIFT WALINE UP TO LIKE. 3496 IF SY-SUBRC = 0. 3497 LINETYPE = LIKE. 3498 ELSE. 3499 SHIFT WALINE UP TO TYPE. 3500 IF SY-SUBRC = 0. 3501 FIND 'BEGIN OF' IN WALINE. 3502 IF SY-SUBRC <> 0. 3503 FIND 'END OF' IN WALINE. 3504 IF SY-SUBRC <> 0. 3505 FIND 'VALUE' IN WALINE. 3506 IF SY-SUBRC <> 0. 3507 LINETYPE = TYPE. 3508 ENDIF. 3509 ENDIF. 3510 ENDIF. 3511 ELSE. 3512 SHIFT WALINE UP TO INCLUDE. 3513 IF SY-SUBRC = 0. 3514 SPLIT WALINE AT SPACE INTO JUNK ILINES. 3515 ENDIF. 3516 3517 SHIFT WALINE UP TO STRUCTURE. 3518 IF SY-SUBRC = 0. 3519 LINETYPE = STRUCTURE. 3520 ELSE. 3521 CONTINUE. 3522 ENDIF. 3523 ENDIF. 3524 ENDIF. 3525 ELSE. 3526 LINETYPE = COMMA. 3527 ENDIF. 3528 3529 CASE LINETYPE. 3530 WHEN LIKE OR TYPE OR STRUCTURE. 3531 * Work on the appropriate lineType 3532 SHIFT WALINE UP TO SPACE. 3533 SHIFT WALINE LEFT DELETING LEADING SPACE. 3534 IF WALINE CS TABLE. 3535 SPLIT WALINE AT TABLE INTO HEAD TAIL. 3536 SPLIT TAIL AT 'OF' INTO HEAD TAIL. 3537 WALINE = TAIL. 3538 SHIFT WALINE LEFT DELETING LEADING SPACE. 3539 ENDIF. 3540 3541 * Are we only to download SAP dictionary structures. 3542 IF NOT CUSTOMERONLY IS INITIAL. 3543 TRY. 3544 IF WALINE+0(1) = 'Y' OR WALINE+0(1) = 'Z' OR WALINE CS CUSTOMERNAMERANGE. 3545 ELSE. 3546 LINETYPE = ''. 3547 CONTINUE. 3548 ENDIF. 3549 CATCH CX_SY_RANGE_OUT_OF_BOUNDS INTO OBJRUNTIMEERROR. 3550 ENDTRY. 3551 ENDIF. 3552 3553 IF WALINE CS COMMA. 3554 SPLIT WALINE AT COMMA INTO HEAD TAIL. 3555 IF WALINE CS DASH. 3556 SPLIT HEAD AT DASH INTO HEAD TAIL. 3557 ENDIF. 3558 IF WALINE CS OCCURS. 3559 SPLIT WALINE AT SPACE INTO HEAD TAIL. 3560 ENDIF. 3561 ELSE. 3562 IF WALINE CS PERIOD. 3563 SPLIT WALINE AT PERIOD INTO HEAD TAIL. 3564 IF WALINE CS DASH. 3565 SPLIT HEAD AT DASH INTO HEAD TAIL. 3566 ENDIF. 3567 IF WALINE CS OCCURS. 3568 SPLIT WALINE AT SPACE INTO HEAD TAIL. 3569 ENDIF. 3570 ELSE. 3571 SPLIT WALINE AT SPACE INTO HEAD TAIL. 3572 IF WALINE CS DASH. 3573 SPLIT HEAD AT DASH INTO HEAD TAIL. 3574 ENDIF. 3575 ENDIF. 3576 ENDIF. 3577 3578 IF NOT HEAD IS INITIAL. 3579 WADICTIONARY-TABLENAME = HEAD. 3580 * Don't append the object if we already have it listed 3581 READ TABLE ILOCDICTIONARY INTO WADICTIONARYCOMPARISON 3582 WITH KEY TABLENAME = WADICTIONARY-TABLENAME. 3583 IF SY-SUBRC <> 0. 3584 PERFORM FINDTABLEDESCRIPTION USING WADICTIONARY-TABLENAME 3585 WADICTIONARY-TABLETITLE. 3586 3587 PERFORM FINDTABLEDEFINITION USING WADICTIONARY-TABLENAME 3588 WADICTIONARY-ISTRUCTURE[]. 3589 3590 * Only append if the item is a table and not a structure or data element 3591 IF NOT WADICTIONARY-ISTRUCTURE[] IS INITIAL. 3592 APPEND WADICTIONARY TO ILOCDICTIONARY. 3593 ENDIF. 3594 ENDIF. 3595 CLEAR WADICTIONARY. 3596 ENDIF. 3597 3598 LINETYPE = ''. 3599 ENDCASE. 3600 ENDIF. 3601 ENDLOOP. 3602 ENDFORM. "scanForLikeOrType 3603 3604 *------------------------------------------------------------------------------------------------------- 3605 * displayStatus... 3606 *------------------------------------------------------------------------------------------------------- 3607 FORM DISPLAYSTATUS USING VALUE(MESSAGE) 3608 VALUE(DELAY). 3609 3610 CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' 3611 EXPORTING 3612 PERCENTAGE = 0 3613 TEXT = MESSAGE 3614 EXCEPTIONS 3615 OTHERS = 1. 3616 3617 IF DELAY > 0. 3618 WAIT UP TO DELAY SECONDS. 3619 ENDIF. 3620 ENDFORM. "displayStatus 3621 3622 *------------------------------------------------------------------------------------------------------- 3623 * removeLeadingZeros... 3624 *------------------------------------------------------------------------------------------------------- 3625 FORM REMOVELEADINGZEROS CHANGING MYVALUE. 3626 3627 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' 3628 EXPORTING 3629 INPUT = MYVALUE 3630 IMPORTING 3631 OUTPUT = MYVALUE 3632 EXCEPTIONS 3633 OTHERS = 1. 3634 ENDFORM. "removeLeadingZeros 3635 3636 *------------------------------------------------------------------------------------------------------- 3637 * determineFrontendOPSystem.... Determine the frontend operating system type. 3638 *------------------------------------------------------------------------------------------------------- 3639 FORM DETERMINEFRONTENDOPSYSTEM USING SEPARATOR 3640 OPERATINGSYSTEM. 3641 3642 DATA: PLATFORMID TYPE I VALUE 0. 3643 3644 CREATE OBJECT OBJFILE. 3645 3646 CALL METHOD OBJFILE->GET_PLATFORM 3647 RECEIVING 3648 PLATFORM = PLATFORMID 3649 EXCEPTIONS 3650 CNTL_ERROR = 1 3651 ERROR_NO_GUI = 2 3652 NOT_SUPPORTED_BY_GUI = 3. 3653 CASE PLATFORMID. 3654 WHEN OBJFILE->PLATFORM_WINDOWS95 3655 OR OBJFILE->PLATFORM_WINDOWS98 3656 OR OBJFILE->PLATFORM_NT351 3657 OR OBJFILE->PLATFORM_NT40 3658 OR OBJFILE->PLATFORM_NT50 3659 OR OBJFILE->PLATFORM_MAC 3660 OR OBJFILE->PLATFORM_OS2 3661 OR 14. "XP 3662 SEPARATOR = '/'. 3663 OPERATINGSYSTEM = NON_UNIX. 3664 WHEN OTHERS. 3665 SEPARATOR = '/'. 3666 OPERATINGSYSTEM = UNIX. 3667 ENDCASE. 3668 ENDFORM. "determineFrontendOpSystem 3669 3670 *------------------------------------------------------------------------------------------------------- 3671 * determineServerOPSystem.... Determine the server operating system type. 3672 *------------------------------------------------------------------------------------------------------- 3673 FORM DETERMINESERVEROPSYSTEM USING SEPARATOR 3674 SERVERFILESYSTEM 3675 SERVEROPSYSTEM. 3676 3677 * Find the file system 3678 SELECT SINGLE FILESYS 3679 FROM OPSYSTEM 3680 INTO SERVERFILESYSTEM 3681 WHERE OPSYS = SY-OPSYS. 3682 3683 FIND 'WINDOWS' IN SERVERFILESYSTEM IGNORING CASE. 3684 IF SY-SUBRC = 0. 3685 SEPARATOR = '/'. 3686 SERVEROPSYSTEM = NON_UNIX. 3687 ELSE. 3688 FIND 'DOS' IN SERVERFILESYSTEM IGNORING CASE. 3689 IF SY-SUBRC = 0. 3690 SEPARATOR = '/'. 3691 SERVEROPSYSTEM = NON_UNIX. 3692 ELSE. 3693 SEPARATOR = '/'. 3694 SERVEROPSYSTEM = UNIX. 3695 ENDIF. 3696 ENDIF. 3697 ENDFORM. "determineServerOpSystem 3698 3699 *------------------------------------------------------------------------------------------------------- 3700 * findExternalCommand.... Determine if the external command exists. If it doesn't then disable the 3701 * server input field 3702 *------------------------------------------------------------------------------------------------------- 3703 FORM FINDEXTERNALCOMMAND. 3704 3705 CALL FUNCTION 'SXPG_COMMAND_CHECK' 3706 EXPORTING 3707 COMMANDNAME = 'ZMKDIR' 3708 OPERATINGSYSTEM = SY-OPSYS 3709 EXCEPTIONS 3710 COMMAND_NOT_FOUND = 1 3711 OTHERS = 0. 3712 3713 IF SY-SUBRC <> 0. 3714 LOOP AT SCREEN. 3715 IF SCREEN-NAME = 'PLOGICAL'. 3716 SCREEN-INPUT = 0. 3717 MODIFY SCREEN. 3718 ENDIF. 3719 3720 IF SCREEN-NAME = 'PSERV'. 3721 SCREEN-INPUT = 0. 3722 MODIFY SCREEN. 3723 ENDIF. 3724 3725 IF SCREEN-NAME = 'PPC'. 3726 SCREEN-INPUT = 0. 3727 MODIFY SCREEN. 3728 ENDIF. 3729 ENDLOOP. 3730 3731 MESSAGE S000(OO) WITH 'Download to server disabled,' 'external command ZMKDIR not defined.'. 3732 ENDIF. 3733 ENDFORM. 3734 3735 ******************************************************************************************************** 3736 *****************************************DOWNLOAD ROUTINES********************************************** 3737 ******************************************************************************************************** 3738 3739 *------------------------------------------------------------------------------------------------------- 3740 * downloadDDStructures... download database objects to file 3741 *------------------------------------------------------------------------------------------------------- 3742 FORM DOWNLOADDDSTRUCTURES USING ILOCDICTIONARY LIKE IDICTIONARY[] 3743 VALUE(PATHNAME) 3744 VALUE(HTMLFILEEXTENSION) 3745 VALUE(SUBDIR) 3746 VALUE(SORTTABLESASC) 3747 VALUE(SLASHSEPARATOR) 3748 VALUE(SAVETOSERVER) 3749 VALUE(DISPLAYPROGRESSMESSAGE). 3750 3751 FIELD-SYMBOLS: <WADICTIONARY> TYPE TDICTTABLE. 3752 DATA: TABLEFILENAME TYPE STRING. 3753 DATA: TABLEFILENAMEWITHPATH TYPE STRING. 3754 DATA: IHTMLTABLE TYPE STANDARD TABLE OF STRING WITH HEADER LINE. 3755 DATA: NEWSUBDIRECTORY TYPE STRING. 3756 DATA: COMPLETESAVEPATH TYPE STRING. 3757 3758 LOOP AT ILOCDICTIONARY ASSIGNING <WADICTIONARY>. 3759 PERFORM BUILDFILENAME USING PATHNAME 3760 SUBDIR 3761 <WADICTIONARY>-TABLENAME 3762 SPACE 3763 SPACE 3764 HTMLFILEEXTENSION 3765 IS_TABLE 3766 SAVETOSERVER 3767 SLASHSEPARATOR 3768 TABLEFILENAMEWITHPATH 3769 TABLEFILENAME 3770 NEWSUBDIRECTORY 3771 COMPLETESAVEPATH. 3772 3773 * Try and import a converted table to memory as it will be much quicker than converting it again 3774 IMPORT IHTMLTABLE FROM MEMORY ID <WADICTIONARY>-TABLENAME. 3775 IF SY-SUBRC <> 0. 3776 CONCATENATE 'Converting table' <WADICTIONARY>-TABLENAME 'to html' INTO STATUSBARMESSAGE SEPARATED BY SPACE. 3777 PERFORM DISPLAYSTATUS USING STATUSBARMESSAGE 0. 3778 3779 PERFORM CONVERTDDTOHTML USING <WADICTIONARY>-ISTRUCTURE[] 3780 IHTMLTABLE[] 3781 <WADICTIONARY>-TABLENAME 3782 <WADICTIONARY>-TABLETITLE 3783 SORTTABLESASC. 3784 3785 EXPORT IHTMLTABLE TO MEMORY ID <WADICTIONARY>-TABLENAME. 3786 ENDIF. 3787 3788 IF SAVETOSERVER IS INITIAL. 3789 PERFORM SAVEFILETOPC USING IHTMLTABLE[] 3790 TABLEFILENAMEWITHPATH 3791 TABLEFILENAME 3792 SPACE 3793 SPACE 3794 DISPLAYPROGRESSMESSAGE. 3795 ELSE. 3796 PERFORM SAVEFILETOSERVER USING IHTMLTABLE[] 3797 TABLEFILENAMEWITHPATH 3798 TABLEFILENAME 3799 COMPLETESAVEPATH 3800 DISPLAYPROGRESSMESSAGE. 3801 ENDIF. 3802 3803 CLEAR IHTMLTABLE[]. 3804 ENDLOOP. 3805 ENDFORM. "downloadDDStructures 3806 3807 *------------------------------------------------------------------------------------------------------- 3808 * downloadMessageClass... 3809 *------------------------------------------------------------------------------------------------------- 3810 FORM DOWNLOADMESSAGECLASS USING ILOCMESSAGES LIKE IMESSAGES[] 3811 VALUE(MESSAGECLASSNAME) 3812 VALUE(USERFILEPATH) 3813 VALUE(FILEEXTENSION) 3814 VALUE(HTMLFILEFLAG) 3815 SUBDIR 3816 VALUE(SYNTAXHIGHLIGHTCOMMENTS) 3817 VALUE(CUSTOMERNAMERANGE) 3818 VALUE(GETINCLUDES) 3819 VALUE(GETDICTSTRUCTURES) 3820 VALUE(USERHASSELECTEDMESSAGECLASSES) 3821 VALUE(SLASHSEPARATOR) 3822 VALUE(SAVETOSERVER) 3823 VALUE(DISPLAYPROGRESSMESSAGE). 3824 3825 DATA: HTMLPAGENAME TYPE STRING. 3826 DATA: NEWFILENAMEONLY TYPE STRING. 3827 DATA: NEWFILENAMEWITHPATH TYPE STRING. 3828 DATA: IHTMLTABLE TYPE STANDARD TABLE OF STRING WITH HEADER LINE. 3829 DATA: NEWSUBDIRECTORY TYPE STRING. 3830 DATA: COMPLETESAVEPATH TYPE STRING. 3831 3832 PERFORM APPENDMESSAGESTOFILE USING ILOCMESSAGES[] 3833 IHTMLTABLE[] 3834 USERHASSELECTEDMESSAGECLASSES. 3835 3836 3837 CONCATENATE `message class ` MESSAGECLASSNAME INTO HTMLPAGENAME. 3838 3839 IF HTMLFILEFLAG IS INITIAL. 3840 APPEND '' TO IHTMLTABLE. 3841 APPEND '----------------------------------------------------------------------------------' TO IHTMLTABLE. 3842 3843 PERFORM BUILDFOOTERMESSAGE USING 'TEXT' 3844 IHTMLTABLE. 3845 APPEND IHTMLTABLE. 3846 ELSE. 3847 PERFORM CONVERTCODETOHTML USING IHTMLTABLE[] 3848 HTMLPAGENAME 3849 SPACE 3850 IS_MESSAGECLASS 3851 '' 3852 FALSE 3853 SYNTAXHIGHLIGHTCOMMENTS 3854 FILEEXTENSION 3855 CUSTOMERNAMERANGE 3856 GETINCLUDES 3857 GETDICTSTRUCTURES. 3858 ENDIF. 3859 3860 PERFORM BUILDFILENAME USING USERFILEPATH 3861 SUBDIR 3862 MESSAGECLASSNAME 3863 SPACE 3864 SPACE 3865 FILEEXTENSION 3866 IS_MESSAGECLASS 3867 SAVETOSERVER 3868 SLASHSEPARATOR 3869 NEWFILENAMEWITHPATH 3870 NEWFILENAMEONLY 3871 NEWSUBDIRECTORY 3872 COMPLETESAVEPATH. 3873 3874 IF SAVETOSERVER IS INITIAL. 3875 PERFORM SAVEFILETOPC USING IHTMLTABLE[] 3876 NEWFILENAMEWITHPATH 3877 NEWFILENAMEONLY 3878 SPACE 3879 SPACE 3880 DISPLAYPROGRESSMESSAGE. 3881 ELSE. 3882 * Save the file to the SAP server 3883 PERFORM SAVEFILETOSERVER USING IHTMLTABLE[] 3884 NEWFILENAMEWITHPATH 3885 NEWFILENAMEONLY 3886 COMPLETESAVEPATH 3887 DISPLAYPROGRESSMESSAGE. 3888 ENDIF. 3889 ENDFORM. "downloadMessageClass 3890 3891 *------------------------------------------------------------------------------------------------------- 3892 * appendMessagesToFile 3893 *------------------------------------------------------------------------------------------------------- 3894 FORM APPENDMESSAGESTOFILE USING ILOCMESSAGES LIKE IMESSAGES[] 3895 ILOCHTML LIKE DUMIHTML[] 3896 VALUE(USERHASSELECTEDMESSAGECLASSES). 3897 3898 DATA: PREVIOUSMESSAGEID LIKE IMESSAGES-ARBGB. 3899 FIELD-SYMBOLS: <WAMESSAGE> TYPE TMESSAGE. 3900 DATA: WAHTML TYPE STRING. 3901 3902 SORT ILOCMESSAGES ASCENDING BY ARBGB MSGNR. 3903 3904 IF NOT ILOCMESSAGES[] IS INITIAL. 3905 IF USERHASSELECTEDMESSAGECLASSES IS INITIAL. 3906 * Only add these extra lines if we are actually appending them to the end of some program code 3907 APPEND WAHTML TO ILOCHTML. 3908 APPEND WAHTML TO ILOCHTML. 3909 3910 APPEND '*Messages' TO ILOCHTML. 3911 APPEND '*----------------------------------------------------------' TO ILOCHTML. 3912 ENDIF. 3913 3914 LOOP AT ILOCMESSAGES ASSIGNING <WAMESSAGE>. 3915 IF ( <WAMESSAGE>-ARBGB <> PREVIOUSMESSAGEID ). 3916 3917 IF USERHASSELECTEDMESSAGECLASSES IS INITIAL. 3918 * Only add this extra lines if we are actually appending them to the end of some program code 3919 APPEND '*' TO ILOCHTML. 3920 CONCATENATE `* Message class: ` <WAMESSAGE>-ARBGB INTO WAHTML. 3921 APPEND WAHTML TO ILOCHTML. 3922 ENDIF. 3923 3924 PREVIOUSMESSAGEID = <WAMESSAGE>-ARBGB. 3925 CLEAR WAHTML. 3926 ENDIF. 3927 3928 IF USERHASSELECTEDMESSAGECLASSES IS INITIAL. 3929 * Only add this extra lines if we are actually appending them to the end of some program code 3930 CONCATENATE '*' <WAMESSAGE>-MSGNR ` ` <WAMESSAGE>-TEXT INTO WAHTML. 3931 ELSE. 3932 CONCATENATE <WAMESSAGE>-MSGNR ` ` <WAMESSAGE>-TEXT INTO WAHTML. 3933 ENDIF. 3934 3935 APPEND WAHTML TO ILOCHTML. 3936 ENDLOOP. 3937 ENDIF. 3938 ENDFORM. "appendMessagesToFile 3939 3940 *------------------------------------------------------------------------------------------------------- 3941 * downloadFunctions... Download function modules to file. 3942 *------------------------------------------------------------------------------------------------------- 3943 FORM DOWNLOADFUNCTIONS USING ILOCFUNCTIONS LIKE IFUNCTIONS[] 3944 VALUE(USERFILEPATH) 3945 VALUE(FILEEXTENSION) 3946 VALUE(SUBDIR) 3947 VALUE(DOWNLOADDOCUMENTATION) 3948 VALUE(CONVERTTOHTML) 3949 VALUE(SYNTAXHIGHLIGHTCOMMENTS) 3950 VALUE(CUSTOMERNAMERANGE) 3951 VALUE(GETINCLUDES) 3952 VALUE(GETDICTSTRUCT) 3953 VALUE(TEXTFILEEXTENSION) 3954 VALUE(HTMLFILEEXTENSION) 3955 VALUE(SORTTABLESASC) 3956 VALUE(SLASHSEPARATOR) 3957 VALUE(SAVETOSERVER) 3958 VALUE(DISPLAYPROGRESSMESSAGE). 3959 3960 DATA: MAINSUBDIR TYPE STRING. 3961 DATA: INCSUBDIR TYPE STRING. 3962 FIELD-SYMBOLS: <WAFUNCTION> TYPE TFUNCTION. 3963 FIELD-SYMBOLS: <WAINCLUDE> TYPE TINCLUDE. 3964 DATA: IEMPTYTEXTELEMENTS TYPE STANDARD TABLE OF TTEXTTABLE. 3965 DATA: IEMPTYSELECTIONTEXTS TYPE STANDARD TABLE OF TTEXTTABLE. 3966 DATA: IEMPTYMESSAGES TYPE STANDARD TABLE OF TMESSAGE. 3967 DATA: IEMPTYGUITITLES TYPE STANDARD TABLE OF TGUITITLE. 3968 DATA: FUNCTIONDOCUMENTATIONEXISTS TYPE I VALUE FALSE. 3969 3970 LOOP AT ILOCFUNCTIONS ASSIGNING <WAFUNCTION>. 3971 IF SUBDIR IS INITIAL. 3972 INCSUBDIR = <WAFUNCTION>-FUNCTIONNAME. 3973 MAINSUBDIR = ''. 3974 ELSE. 3975 CONCATENATE SUBDIR <WAFUNCTION>-FUNCTIONNAME INTO INCSUBDIR SEPARATED BY SLASHSEPARATOR. 3976 MAINSUBDIR = SUBDIR. 3977 ENDIF. 3978 3979 IF NOT DOWNLOADDOCUMENTATION IS INITIAL. 3980 PERFORM DOWNLOADFUNCTIONDOCS USING <WAFUNCTION>-FUNCTIONNAME 3981 <WAFUNCTION>-FUNCTIONTITLE 3982 USERFILEPATH 3983 FILEEXTENSION 3984 CONVERTTOHTML 3985 SLASHSEPARATOR 3986 SAVETOSERVER 3987 DISPLAYPROGRESSMESSAGE 3988 MAINSUBDIR 3989 FUNCTIONDOCUMENTATIONEXISTS. 3990 ENDIF. 3991 3992 * Download main source code 3993 PERFORM READFUNCTIONANDDOWNLOAD USING <WAFUNCTION>-ITEXTELEMENTS[] 3994 <WAFUNCTION>-ISELECTIONTEXTS[] 3995 <WAFUNCTION>-IMESSAGES[] 3996 <WAFUNCTION>-FUNCTIONNAME 3997 <WAFUNCTION>-FUNCTIONMAININCLUDE 3998 <WAFUNCTION>-FUNCTIONTITLE 3999 USERFILEPATH 4000 FILEEXTENSION 4001 MAINSUBDIR 4002 CONVERTTOHTML 4003 FUNCTIONDOCUMENTATIONEXISTS 4004 SYNTAXHIGHLIGHTCOMMENTS 4005 CUSTOMERNAMERANGE 4006 GETINCLUDES 4007 GETDICTSTRUCT 4008 SLASHSEPARATOR 4009 SAVETOSERVER 4010 DISPLAYPROGRESSMESSAGE. 4011 4012 * Download top include 4013 PERFORM READINCLUDEANDDOWNLOAD USING IEMPTYTEXTELEMENTS[] 4014 IEMPTYSELECTIONTEXTS[] 4015 IEMPTYMESSAGES[] 4016 IEMPTYGUITITLES[] 4017 <WAFUNCTION>-TOPINCLUDENAME 4018 <WAFUNCTION>-FUNCTIONNAME 4019 <WAFUNCTION>-FUNCTIONTITLE 4020 IS_FUNCTION 4021 USERFILEPATH 4022 FILEEXTENSION 4023 MAINSUBDIR 4024 CONVERTTOHTML 4025 SYNTAXHIGHLIGHTCOMMENTS 4026 CUSTOMERNAMERANGE 4027 GETINCLUDES 4028 GETDICTSTRUCT 4029 SLASHSEPARATOR 4030 SAVETOSERVER 4031 DISPLAYPROGRESSMESSAGE. 4032 4033 * Download screens. 4034 IF NOT <WAFUNCTION>-ISCREENFLOW[] IS INITIAL. 4035 PERFORM DOWNLOADSCREENS USING <WAFUNCTION>-ISCREENFLOW[] 4036 <WAFUNCTION>-PROGNAME 4037 USERFILEPATH 4038 TEXTFILEEXTENSION 4039 MAINSUBDIR 4040 SLASHSEPARATOR 4041 SAVETOSERVER 4042 DISPLAYPROGRESSMESSAGE. 4043 ENDIF. 4044 4045 * Download GUI titles 4046 IF NOT <WAFUNCTION>-IGUITITLE[] IS INITIAL. 4047 PERFORM DOWNLOADGUITITLES USING <WAFUNCTION>-IGUITITLE 4048 USERFILEPATH 4049 TEXTFILEEXTENSION 4050 MAINSUBDIR 4051 SLASHSEPARATOR 4052 SAVETOSERVER 4053 DISPLAYPROGRESSMESSAGE. 4054 ENDIF. 4055 4056 * Download all other includes 4057 LOOP AT <WAFUNCTION>-IINCLUDES ASSIGNING <WAINCLUDE>. 4058 PERFORM READINCLUDEANDDOWNLOAD USING IEMPTYTEXTELEMENTS[] 4059 IEMPTYSELECTIONTEXTS[] 4060 IEMPTYMESSAGES[] 4061 IEMPTYGUITITLES[] 4062 <WAINCLUDE>-INCLUDENAME 4063 SPACE 4064 <WAINCLUDE>-INCLUDETITLE 4065 IS_PROGRAM 4066 USERFILEPATH 4067 FILEEXTENSION 4068 INCSUBDIR 4069 CONVERTTOHTML 4070 SYNTAXHIGHLIGHTCOMMENTS 4071 CUSTOMERNAMERANGE 4072 GETINCLUDES 4073 GETDICTSTRUCT 4074 SLASHSEPARATOR 4075 SAVETOSERVER 4076 DISPLAYPROGRESSMESSAGE. 4077 4078 ENDLOOP. 4079 4080 * Download all dictionary structures 4081 IF NOT <WAFUNCTION>-IDICTSTRUCT[] IS INITIAL. 4082 PERFORM DOWNLOADDDSTRUCTURES USING <WAFUNCTION>-IDICTSTRUCT[] 4083 USERFILEPATH 4084 HTMLFILEEXTENSION 4085 INCSUBDIR 4086 SORTTABLESASC 4087 SLASHSEPARATOR 4088 SAVETOSERVER 4089 DISPLAYPROGRESSMESSAGE. 4090 ENDIF. 4091 ENDLOOP. 4092 ENDFORM. "downloadFunctions 4093 4094 *------------------------------------------------------------------------------------------------------- 4095 * readIcludeAndDownload... 4096 *------------------------------------------------------------------------------------------------------- 4097 FORM READINCLUDEANDDOWNLOAD USING ILOCTEXTELEMENTS LIKE DUMITEXTTAB[] 4098 ILOCSELECTIONTEXTS LIKE DUMITEXTTAB[] 4099 ILOCMESSAGES LIKE IMESSAGES[] 4100 ILOCGUITITLES LIKE DUMIGUITITLE[] 4101 VALUE(PROGRAMNAME) 4102 VALUE(FUNCTIONNAME) 4103 VALUE(SHORTTEXT) 4104 VALUE(OVERIDEPROGTYPE) 4105 VALUE(USERFILEPATH) 4106 VALUE(FILEEXTENSION) 4107 VALUE(ADDITIONALSUBDIR) 4108 VALUE(CONVERTTOHTML) 4109 VALUE(SYNTAXHIGHLIGHTCOMMENTS) 4110 VALUE(CUSTOMERNAMERANGE) 4111 VALUE(GETINCLUDES) 4112 VALUE(GETDICTSTRUCTURES) 4113 VALUE(SLASHSEPARATOR) 4114 VALUE(SAVETOSERVER) 4115 VALUE(DISPLAYPROGRESSMESSAGE). 4116 4117 DATA: ILINES TYPE STANDARD TABLE OF STRING WITH HEADER LINE. 4118 DATA: LOCALFILENAMEWITHPATH TYPE STRING. 4119 DATA: LOCALFILENAMEONLY TYPE STRING. 4120 DATA: NEWSUBDIRECTORY TYPE STRING. 4121 DATA: OBJECTNAME TYPE STRING. 4122 DATA: COMPLETESAVEPATH TYPE STRING. 4123 4124 READ REPORT PROGRAMNAME INTO ILINES. 4125 4126 * Download GUI titles for main program 4127 IF NOT ILOCGUITITLES[] IS INITIAL. 4128 PERFORM APPENDGUITITLES USING ILOCGUITITLES[] 4129 ILINES[]. 4130 ENDIF. 4131 4132 * Download text elements for main program 4133 IF NOT ILOCTEXTELEMENTS[] IS INITIAL. 4134 PERFORM APPENDTEXTELEMENTS USING ILOCTEXTELEMENTS[] 4135 ILINES[]. 4136 ENDIF. 4137 4138 * Download selection texts for main program 4139 IF NOT ILOCSELECTIONTEXTS[] IS INITIAL. 4140 PERFORM APPENDSELECTIONTEXTS USING ILOCSELECTIONTEXTS[] 4141 ILINES[]. 4142 ENDIF. 4143 4144 * Download messages classes for main program. 4145 IF NOT ILOCMESSAGES[] IS INITIAL. 4146 PERFORM APPENDMESSAGESTOFILE USING ILOCMESSAGES[] 4147 ILINES[] 4148 SPACE. 4149 ENDIF. 4150 4151 IF CONVERTTOHTML IS INITIAL. 4152 APPEND '' TO ILINES. 4153 APPEND '----------------------------------------------------------------------------------' TO ILINES. 4154 PERFORM BUILDFOOTERMESSAGE USING 'TEXT' 4155 ILINES. 4156 APPEND ILINES. 4157 ELSE. 4158 PERFORM CONVERTCODETOHTML USING ILINES[] 4159 PROGRAMNAME 4160 SHORTTEXT 4161 OVERIDEPROGTYPE 4162 SPACE 4163 SPACE 4164 SYNTAXHIGHLIGHTCOMMENTS 4165 FILEEXTENSION 4166 CUSTOMERNAMERANGE 4167 GETINCLUDES 4168 GETDICTSTRUCTURES. 4169 ENDIF. 4170 4171 IF FUNCTIONNAME IS INITIAL. 4172 OBJECTNAME = PROGRAMNAME. 4173 ELSE. 4174 OBJECTNAME = FUNCTIONNAME. 4175 ENDIF. 4176 4177 PERFORM BUILDFILENAME USING USERFILEPATH 4178 ADDITIONALSUBDIR 4179 OBJECTNAME 4180 SPACE 4181 PROGRAMNAME 4182 FILEEXTENSION 4183 OVERIDEPROGTYPE 4184 SAVETOSERVER 4185 SLASHSEPARATOR 4186 LOCALFILENAMEWITHPATH 4187 LOCALFILENAMEONLY 4188 NEWSUBDIRECTORY 4189 COMPLETESAVEPATH. 4190 4191 IF SAVETOSERVER IS INITIAL. 4192 PERFORM SAVEFILETOPC USING ILINES[] 4193 LOCALFILENAMEWITHPATH 4194 LOCALFILENAMEONLY 4195 SPACE 4196 SPACE 4197 DISPLAYPROGRESSMESSAGE. 4198 ELSE. 4199 PERFORM SAVEFILETOSERVER USING ILINES[] 4200 LOCALFILENAMEWITHPATH 4201 LOCALFILENAMEONLY 4202 COMPLETESAVEPATH 4203 DISPLAYPROGRESSMESSAGE. 4204 ENDIF. 4205 ENDFORM. "readIncludeAndDownload 4206 4207 *------------------------------------------------------------------------------------------------------- 4208 * readClassAndDownload... 4209 *------------------------------------------------------------------------------------------------------- 4210 FORM READCLASSANDDOWNLOAD USING WALOCCLASS TYPE TCLASS 4211 VALUE(CLASSNAME) 4212 VALUE(FUNCTIONNAME) 4213 VALUE(OVERIDEPROGTYPE) 4214 VALUE(USERFILEPATH) 4215 VALUE(FILEEXTENSION) 4216 VALUE(ADDITIONALSUBDIR) 4217 VALUE(CONVERTTOHTML) 4218 VALUE(SYNTAXHIGHLIGHTCOMMENTS) 4219 VALUE(CUSTOMERNAMERANGE) 4220 VALUE(GETINCLUDES) 4221 VALUE(GETDICTSTRUCTURES) 4222 VALUE(SLASHSEPARATOR) 4223 VALUE(SAVETOSERVER) 4224 VALUE(DISPLAYPROGRESSMESSAGE). 4225 4226 DATA: ITEMPLINES TYPE STANDARD TABLE OF STRING WITH HEADER LINE. 4227 DATA: ILINES TYPE STANDARD TABLE OF STRING WITH HEADER LINE. 4228 DATA: LOCALFILENAMEWITHPATH TYPE STRING. 4229 DATA: LOCALFILENAMEONLY TYPE STRING. 4230 DATA: NEWSUBDIRECTORY TYPE STRING. 4231 DATA: OBJECTNAME TYPE STRING. 4232 DATA: CASTCLASSNAME TYPE PROGRAM. 4233 DATA: COMPLETESAVEPATH TYPE STRING. 4234 4235 * Build up attribute comments 4236 APPEND '**************************************************************************' TO ILINES. 4237 APPEND '* Class attributes. *' TO ILINES. 4238 APPEND '**************************************************************************' TO ILINES. 4239 CASE WALOCCLASS-EXPOSURE. 4240 WHEN 0. 4241 APPEND `Instantiation: Private` TO ILINES. 4242 WHEN 1. 4243 APPEND `Instantiation: Protected` TO ILINES. 4244 WHEN 2. 4245 APPEND `Instantiation: Public` TO ILINES. 4246 ENDCASE. 4247 CONCATENATE `Message class: ` WALOCCLASS-MSG_ID INTO ILINES. 4248 APPEND ILINES. 4249 CASE WALOCCLASS-STATE. 4250 WHEN 0. 4251 APPEND `State: Only Modelled` TO ILINES. 4252 WHEN 1. 4253 APPEND `State: Implemented` TO ILINES. 4254 ENDCASE. 4255 CONCATENATE `Final Indicator: ` WALOCCLASS-CLSFINAL INTO ILINES. 4256 APPEND ILINES. 4257 CONCATENATE `R/3 Release: ` WALOCCLASS-R3RELEASE INTO ILINES. 4258 APPEND ILINES. 4259 CLEAR ILINES. 4260 APPEND ILINES. 4261 4262 CASTCLASSNAME = WALOCCLASS-PUBLICCLASSKEY. 4263 READ REPORT CASTCLASSNAME INTO ITEMPLINES. 4264 IF SY-SUBRC = 0. 4265 PERFORM REFORMATCLASSCODE USING ITEMPLINES[]. 4266 4267 APPEND '**************************************************************************' TO ILINES. 4268 APPEND '* Public section of class. *' TO ILINES. 4269 APPEND '**************************************************************************' TO ILINES. 4270 LOOP AT ITEMPLINES. 4271 APPEND ITEMPLINES TO ILINES. 4272 ENDLOOP. 4273 ENDIF. 4274 4275 CASTCLASSNAME = WALOCCLASS-PRIVATECLASSKEY. 4276 READ REPORT CASTCLASSNAME INTO ITEMPLINES. 4277 IF SY-SUBRC = 0. 4278 PERFORM REFORMATCLASSCODE USING ITEMPLINES[]. 4279 4280 APPEND ILINES. 4281 APPEND '**************************************************************************' TO ILINES. 4282 APPEND '* Private section of class. *' TO ILINES. 4283 APPEND '**************************************************************************' TO ILINES. 4284 LOOP AT ITEMPLINES. 4285 APPEND ITEMPLINES TO ILINES. 4286 ENDLOOP. 4287 ENDIF. 4288 4289 CASTCLASSNAME = WALOCCLASS-PROTECTEDCLASSKEY. 4290 READ REPORT CASTCLASSNAME INTO ITEMPLINES. 4291 IF SY-SUBRC = 0. 4292 PERFORM REFORMATCLASSCODE USING ITEMPLINES[]. 4293 4294 APPEND ILINES. 4295 APPEND '**************************************************************************' TO ILINES. 4296 APPEND '* Protected section of class. *' TO ILINES. 4297 APPEND '**************************************************************************' TO ILINES. 4298 LOOP AT ITEMPLINES. 4299 APPEND ITEMPLINES TO ILINES. 4300 ENDLOOP. 4301 ENDIF. 4302 4303 CASTCLASSNAME = WALOCCLASS-TYPESCLASSKEY. 4304 READ REPORT CASTCLASSNAME INTO ITEMPLINES. 4305 IF SY-SUBRC = 0. 4306 APPEND ILINES. 4307 APPEND '**************************************************************************' TO ILINES. 4308 APPEND '* Types section of class. *' TO ILINES. 4309 APPEND '**************************************************************************' TO ILINES. 4310 LOOP AT ITEMPLINES. 4311 APPEND ITEMPLINES TO ILINES. 4312 ENDLOOP. 4313 ENDIF. 4314 4315 * Download text elements for this class 4316 IF NOT WALOCCLASS-ITEXTELEMENTS[] IS INITIAL. 4317 PERFORM APPENDTEXTELEMENTS USING WALOCCLASS-ITEXTELEMENTS[] 4318 ILINES[]. 4319 ENDIF. 4320 4321 * Download messages classes for this class. 4322 IF NOT WALOCCLASS-IMESSAGES[] IS INITIAL. 4323 PERFORM APPENDMESSAGESTOFILE USING WALOCCLASS-IMESSAGES[] 4324 ILINES[] 4325 SPACE. 4326 ENDIF. 4327 4328 * Download exception texts for this class 4329 IF NOT WALOCCLASS-ICONCEPTS[] IS INITIAL. 4330 PERFORM APPENDEXCEPTIONTEXTS USING WALOCCLASS-ICONCEPTS[] 4331 ILINES[]. 4332 ENDIF. 4333 4334 4335 IF CONVERTTOHTML IS INITIAL. 4336 APPEND '' TO ILINES. 4337 APPEND '----------------------------------------------------------------------------------' TO ILINES. 4338 PERFORM BUILDFOOTERMESSAGE USING 'TEXT' 4339 ILINES. 4340 APPEND ILINES. 4341 ELSE. 4342 PERFORM CONVERTCLASSTOHTML USING ILINES[] 4343 CLASSNAME 4344 WALOCCLASS-DESCRIPT 4345 OVERIDEPROGTYPE 4346 SYNTAXHIGHLIGHTCOMMENTS 4347 FILEEXTENSION 4348 CUSTOMERNAMERANGE 4349 GETDICTSTRUCTURES. 4350 ENDIF. 4351 4352 IF FUNCTIONNAME IS INITIAL. 4353 OBJECTNAME = CLASSNAME. 4354 ELSE. 4355 OBJECTNAME = FUNCTIONNAME. 4356 ENDIF. 4357 4358 PERFORM BUILDFILENAME USING USERFILEPATH 4359 ADDITIONALSUBDIR 4360 OBJECTNAME 4361 SPACE 4362 CLASSNAME 4363 FILEEXTENSION 4364 OVERIDEPROGTYPE 4365 SAVETOSERVER 4366 SLASHSEPARATOR 4367 LOCALFILENAMEWITHPATH 4368 LOCALFILENAMEONLY 4369 NEWSUBDIRECTORY 4370 COMPLETESAVEPATH. 4371 4372 IF SAVETOSERVER IS INITIAL. 4373 PERFORM SAVEFILETOPC USING ILINES[] 4374 LOCALFILENAMEWITHPATH 4375 LOCALFILENAMEONLY 4376 SPACE 4377 SPACE 4378 DISPLAYPROGRESSMESSAGE. 4379 ELSE. 4380 PERFORM SAVEFILETOSERVER USING ILINES[] 4381 LOCALFILENAMEWITHPATH 4382 LOCALFILENAMEONLY 4383 COMPLETESAVEPATH 4384 DISPLAYPROGRESSMESSAGE. 4385 ENDIF. 4386 ENDFORM. "readClassAndDownload 4387 4388 *------------------------------------------------------------------------------------------------------- 4389 * readMethodAndDownload... 4390 *------------------------------------------------------------------------------------------------------- 4391 FORM READMETHODANDDOWNLOAD USING WALOCMETHOD TYPE TMETHOD 4392 VALUE(METHODNAME) 4393 VALUE(METHODKEY) 4394 VALUE(FUNCTIONNAME) 4395 VALUE(OVERIDEPROGTYPE) 4396 VALUE(USERFILEPATH) 4397 VALUE(FILEEXTENSION) 4398 VALUE(ADDITIONALSUBDIR) 4399 VALUE(CONVERTTOHTML) 4400 VALUE(SYNTAXHIGHLIGHTCOMMENTS) 4401 VALUE(CUSTOMERNAMERANGE) 4402 VALUE(GETINCLUDES) 4403 VALUE(GETDICTSTRUCTURES) 4404 VALUE(SLASHSEPARATOR) 4405 VALUE(SAVETOSERVER) 4406 VALUE(DISPLAYPROGRESSMESSAGE). 4407 4408 DATA: ILINES TYPE STANDARD TABLE OF STRING WITH HEADER LINE. 4409 DATA: ITEMPLINES TYPE STANDARD TABLE OF STRING WITH HEADER LINE. 4410 DATA: LOCALFILENAMEWITHPATH TYPE STRING. 4411 DATA: LOCALFILENAMEONLY TYPE STRING. 4412 DATA: NEWSUBDIRECTORY TYPE STRING. 4413 DATA: OBJECTNAME TYPE STRING. 4414 DATA: CASTMETHODKEY TYPE PROGRAM. 4415 DATA: COMPLETESAVEPATH TYPE STRING. 4416 4417 * Add the method scope to the downloaded file 4418 APPEND '**************************************************************************' TO ILINES. 4419 APPEND '* Method attributes. *' TO ILINES. 4420 APPEND '**************************************************************************' TO ILINES. 4421 CASE WALOCMETHOD-EXPOSURE. 4422 WHEN 0. 4423 APPEND `Instantiation: Private` TO ILINES. 4424 WHEN 1. 4425 APPEND `Instantiation: Protected` TO ILINES. 4426 WHEN 2. 4427 APPEND `Instantiation: Public` TO ILINES. 4428 ENDCASE. 4429 APPEND '**************************************************************************' TO ILINES. 4430 APPEND '' TO ILINES. 4431 4432 CASTMETHODKEY = WALOCMETHOD-METHODKEY. 4433 READ REPORT CASTMETHODKEY INTO ITEMPLINES. 4434 LOOP AT ITEMPLINES. 4435 APPEND ITEMPLINES TO ILINES. 4436 ENDLOOP. 4437 4438 IF CONVERTTOHTML IS INITIAL. 4439 APPEND '' TO ILINES. 4440 APPEND '----------------------------------------------------------------------------------' TO ILINES. 4441 PERFORM BUILDFOOTERMESSAGE USING 'TEXT' 4442 ILINES. 4443 APPEND ILINES. 4444 ELSE. 4445 PERFORM CONVERTCODETOHTML USING ILINES[] 4446 METHODNAME 4447 WALOCMETHOD-DESCRIPT 4448 OVERIDEPROGTYPE 4449 SPACE 4450 SPACE 4451 SYNTAXHIGHLIGHTCOMMENTS 4452 FILEEXTENSION 4453 CUSTOMERNAMERANGE 4454 GETINCLUDES 4455 4456 GETDICTSTRUCTURES. 4457 ENDIF. 4458 4459 IF FUNCTIONNAME IS INITIAL. 4460 OBJECTNAME = METHODNAME. 4461 ELSE. 4462 OBJECTNAME = FUNCTIONNAME. 4463 ENDIF. 4464 4465 PERFORM BUILDFILENAME USING USERFILEPATH 4466 ADDITIONALSUBDIR 4467 OBJECTNAME 4468 SPACE 4469 METHODNAME 4470 FILEEXTENSION 4471 OVERIDEPROGTYPE 4472 SAVETOSERVER 4473 SLASHSEPARATOR 4474 LOCALFILENAMEWITHPATH 4475 LOCALFILENAMEONLY 4476 NEWSUBDIRECTORY 4477 COMPLETESAVEPATH. 4478 4479 IF SAVETOSERVER IS INITIAL. 4480 PERFORM SAVEFILETOPC USING ILINES[] 4481 LOCALFILENAMEWITHPATH 4482 LOCALFILENAMEONLY 4483 SPACE 4484 SPACE 4485 DISPLAYPROGRESSMESSAGE. 4486 ELSE. 4487 PERFORM SAVEFILETOSERVER USING ILINES[] 4488 LOCALFILENAMEWITHPATH 4489 LOCALFILENAMEONLY 4490 COMPLETESAVEPATH 4491 DISPLAYPROGRESSMESSAGE. 4492 ENDIF. 4493 ENDFORM. "readMethodAndDownload 4494 4495 *------------------------------------------------------------------------------------------------------- 4496 * readFunctionAndDownload... 4497 *------------------------------------------------------------------------------------------------------- 4498 FORM READFUNCTIONANDDOWNLOAD USING ILOCTEXTELEMENTS LIKE DUMITEXTTAB[] 4499 ILOCSELECTIONTEXTS LIKE DUMITEXTTAB[] 4500 ILOCMESSAGES LIKE IMESSAGES[] 4501 VALUE(FUNCTIONNAME) 4502 VALUE(FUNCTIONINTERNALNAME) 4503 VALUE(SHORTTEXT) 4504 VALUE(USERFILEPATH) 4505 VALUE(FILEEXTENSION) 4506 VALUE(SUBDIR) 4507 VALUE(CONVERTTOHTML) 4508 VALUE(FUNCTIONDOCUMENTATIONEXISTS) 4509 VALUE(SYNTAXHIGHLIGHTCOMMENTS) 4510 VALUE(CUSTOMERNAMERANGE) 4511 VALUE(GETINCLUDES) 4512 VALUE(GETDICTSTRUCTURES) 4513 VALUE(SLASHSEPARATOR) 4514 VALUE(SAVETOSERVER) 4515 VALUE(DISPLAYPROGRESSMESSAGE). 4516 4517 DATA: ILINES TYPE STANDARD TABLE OF STRING WITH HEADER LINE. 4518 DATA: LOCALFILENAMEWITHPATH TYPE STRING. 4519 DATA: LOCALFILENAMEONLY TYPE STRING. 4520 DATA: NEWSUBDIRECTORY TYPE STRING. 4521 DATA: COMPLETESAVEPATH TYPE STRING. 4522 4523 READ REPORT FUNCTIONINTERNALNAME INTO ILINES. 4524 4525 * If we found any text elements for this function then we ought to append them to the main include. 4526 IF NOT ILOCTEXTELEMENTS[] IS INITIAL. 4527 PERFORM APPENDTEXTELEMENTS USING ILOCTEXTELEMENTS[] 4528 ILINES[]. 4529 ENDIF. 4530 4531 * If we found any message classes for this function then we ought to append them to the main include. 4532 IF NOT ILOCMESSAGES[] IS INITIAL. 4533 PERFORM APPENDMESSAGESTOFILE USING ILOCMESSAGES[] 4534 ILINES[] 4535 SPACE. 4536 ENDIF. 4537 4538 IF CONVERTTOHTML IS INITIAL. 4539 APPEND '' TO ILINES. 4540 APPEND '----------------------------------------------------------------------------------' TO ILINES. 4541 PERFORM BUILDFOOTERMESSAGE USING 'TEXT' 4542 ILINES. 4543 APPEND ILINES. 4544 ELSE. 4545 PERFORM CONVERTFUNCTIONTOHTML USING ILINES[] 4546 FUNCTIONNAME 4547 SHORTTEXT 4548 IS_FUNCTION 4549 FUNCTIONDOCUMENTATIONEXISTS 4550 TRUE 4551 SYNTAXHIGHLIGHTCOMMENTS 4552 FILEEXTENSION 4553 CUSTOMERNAMERANGE 4554 GETINCLUDES 4555 GETDICTSTRUCTURES. 4556 ENDIF. 4557 4558 PERFORM BUILDFILENAME USING USERFILEPATH 4559 SUBDIR 4560 FUNCTIONNAME 4561 SPACE 4562 SPACE 4563 FILEEXTENSION 4564 IS_FUNCTION 4565 SAVETOSERVER 4566 SLASHSEPARATOR 4567 LOCALFILENAMEWITHPATH 4568 LOCALFILENAMEONLY 4569 NEWSUBDIRECTORY 4570 COMPLETESAVEPATH. 4571 4572 IF SAVETOSERVER IS INITIAL. 4573 PERFORM SAVEFILETOPC USING ILINES[] 4574 LOCALFILENAMEWITHPATH 4575 LOCALFILENAMEONLY 4576 SPACE 4577 SPACE 4578 DISPLAYPROGRESSMESSAGE. 4579 ELSE. 4580 PERFORM SAVEFILETOSERVER USING ILINES[] 4581 LOCALFILENAMEWITHPATH 4582 LOCALFILENAMEONLY 4583 COMPLETESAVEPATH 4584 DISPLAYPROGRESSMESSAGE. 4585 ENDIF. 4586 ENDFORM. "readFunctionAndDownload 4587 4588 *------------------------------------------------------------------------------------------------------- 4589 * buildFilename... 4590 *------------------------------------------------------------------------------------------------------- 4591 FORM BUILDFILENAME USING VALUE(USERPATH) 4592 VALUE(ADDITIONALSUBDIRECTORY) 4593 VALUE(OBJECTNAME) 4594 VALUE(MAINFUNCTIONNO) 4595 VALUE(INCLUDENAME) 4596 VALUE(FILEEXTENSION) 4597 VALUE(DOWNLOADTYPE) 4598 VALUE(DOWNLOADTOSERVER) 4599 VALUE(SLASHSEPARATOR) 4600 NEWFILENAMEWITHPATH 4601 NEWFILENAMEONLY 4602 NEWSUBDIRECTORY 4603 COMPLETEPATH. 4604 4605 * If we are running on a non UNIX environment we will need to remove forward slashes from the additional path. 4606 IF DOWNLOADTOSERVER IS INITIAL. 4607 IF FRONTENDOPSYSTEM = NON_UNIX. 4608 IF NOT ADDITIONALSUBDIRECTORY IS INITIAL. 4609 TRANSLATE ADDITIONALSUBDIRECTORY USING '/_'. 4610 IF ADDITIONALSUBDIRECTORY+0(1) = '_'. 4611 SHIFT ADDITIONALSUBDIRECTORY LEFT BY 1 PLACES. 4612 ENDIF. 4613 ENDIF. 4614 ENDIF. 4615 ELSE. 4616 IF SERVEROPSYSTEM = NON_UNIX. 4617 IF NOT ADDITIONALSUBDIRECTORY IS INITIAL. 4618 TRANSLATE ADDITIONALSUBDIRECTORY USING '/_'. 4619 IF ADDITIONALSUBDIRECTORY+0(1) = '_'. 4620 SHIFT ADDITIONALSUBDIRECTORY LEFT BY 1 PLACES. 4621 ENDIF. 4622 ENDIF. 4623 ENDIF. 4624 ENDIF. 4625 4626 CASE DOWNLOADTYPE. 4627 * Programs 4628 WHEN IS_PROGRAM. 4629 IF ADDITIONALSUBDIRECTORY IS INITIAL. 4630 CONCATENATE USERPATH SLASHSEPARATOR OBJECTNAME PERIOD FILEEXTENSION INTO NEWFILENAMEWITHPATH. 4631 CONCATENATE USERPATH SLASHSEPARATOR INTO COMPLETEPATH. 4632 ELSE. 4633 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY 4634 SLASHSEPARATOR OBJECTNAME PERIOD FILEEXTENSION INTO NEWFILENAMEWITHPATH. 4635 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY INTO COMPLETEPATH. 4636 ENDIF. 4637 4638 * Function Modules 4639 WHEN IS_FUNCTION. 4640 IF ADDITIONALSUBDIRECTORY IS INITIAL. 4641 FIND 'top' IN INCLUDENAME IGNORING CASE. 4642 IF SY-SUBRC = 0. 4643 CONCATENATE USERPATH SLASHSEPARATOR OBJECTNAME 4644 SLASHSEPARATOR 'Global-' OBJECTNAME 4645 PERIOD FILEEXTENSION 4646 INTO NEWFILENAMEWITHPATH. 4647 ELSE. 4648 IF INCLUDENAME CS MAINFUNCTIONNO AND NOT MAINFUNCTIONNO IS INITIAL. 4649 CONCATENATE USERPATH SLASHSEPARATOR OBJECTNAME 4650 SLASHSEPARATOR OBJECTNAME 4651 PERIOD FILEEXTENSION 4652 INTO NEWFILENAMEWITHPATH. 4653 ELSE. 4654 CONCATENATE USERPATH SLASHSEPARATOR OBJECTNAME 4655 SLASHSEPARATOR OBJECTNAME 4656 PERIOD FILEEXTENSION 4657 INTO NEWFILENAMEWITHPATH. 4658 ENDIF. 4659 ENDIF. 4660 NEWSUBDIRECTORY = OBJECTNAME. 4661 CONCATENATE USERPATH SLASHSEPARATOR INTO COMPLETEPATH. 4662 ELSE. 4663 FIND 'top' IN INCLUDENAME IGNORING CASE. 4664 IF SY-SUBRC = 0. 4665 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY 4666 SLASHSEPARATOR OBJECTNAME 4667 SLASHSEPARATOR 'Global-' OBJECTNAME 4668 PERIOD FILEEXTENSION 4669 INTO NEWFILENAMEWITHPATH. 4670 ELSE. 4671 IF INCLUDENAME CS MAINFUNCTIONNO AND NOT MAINFUNCTIONNO IS INITIAL. 4672 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY 4673 SLASHSEPARATOR OBJECTNAME 4674 SLASHSEPARATOR OBJECTNAME 4675 PERIOD FILEEXTENSION 4676 INTO NEWFILENAMEWITHPATH. 4677 ELSE. 4678 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY 4679 SLASHSEPARATOR OBJECTNAME 4680 SLASHSEPARATOR OBJECTNAME 4681 PERIOD FILEEXTENSION 4682 INTO NEWFILENAMEWITHPATH. 4683 ENDIF. 4684 ENDIF. 4685 CONCATENATE ADDITIONALSUBDIRECTORY SLASHSEPARATOR OBJECTNAME INTO NEWSUBDIRECTORY. 4686 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY SLASHSEPARATOR OBJECTNAME INTO COMPLETEPATH. 4687 ENDIF. 4688 4689 * Table definition 4690 WHEN IS_TABLE. 4691 IF ADDITIONALSUBDIRECTORY IS INITIAL. 4692 CONCATENATE USERPATH SLASHSEPARATOR OBJECTNAME 4693 SLASHSEPARATOR 'Dictionary-' 4694 OBJECTNAME PERIOD FILEEXTENSION 4695 INTO NEWFILENAMEWITHPATH. 4696 4697 CONCATENATE USERPATH SLASHSEPARATOR OBJECTNAME INTO NEWSUBDIRECTORY. 4698 CONCATENATE USERPATH SLASHSEPARATOR OBJECTNAME INTO COMPLETEPATH. 4699 ELSE. 4700 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY 4701 SLASHSEPARATOR OBJECTNAME 4702 SLASHSEPARATOR 'Dictionary-' 4703 OBJECTNAME PERIOD FILEEXTENSION 4704 INTO NEWFILENAMEWITHPATH. 4705 4706 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY SLASHSEPARATOR OBJECTNAME INTO NEWSUBDIRECTORY. 4707 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY SLASHSEPARATOR OBJECTNAME INTO COMPLETEPATH. 4708 ENDIF. 4709 4710 * Program & Function documentation 4711 WHEN IS_DOCUMENTATION. 4712 IF ADDITIONALSUBDIRECTORY IS INITIAL. 4713 CONCATENATE USERPATH SLASHSEPARATOR OBJECTNAME 4714 SLASHSEPARATOR 'Docs-' 4715 OBJECTNAME PERIOD 4716 FILEEXTENSION 4717 INTO NEWFILENAMEWITHPATH. 4718 4719 CONCATENATE USERPATH SLASHSEPARATOR OBJECTNAME INTO NEWSUBDIRECTORY. 4720 CONCATENATE USERPATH SLASHSEPARATOR OBJECTNAME INTO COMPLETEPATH. 4721 ELSE. 4722 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY 4723 SLASHSEPARATOR OBJECTNAME 4724 SLASHSEPARATOR 'Docs-' 4725 OBJECTNAME PERIOD FILEEXTENSION 4726 INTO NEWFILENAMEWITHPATH. 4727 4728 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY SLASHSEPARATOR OBJECTNAME INTO NEWSUBDIRECTORY. 4729 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY SLASHSEPARATOR OBJECTNAME INTO COMPLETEPATH. 4730 ENDIF. 4731 4732 * Screens 4733 WHEN IS_SCREEN. 4734 IF ADDITIONALSUBDIRECTORY IS INITIAL. 4735 CONCATENATE USERPATH SLASHSEPARATOR 'Screens' 4736 SLASHSEPARATOR 'screen_' 4737 OBJECTNAME PERIOD 4738 FILEEXTENSION INTO NEWFILENAMEWITHPATH. 4739 4740 CONCATENATE USERPATH SLASHSEPARATOR 'screens' INTO NEWSUBDIRECTORY. 4741 CONCATENATE USERPATH SLASHSEPARATOR 'screens' INTO COMPLETEPATH. 4742 4743 ELSE. 4744 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY 4745 SLASHSEPARATOR 'Screens' 4746 SLASHSEPARATOR 'screen_' 4747 OBJECTNAME PERIOD 4748 FILEEXTENSION INTO NEWFILENAMEWITHPATH. 4749 4750 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY SLASHSEPARATOR 'screens' INTO NEWSUBDIRECTORY. 4751 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY SLASHSEPARATOR 'screens' INTO COMPLETEPATH. 4752 ENDIF. 4753 4754 * GUI title 4755 WHEN IS_GUITITLE. 4756 IF ADDITIONALSUBDIRECTORY IS INITIAL. 4757 CONCATENATE USERPATH SLASHSEPARATOR 'Screens' 4758 SLASHSEPARATOR 'gui_title_' 4759 OBJECTNAME PERIOD 4760 FILEEXTENSION INTO NEWFILENAMEWITHPATH. 4761 4762 CONCATENATE USERPATH SLASHSEPARATOR 'screens' INTO NEWSUBDIRECTORY. 4763 CONCATENATE USERPATH SLASHSEPARATOR 'screens' INTO COMPLETEPATH. 4764 ELSE. 4765 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY 4766 SLASHSEPARATOR 'Screens' 4767 SLASHSEPARATOR 'gui_title_' 4768 OBJECTNAME PERIOD 4769 FILEEXTENSION INTO NEWFILENAMEWITHPATH. 4770 4771 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY SLASHSEPARATOR 'Screens' INTO NEWSUBDIRECTORY. 4772 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY SLASHSEPARATOR 'Screens' INTO COMPLETEPATH. 4773 ENDIF. 4774 4775 * Message Class 4776 WHEN IS_MESSAGECLASS. 4777 IF ADDITIONALSUBDIRECTORY IS INITIAL. 4778 CONCATENATE USERPATH SLASHSEPARATOR OBJECTNAME 4779 SLASHSEPARATOR 'Message class-' 4780 OBJECTNAME PERIOD 4781 FILEEXTENSION 4782 INTO NEWFILENAMEWITHPATH. 4783 4784 CONCATENATE USERPATH SLASHSEPARATOR OBJECTNAME INTO NEWSUBDIRECTORY. 4785 CONCATENATE USERPATH SLASHSEPARATOR OBJECTNAME INTO COMPLETEPATH. 4786 ELSE. 4787 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY 4788 SLASHSEPARATOR OBJECTNAME 4789 SLASHSEPARATOR 'Message class-' 4790 OBJECTNAME PERIOD FILEEXTENSION 4791 INTO NEWFILENAMEWITHPATH. 4792 4793 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY SLASHSEPARATOR OBJECTNAME INTO NEWSUBDIRECTORY. 4794 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY SLASHSEPARATOR OBJECTNAME INTO COMPLETEPATH. 4795 ENDIF. 4796 4797 * Class definition 4798 WHEN IS_CLASS. 4799 IF ADDITIONALSUBDIRECTORY IS INITIAL. 4800 CONCATENATE USERPATH SLASHSEPARATOR OBJECTNAME 4801 SLASHSEPARATOR 'Class-' 4802 OBJECTNAME PERIOD FILEEXTENSION 4803 INTO NEWFILENAMEWITHPATH. 4804 4805 CONCATENATE USERPATH SLASHSEPARATOR OBJECTNAME INTO NEWSUBDIRECTORY. 4806 CONCATENATE USERPATH SLASHSEPARATOR OBJECTNAME INTO COMPLETEPATH. 4807 ELSE. 4808 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY 4809 SLASHSEPARATOR OBJECTNAME 4810 SLASHSEPARATOR 'Class-' 4811 OBJECTNAME PERIOD FILEEXTENSION 4812 INTO NEWFILENAMEWITHPATH. 4813 4814 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY SLASHSEPARATOR OBJECTNAME INTO NEWSUBDIRECTORY. 4815 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY SLASHSEPARATOR OBJECTNAME INTO COMPLETEPATH. 4816 ENDIF. 4817 4818 * Class definition 4819 WHEN IS_METHOD. 4820 IF ADDITIONALSUBDIRECTORY IS INITIAL. 4821 CONCATENATE USERPATH SLASHSEPARATOR 'Method-' 4822 OBJECTNAME PERIOD FILEEXTENSION 4823 INTO NEWFILENAMEWITHPATH. 4824 4825 CONCATENATE USERPATH SLASHSEPARATOR OBJECTNAME INTO NEWSUBDIRECTORY. 4826 CONCATENATE USERPATH SLASHSEPARATOR OBJECTNAME INTO COMPLETEPATH. 4827 ELSE. 4828 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY 4829 SLASHSEPARATOR 'Method-' 4830 OBJECTNAME PERIOD FILEEXTENSION 4831 INTO NEWFILENAMEWITHPATH. 4832 4833 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY SLASHSEPARATOR OBJECTNAME INTO NEWSUBDIRECTORY. 4834 CONCATENATE USERPATH SLASHSEPARATOR ADDITIONALSUBDIRECTORY SLASHSEPARATOR OBJECTNAME INTO COMPLETEPATH. 4835 ENDIF. 4836 ENDCASE. 4837 4838 TRANSLATE COMPLETEPATH TO LOWER CASE. 4839 CONCATENATE OBJECTNAME PERIOD FILEEXTENSION INTO NEWFILENAMEONLY. 4840 TRANSLATE NEWFILENAMEONLY TO LOWER CASE. 4841 TRANSLATE NEWFILENAMEWITHPATH TO LOWER CASE. 4842 TRANSLATE NEWSUBDIRECTORY TO LOWER CASE. 4843 4844 * If we are running on a non UNIX environment we will need to remove incorrect characters from the filename. 4845 IF DOWNLOADTOSERVER IS INITIAL. 4846 IF FRONTENDOPSYSTEM = NON_UNIX. 4847 TRANSLATE NEWFILENAMEONLY USING '/_'. 4848 TRANSLATE NEWFILENAMEWITHPATH USING '/_'. 4849 TRANSLATE NEWFILENAMEONLY USING '< '. 4850 TRANSLATE NEWFILENAMEWITHPATH USING '< '. 4851 TRANSLATE NEWFILENAMEONLY USING '> '. 4852 TRANSLATE NEWFILENAMEWITHPATH USING '> '. 4853 TRANSLATE NEWFILENAMEONLY USING '? '. 4854 TRANSLATE NEWFILENAMEWITHPATH USING '? '. 4855 TRANSLATE NEWFILENAMEONLY USING '| '. 4856 TRANSLATE NEWFILENAMEWITHPATH USING '| '. 4857 CONDENSE NEWFILENAMEONLY NO-GAPS. 4858 CONDENSE NEWFILENAMEWITHPATH NO-GAPS. 4859 ENDIF. 4860 ELSE. 4861 IF SERVEROPSYSTEM = NON_UNIX. 4862 TRANSLATE NEWFILENAMEONLY USING '/_'. 4863 TRANSLATE NEWFILENAMEWITHPATH USING '/_'. 4864 TRANSLATE NEWFILENAMEONLY USING '< '. 4865 TRANSLATE NEWFILENAMEWITHPATH USING '< '. 4866 TRANSLATE NEWFILENAMEONLY USING '> '. 4867 TRANSLATE NEWFILENAMEWITHPATH USING '> '. 4868 TRANSLATE NEWFILENAMEONLY USING '? '. 4869 TRANSLATE NEWFILENAMEWITHPATH USING '? '. 4870 TRANSLATE NEWFILENAMEONLY USING '| '. 4871 TRANSLATE NEWFILENAMEWITHPATH USING '| '. 4872 CONDENSE NEWFILENAMEONLY NO-GAPS. 4873 CONDENSE NEWFILENAMEWITHPATH NO-GAPS. 4874 ENDIF. 4875 ENDIF. 4876 ENDFORM. "buildFilename 4877 4878 *------------------------------------------------------------------------------------------------------- 4879 * saveFileToPc... write an internal table to a file on the local PC 4880 *------------------------------------------------------------------------------------------------------- 4881 FORM SAVEFILETOPC USING IDOWNLOAD TYPE STANDARD TABLE 4882 VALUE(FILENAMEWITHPATH) 4883 VALUE(FILENAME) 4884 VALUE(WRITEFIELDSEPARATOR) 4885 VALUE(TRUNCATETRAILINGBLANKS) 4886 VALUE(DISPLAYPROGRESSMESSAGE). 4887 4888 DATA: STATUSMESSAGE TYPE STRING. 4889 DATA: OBJFILE TYPE REF TO CL_GUI_FRONTEND_SERVICES. 4890 DATA: STRSUBRC TYPE STRING. 4891 4892 IF NOT DISPLAYPROGRESSMESSAGE IS INITIAL. 4893 CONCATENATE `Downloading: ` FILENAME INTO STATUSMESSAGE. 4894 PERFORM DISPLAYSTATUS USING STATUSMESSAGE 0. 4895 ENDIF. 4896 4897 CREATE OBJECT OBJFILE. 4898 CALL METHOD OBJFILE->GUI_DOWNLOAD 4899 EXPORTING 4900 FILENAME = FILENAMEWITHPATH 4901 FILETYPE = 'ASC' 4902 WRITE_FIELD_SEPARATOR = WRITEFIELDSEPARATOR 4903 TRUNC_TRAILING_BLANKS = TRUNCATETRAILINGBLANKS 4904 CHANGING 4905 DATA_TAB = IDOWNLOAD[] 4906 EXCEPTIONS 4907 FILE_WRITE_ERROR = 1 4908 NO_BATCH = 2 4909 GUI_REFUSE_FILETRANSFER = 3 4910 INVALID_TYPE = 4 4911 NO_AUTHORITY = 5 4912 UNKNOWN_ERROR = 6 4913 HEADER_NOT_ALLOWED = 7 4914 SEPARATOR_NOT_ALLOWED = 8 4915 FILESIZE_NOT_ALLOWED = 9 4916 HEADER_TOO_LONG = 10 4917 DP_ERROR_CREATE = 11 4918 DP_ERROR_SEND = 12 4919 DP_ERROR_WRITE = 13 4920 UNKNOWN_DP_ERROR = 14 4921 ACCESS_DENIED = 15 4922 DP_OUT_OF_MEMORY = 16 4923 DISK_FULL = 17 4924 DP_TIMEOUT = 18 4925 FILE_NOT_FOUND = 19 4926 DATAPROVIDER_EXCEPTION = 20 4927 CONTROL_FLUSH_ERROR = 21 4928 NOT_SUPPORTED_BY_GUI = 22 4929 ERROR_NO_GUI = 23. 4930 4931 IF SY-SUBRC <> 0. 4932 STRSUBRC = SY-SUBRC. 4933 CONCATENATE `File save error: ` FILENAME ` sy-subrc: ` STRSUBRC INTO STATUSMESSAGE. 4934 PERFORM DISPLAYSTATUS USING STATUSMESSAGE 3. 4935 ENDIF. 4936 ENDFORM. "saveFileToPc 4937 4938 *---------------------------------------------------------------------------------------------------------------------- 4939 * saveFileToServer... write an internal table to a file on the SAP server 4940 *---------------------------------------------------------------------------------------------------------------------- 4941 FORM SAVEFILETOSERVER USING IDOWNLOAD TYPE STANDARD TABLE 4942 VALUE(FILENAMEWITHPATH) 4943 VALUE(FILENAME) 4944 VALUE(PATH) 4945 VALUE(DISPLAYPROGRESSMESSAGE). 4946 4947 DATA: WADOWNLOAD TYPE STRING. 4948 DATA: STATUSMESSAGE TYPE STRING. 4949 4950 IF NOT DISPLAYPROGRESSMESSAGE IS INITIAL. 4951 CONCATENATE `Downloading: ` FILENAME INTO STATUSMESSAGE. 4952 PERFORM DISPLAYSTATUS USING STATUSMESSAGE 0. 4953 ENDIF. 4954 4955 READ TABLE ISERVERPATHS WITH KEY TABLE_LINE = PATH. 4956 IF SY-SUBRC <> 0. 4957 PERFORM CREATESERVERDIRECTORY USING PATH. 4958 APPEND PATH TO ISERVERPATHS. 4959 ENDIF. 4960 4961 OPEN DATASET FILENAMEWITHPATH FOR OUTPUT IN TEXT MODE ENCODING DEFAULT. 4962 IF SY-SUBRC = 0. 4963 LOOP AT IDOWNLOAD INTO WADOWNLOAD. 4964 TRANSFER WADOWNLOAD TO FILENAMEWITHPATH. 4965 IF SY-SUBRC <> 0. 4966 MESSAGE E000(OO) WITH 'Error transferring data to file'. 4967 ENDIF. 4968 ENDLOOP. 4969 4970 CLOSE DATASET FILENAMEWITHPATH. 4971 IF SY-SUBRC <> 0. 4972 MESSAGE E000(OO) WITH 'Error closing file'. 4973 ENDIF. 4974 ELSE. 4975 * Unable to create a file 4976 MESSAGE E000(OO) WITH 'Error creating file on SAP server' 'check permissions'. 4977 ENDIF. 4978 ENDFORM. "saveFileToServer 4979 4980 *---------------------------------------------------------------------------------------------------------------------- 4981 * createServerDirectory... 4982 *---------------------------------------------------------------------------------------------------------------------- 4983 FORM CREATESERVERDIRECTORY USING VALUE(PATH). 4984 4985 * Parameters for remove command. 4986 DATA: PARAM1 TYPE SXPGCOLIST-PARAMETERS. 4987 * Return status 4988 DATA: FUNCSTATUS TYPE EXTCMDEXEX-STATUS. 4989 * Command line listing returned by the function 4990 DATA: ISERVEROUTPUT TYPE STANDARD TABLE OF BTCXPM. 4991 DATA: WASERVEROUTPUT TYPE BTCXPM. 4992 * Targetsystem type conversion variable. 4993 DATA: TARGET TYPE RFCDISPLAY-RFCHOST. 4994 * Operating system 4995 DATA: OPERATINGSYSTEM TYPE SXPGCOLIST-OPSYSTEM. 4996 * Head for split command. 4997 DATA: HEAD TYPE STRING.. 4998 DATA: TAIL TYPE STRING. 4999 5000 PARAM1 = PATH. 5001 TARGET = SY-HOST. 5002 OPERATINGSYSTEM = SY-OPSYS. 5003 5004 CALL FUNCTION 'SXPG_COMMAND_EXECUTE' 5005 EXPORTING 5006 COMMANDNAME = 'ZMKDIR' 5007 ADDITIONAL_PARAMETERS = PARAM1 5008 OPERATINGSYSTEM = OPERATINGSYSTEM 5009 TARGETSYSTEM = TARGET 5010 STDOUT = 'X' 5011 STDERR = 'X' 5012 TERMINATIONWAIT = 'X' 5013 IMPORTING 5014 STATUS = FUNCSTATUS 5015 TABLES 5016 EXEC_PROTOCOL = ISERVEROUTPUT[] 5017 EXCEPTIONS 5018 NO_PERMISSION = 1 5019 COMMAND_NOT_FOUND = 2 5020 PARAMETERS_TOO_LONG = 3 5021 SECURITY_RISK = 4 5022 WRONG_CHECK_CALL_INTERFACE = 5 5023 PROGRAM_START_ERROR = 6 5024 PROGRAM_TERMINATION_ERROR = 7 5025 X_ERROR = 8 5026 PARAMETER_EXPECTED = 9 5027 TOO_MANY_PARAMETERS = 10 5028 ILLEGAL_COMMAND = 11 5029 WRONG_ASYNCHRONOUS_PARAMETERS = 12 5030 CANT_ENQ_TBTCO_ENTRY = 13 5031 JOBCOUNT_GENERATION_ERROR = 14 5032 OTHERS = 15. 5033 5034 IF SY-SUBRC = 0. 5035 * Although the function succeded did the external command actually work 5036 IF FUNCSTATUS = 'E'. 5037 * External command returned with an error 5038 IF SY-OPSYS CS 'Windows NT'. 5039 READ TABLE ISERVEROUTPUT INDEX 1 INTO WASERVEROUTPUT. 5040 IF WASERVEROUTPUT-MESSAGE NS 'already exists'. 5041 * An error occurred creating the directory on the server 5042 MESSAGE E000(OO) WITH 'An error occurred creating a directory'. 5043 ENDIF. 5044 ELSE. 5045 READ TABLE ISERVEROUTPUT INDEX 2 INTO WASERVEROUTPUT. 5046 SPLIT WASERVEROUTPUT-MESSAGE AT SPACE INTO HEAD TAIL. 5047 SHIFT TAIL LEFT DELETING LEADING SPACE. 5048 IF TAIL <> 'Do not specify an existing file.'. 5049 * An error occurred creating the directory on the server 5050 MESSAGE E000(OO) WITH 'An error occurred creating a directory'. 5051 ENDIF. 5052 ENDIF. 5053 ENDIF. 5054 ELSE. 5055 CASE SY-SUBRC. 5056 WHEN 1. 5057 * No permissions to run the command 5058 MESSAGE E000(OO) WITH 'No permissions to run external command ZMKDIR'. 5059 WHEN 2. 5060 * External command not found 5061 MESSAGE E000(OO) WITH 'External comand ZMKDIR not found'. 5062 5063 WHEN OTHERS. 5064 * Unable to create the directory 5065 MESSAGE E000(OO) WITH 'An error occurred creating a directory' 5066 ', subrc:' 5067 SY-SUBRC. 5068 ENDCASE. 5069 ENDIF. 5070 ENDFORM. "createServerDirectory 5071 5072 *---------------------------------------------------------------------------------------------------------------------- 5073 * appendTextElements... 5074 *---------------------------------------------------------------------------------------------------------------------- 5075 FORM APPENDTEXTELEMENTS USING ILOCTEXTELEMENTS LIKE DUMITEXTTAB[] 5076 ILOCLINES LIKE DUMIHTML[]. 5077 5078 FIELD-SYMBOLS: <WATEXTELEMENT> TYPE TTEXTTABLE. 5079 DATA: WALINE TYPE STRING. 5080 5081 IF LINES( ILOCTEXTELEMENTS ) > 0. 5082 APPEND '' TO ILOCLINES. 5083 5084 APPEND '*Text elements' TO ILOCLINES. 5085 APPEND '*----------------------------------------------------------' TO ILOCLINES. 5086 LOOP AT ILOCTEXTELEMENTS ASSIGNING <WATEXTELEMENT>. 5087 CONCATENATE '* ' <WATEXTELEMENT>-KEY <WATEXTELEMENT>-ENTRY INTO WALINE SEPARATED BY SPACE. 5088 APPEND WALINE TO ILOCLINES. 5089 ENDLOOP. 5090 ENDIF. 5091 ENDFORM. "appendTextElements 5092 5093 *---------------------------------------------------------------------------------------------------------------------- 5094 * appendGUITitles... 5095 *---------------------------------------------------------------------------------------------------------------------- 5096 FORM APPENDGUITITLES USING ILOCGUITITLES LIKE DUMIGUITITLE[] 5097 ILOCLINES LIKE DUMIHTML[]. 5098 5099 FIELD-SYMBOLS: <WAGUITITLE> TYPE TGUITITLE. 5100 DATA: WALINE TYPE STRING. 5101 5102 IF LINES( ILOCGUITITLES ) > 0. 5103 APPEND '' TO ILOCLINES. 5104 5105 APPEND '*GUI Texts' TO ILOCLINES. 5106 APPEND '*----------------------------------------------------------' TO ILOCLINES. 5107 LOOP AT ILOCGUITITLES ASSIGNING <WAGUITITLE>. 5108 CONCATENATE '* ' <WAGUITITLE>-OBJ_CODE '-->' <WAGUITITLE>-TEXT INTO WALINE SEPARATED BY SPACE. 5109 APPEND WALINE TO ILOCLINES. 5110 ENDLOOP. 5111 ENDIF. 5112 ENDFORM. "appendGUITitles 5113 5114 *---------------------------------------------------------------------------------------------------------------------- 5115 * appendSelectionTexts... 5116 *---------------------------------------------------------------------------------------------------------------------- 5117 FORM APPENDSELECTIONTEXTS USING ILOCSELECTIONTEXTS LIKE DUMITEXTTAB[] 5118 ILOCLINES LIKE DUMIHTML[]. 5119 5120 FIELD-SYMBOLS: <WASELECTIONTEXT> TYPE TTEXTTABLE. 5121 DATA: WALINE TYPE STRING. 5122 5123 IF LINES( ILOCSELECTIONTEXTS ) > 0. 5124 APPEND '' TO ILOCLINES. 5125 APPEND '' TO ILOCLINES. 5126 5127 APPEND '*Selection texts' TO ILOCLINES. 5128 APPEND '*----------------------------------------------------------' TO ILOCLINES. 5129 LOOP AT ILOCSELECTIONTEXTS ASSIGNING <WASELECTIONTEXT>. 5130 CONCATENATE '* ' <WASELECTIONTEXT>-KEY <WASELECTIONTEXT>-ENTRY INTO WALINE SEPARATED BY SPACE. 5131 APPEND WALINE TO ILOCLINES. 5132 ENDLOOP. 5133 ENDIF. 5134 ENDFORM. "appendSelectionTexts 5135 5136 *---------------------------------------------------------------------------------------------------------------------- 5137 * appendExceptionTexts... 5138 *---------------------------------------------------------------------------------------------------------------------- 5139 FORM APPENDEXCEPTIONTEXTS USING ICONCEPTS LIKE DUMICONCEPTS[] 5140 ILOCLINES LIKE DUMIHTML[]. 5141 5142 FIELD-SYMBOLS: <WACONCEPT> TYPE TCONCEPT. 5143 DATA: WALINE TYPE STRING. 5144 DATA: CONCEPTTEXT TYPE SOTR_TXT. 5145 5146 IF LINES( ICONCEPTS ) > 0. 5147 APPEND '' TO ILOCLINES. 5148 5149 APPEND '*Exception texts' TO ILOCLINES. 5150 APPEND '*----------------------------------------------------------' TO ILOCLINES. 5151 LOOP AT ICONCEPTS ASSIGNING <WACONCEPT>. 5152 * Find the text for this concept 5153 CALL FUNCTION 'SOTR_GET_TEXT_KEY' 5154 EXPORTING 5155 CONCEPT = <WACONCEPT>-CONCEPT 5156 LANGU = SY-LANGU 5157 SEARCH_IN_SECOND_LANGU = 'X' 5158 * second_langu = 'DE' 5159 IMPORTING 5160 E_TEXT = CONCEPTTEXT 5161 EXCEPTIONS 5162 NO_ENTRY_FOUND = 1 5163 PARAMETER_ERROR = 2 5164 OTHERS = 3. 5165 5166 IF SY-SUBRC = 0. 5167 CONCATENATE '* ' <WACONCEPT>-CONSTNAME '-' CONCEPTTEXT INTO WALINE SEPARATED BY SPACE. 5168 APPEND WALINE TO ILOCLINES. 5169 ENDIF. 5170 ENDLOOP. 5171 ENDIF. 5172 ENDFORM. "appendExceptionTexts 5173 5174 *---------------------------------------------------------------------------------------------------------------------- 5175 * downloadFunctionDocs... 5176 *---------------------------------------------------------------------------------------------------------------------- 5177 FORM DOWNLOADFUNCTIONDOCS USING VALUE(FUNCTIONNAME) 5178 VALUE(FUNCTIONDESCRIPTION) 5179 VALUE(USERFILEPATH) 5180 VALUE(FILEEXTENSION) 5181 VALUE(CONVERTTOHTML) 5182 VALUE(SLASHSEPARATOR) 5183 VALUE(SAVETOSERVER) 5184 VALUE(DISPLAYPROGRESSMESSAGE) 5185 SUBDIR 5186 DOCUMENTATIONDOWNLOADED. 5187 5188 DATA: ILINES TYPE STANDARD TABLE OF STRING WITH HEADER LINE. 5189 DATA: IDOCUMENTATION TYPE STANDARD TABLE OF FUNCT WITH HEADER LINE. 5190 DATA: IEXCEPTIONS TYPE STANDARD TABLE OF RSEXC WITH HEADER LINE. 5191 DATA: IEXPORT TYPE STANDARD TABLE OF RSEXP WITH HEADER LINE. 5192 DATA: IPARAMETER TYPE STANDARD TABLE OF RSIMP WITH HEADER LINE. 5193 DATA: ITABLES TYPE STANDARD TABLE OF RSTBL WITH HEADER LINE. 5194 DATA: ISCRIPTLINES TYPE STANDARD TABLE OF TLINE WITH HEADER LINE. 5195 DATA: HTMLPAGENAME TYPE STRING. 5196 DATA: NEWFILENAMEWITHPATH TYPE STRING. 5197 DATA: NEWFILENAMEONLY TYPE STRING. 5198 DATA: OBJECT LIKE DOKHL-OBJECT. 5199 DATA: STRINGLENGTH TYPE I VALUE 0. 5200 DATA: NEWSUBDIRECTORY TYPE STRING. 5201 DATA: WALINE(255). 5202 DATA: COMPLETESAVEPATH TYPE STRING. 5203 5204 DOCUMENTATIONDOWNLOADED = FALSE. 5205 OBJECT = FUNCTIONNAME. 5206 5207 CALL FUNCTION 'FUNCTION_IMPORT_DOKU' 5208 EXPORTING 5209 FUNCNAME = FUNCTIONNAME 5210 TABLES 5211 DOKUMENTATION = IDOCUMENTATION 5212 EXCEPTION_LIST = IEXCEPTIONS 5213 EXPORT_PARAMETER = IEXPORT 5214 IMPORT_PARAMETER = IPARAMETER 5215 TABLES_PARAMETER = ITABLES 5216 EXCEPTIONS 5217 ERROR_MESSAGE = 1 5218 FUNCTION_NOT_FOUND = 2 5219 INVALID_NAME = 3 5220 OTHERS = 4. 5221 5222 CALL FUNCTION 'DOCU_GET' 5223 EXPORTING 5224 ID = 'FU' 5225 LANGU = SY-LANGU 5226 OBJECT = OBJECT 5227 TYP = 'T' 5228 VERSION_ACTIVE_OR_LAST = 'L' 5229 TABLES 5230 LINE = ISCRIPTLINES 5231 EXCEPTIONS 5232 NO_DOCU_ON_SCREEN = 1 5233 NO_DOCU_SELF_DEF = 2 5234 NO_DOCU_TEMP = 3 5235 RET_CODE = 4 5236 OTHERS = 5. 5237 5238 IF SY-SUBRC = 0 AND NOT ( ISCRIPTLINES[] IS INITIAL ). 5239 APPEND 'SHORT TEXT' TO ILINES. 5240 CONCATENATE SPACE FUNCTIONDESCRIPTION INTO FUNCTIONDESCRIPTION SEPARATED BY SPACE. 5241 APPEND FUNCTIONDESCRIPTION TO ILINES. 5242 APPEND SPACE TO ILINES. 5243 LOOP AT ISCRIPTLINES. 5244 MOVE ISCRIPTLINES-TDLINE TO ILINES. 5245 CONCATENATE SPACE ILINES INTO ILINES SEPARATED BY SPACE. 5246 WHILE ILINES CP '&*' OR ILINES CP '*&'. 5247 REPLACE '&' INTO ILINES WITH SPACE. 5248 SHIFT ILINES LEFT DELETING LEADING SPACE. 5249 ENDWHILE. 5250 APPEND ILINES. 5251 ENDLOOP. 5252 5253 CLEAR ILINES. 5254 IF NOT ( IDOCUMENTATION[] IS INITIAL ). 5255 APPEND ILINES. 5256 APPEND 'PARAMETER DOCUMENTATION' TO ILINES. 5257 APPEND '-----------------------' TO ILINES. 5258 APPEND ILINES. 5259 5260 DESCRIBE FIELD IDOCUMENTATION-PARAMETER LENGTH STRINGLENGTH IN CHARACTER MODE. 5261 STRINGLENGTH = STRINGLENGTH + 3. 5262 LOOP AT IDOCUMENTATION. 5263 MOVE IDOCUMENTATION-PARAMETER TO WALINE. 5264 MOVE IDOCUMENTATION-STEXT TO WALINE+STRINGLENGTH. 5265 APPEND WALINE TO ILINES. 5266 ENDLOOP. 5267 ENDIF. 5268 5269 CONCATENATE `Documentation - ` FUNCTIONNAME INTO HTMLPAGENAME. 5270 5271 IF CONVERTTOHTML IS INITIAL. 5272 APPEND ILINES. 5273 APPEND '----------------------------------------------------------------------------------' TO ILINES. 5274 APPEND ILINES. 5275 PERFORM BUILDFOOTERMESSAGE USING 'TEXT' 5276 ILINES. 5277 APPEND ILINES. 5278 ELSE. 5279 PERFORM CONVERTCODETOHTML USING ILINES[] 5280 HTMLPAGENAME 5281 SPACE 5282 IS_DOCUMENTATION 5283 TRUE 5284 SPACE 5285 SPACE 5286 SPACE 5287 SPACE 5288 SPACE 5289 SPACE. 5290 ENDIF. 5291 5292 PERFORM BUILDFILENAME USING USERFILEPATH 5293 SUBDIR 5294 FUNCTIONNAME 5295 SPACE 5296 SPACE 5297 FILEEXTENSION 5298 IS_DOCUMENTATION 5299 SAVETOSERVER 5300 SLASHSEPARATOR 5301 NEWFILENAMEWITHPATH 5302 NEWFILENAMEONLY 5303 NEWSUBDIRECTORY 5304 COMPLETESAVEPATH. 5305 5306 IF SAVETOSERVER IS INITIAL. 5307 PERFORM SAVEFILETOPC USING ILINES[] 5308 NEWFILENAMEWITHPATH 5309 NEWFILENAMEONLY 5310 SPACE 5311 SPACE 5312 DISPLAYPROGRESSMESSAGE. 5313 ELSE. 5314 PERFORM SAVEFILETOSERVER USING ILINES[] 5315 NEWFILENAMEWITHPATH 5316 NEWFILENAMEONLY 5317 COMPLETESAVEPATH 5318 DISPLAYPROGRESSMESSAGE. 5319 ENDIF. 5320 5321 DOCUMENTATIONDOWNLOADED = TRUE. 5322 ENDIF. 5323 ENDFORM. "downloadFunctionDocs 5324 5325 *---------------------------------------------------------------------------------------------------------------------- 5326 * downloadScreens... 5327 *---------------------------------------------------------------------------------------------------------------------- 5328 FORM DOWNLOADSCREENS USING ILOCSCREENFLOW LIKE DUMISCREEN[] 5329 VALUE(PROGRAMNAME) 5330 VALUE(USERFILEPATH) 5331 VALUE(TEXTFILEEXTENSION) 5332 VALUE(SUBDIR) 5333 VALUE(SLASHSEPARATOR) 5334 VALUE(SAVETOSERVER) 5335 VALUE(DISPLAYPROGRESSMESSAGE). 5336 5337 5338 TABLES: D020T. 5339 DATA: HEADER LIKE D020S. 5340 DATA: IFIELDS TYPE STANDARD TABLE OF D021S WITH HEADER LINE. 5341 DATA: IFLOWLOGIC TYPE STANDARD TABLE OF D022S WITH HEADER LINE. 5342 FIELD-SYMBOLS <WASCREEN> TYPE TSCREENFLOW. 5343 DATA: WACHARHEADER TYPE SCR_CHHEAD. 5344 DATA: ISCREENCHAR TYPE STANDARD TABLE OF SCR_CHFLD WITH HEADER LINE. 5345 DATA: IFIELDSCHAR TYPE STANDARD TABLE OF SCR_CHFLD WITH HEADER LINE. 5346 DATA: STARS TYPE STRING VALUE '****************************************************************'. 5347 DATA: COMMENT1 TYPE STRING VALUE '* This file was generated by Direct Download Enterprise. *'. 5348 DATA: COMMENT2 TYPE STRING VALUE '* Please do not change it manually. *'. 5349 DATA: DYNPROTEXT TYPE STRING VALUE '%_DYNPRO'. 5350 DATA: HEADERTEXT TYPE STRING VALUE '%_HEADER'. 5351 DATA: PARAMSTEXT TYPE STRING VALUE '%_PARAMS'. 5352 DATA: DESCRIPTIONTEXT TYPE STRING VALUE '%_DESCRIPTION'. 5353 DATA: FIELDSTEXT TYPE STRING VALUE '%_FIELDS'. 5354 DATA: FLOWLOGICTEXT TYPE STRING VALUE '%_FLOWLOGIC'. 5355 DATA: PROGRAMLENGTH TYPE STRING. 5356 DATA: NEWSUBDIRECTORY TYPE STRING. 5357 DATA: NEWFILENAMEWITHPATH TYPE STRING. 5358 DATA: NEWFILENAMEONLY TYPE STRING. 5359 DATA: COMPLETESAVEPATH TYPE STRING. 5360 5361 LOOP AT ILOCSCREENFLOW ASSIGNING <WASCREEN>. 5362 CALL FUNCTION 'RS_IMPORT_DYNPRO' 5363 EXPORTING 5364 DYLANG = SY-LANGU 5365 DYNAME = PROGRAMNAME 5366 DYNUMB = <WASCREEN>-SCREEN 5367 IMPORTING 5368 HEADER = HEADER 5369 TABLES 5370 FTAB = IFIELDS 5371 PLTAB = IFLOWLOGIC. 5372 5373 CALL FUNCTION 'RS_SCRP_HEADER_RAW_TO_CHAR' 5374 EXPORTING 5375 HEADER_INT = HEADER 5376 IMPORTING 5377 HEADER_CHAR = WACHARHEADER 5378 EXCEPTIONS 5379 OTHERS = 1. 5380 5381 * Add in the top comments for the file 5382 APPEND STARS TO ISCREENCHAR . 5383 APPEND COMMENT1 TO ISCREENCHAR. 5384 APPEND COMMENT2 TO ISCREENCHAR. 5385 APPEND STARS TO ISCREENCHAR. 5386 5387 * Screen identification 5388 APPEND DYNPROTEXT TO ISCREENCHAR. 5389 APPEND WACHARHEADER-PROG TO ISCREENCHAR. 5390 APPEND WACHARHEADER-DNUM TO ISCREENCHAR. 5391 APPEND SY-SAPRL TO ISCREENCHAR. 5392 DESCRIBE FIELD D020T-PROG LENGTH PROGRAMLENGTH IN CHARACTER MODE. 5393 CONCATENATE ` ` PROGRAMLENGTH INTO ISCREENCHAR. 5394 APPEND ISCREENCHAR. 5395 5396 * Header 5397 APPEND HEADERTEXT TO ISCREENCHAR. 5398 APPEND WACHARHEADER TO ISCREENCHAR. 5399 5400 * Description text 5401 APPEND DESCRIPTIONTEXT TO ISCREENCHAR. 5402 SELECT SINGLE DTXT FROM D020T INTO ISCREENCHAR 5403 WHERE PROG = PROGRAMNAME 5404 AND DYNR = <WASCREEN>-SCREEN 5405 AND LANG = SY-LANGU. 5406 APPEND ISCREENCHAR. 5407 5408 * Fieldlist text 5409 APPEND FIELDSTEXT TO ISCREENCHAR. 5410 5411 CALL FUNCTION 'RS_SCRP_FIELDS_RAW_TO_CHAR' 5412 TABLES 5413 FIELDS_INT = IFIELDS[] 5414 FIELDS_CHAR = IFIELDSCHAR[] 5415 EXCEPTIONS 5416 OTHERS = 1. 5417 5418 LOOP AT IFIELDSCHAR. 5419 MOVE-CORRESPONDING IFIELDSCHAR TO ISCREENCHAR. 5420 APPEND ISCREENCHAR. 5421 ENDLOOP. 5422 5423 * Flowlogic text 5424 APPEND FLOWLOGICTEXT TO ISCREENCHAR. 5425 * Flow logic. 5426 LOOP AT IFLOWLOGIC. 5427 APPEND IFLOWLOGIC TO ISCREENCHAR. 5428 ENDLOOP. 5429 5430 PERFORM BUILDFILENAME USING USERFILEPATH 5431 SUBDIR 5432 WACHARHEADER-DNUM 5433 SPACE 5434 SPACE 5435 TEXTFILEEXTENSION 5436 IS_SCREEN 5437 SAVETOSERVER 5438 SLASHSEPARATOR 5439 NEWFILENAMEWITHPATH 5440 NEWFILENAMEONLY 5441 NEWSUBDIRECTORY 5442 COMPLETESAVEPATH. 5443 5444 IF SAVETOSERVER IS INITIAL. 5445 * Save the screen to the local computer 5446 PERFORM SAVEFILETOPC USING ISCREENCHAR[] 5447 NEWFILENAMEWITHPATH 5448 NEWFILENAMEONLY 5449 'X' 5450 'X' 5451 DISPLAYPROGRESSMESSAGE. 5452 ELSE. 5453 * Save the screen to the SAP server 5454 PERFORM SAVEFILETOSERVER USING ISCREENCHAR[] 5455 NEWFILENAMEWITHPATH 5456 NEWFILENAMEONLY 5457 COMPLETESAVEPATH 5458 DISPLAYPROGRESSMESSAGE. 5459 ENDIF. 5460 5461 CLEAR HEADER. CLEAR WACHARHEADER. 5462 CLEAR ISCREENCHAR[]. 5463 CLEAR IFIELDSCHAR[]. 5464 CLEAR IFIELDS[]. 5465 CLEAR IFLOWLOGIC[]. 5466 ENDLOOP. 5467 ENDFORM. "downloadScreens 5468 5469 *---------------------------------------------------------------------------------------------------------------------- 5470 * downloadGUITitles.. 5471 *---------------------------------------------------------------------------------------------------------------------- 5472 FORM DOWNLOADGUITITLES USING ILOCGUITITLES LIKE DUMIGUITITLE[] 5473 VALUE(USERFILEPATH) 5474 VALUE(TEXTFILEEXTENSION) 5475 VALUE(SUBDIR) 5476 VALUE(SLASHSEPARATOR) 5477 VALUE(SAVETOSERVER) 5478 VALUE(DISPLAYPROGRESSMESSAGE). 5479 5480 DATA: ILINES TYPE STANDARD TABLE OF STRING WITH HEADER LINE. 5481 FIELD-SYMBOLS: <WAGUITITLE> TYPE TGUITITLE. 5482 DATA: NEWSUBDIRECTORY TYPE STRING. 5483 DATA: NEWFILENAMEWITHPATH TYPE STRING. 5484 DATA: NEWFILENAMEONLY TYPE STRING. 5485 DATA: COMPLETESAVEPATH TYPE STRING. 5486 5487 LOOP AT ILOCGUITITLES ASSIGNING <WAGUITITLE>. 5488 APPEND <WAGUITITLE>-TEXT TO ILINES. 5489 5490 PERFORM BUILDFILENAME USING USERFILEPATH 5491 SUBDIR 5492 <WAGUITITLE>-OBJ_CODE 5493 SPACE 5494 SPACE 5495 TEXTFILEEXTENSION 5496 IS_GUITITLE 5497 SAVETOSERVER 5498 SLASHSEPARATOR 5499 NEWFILENAMEWITHPATH 5500 NEWFILENAMEONLY 5501 NEWSUBDIRECTORY 5502 COMPLETESAVEPATH. 5503 5504 IF SAVETOSERVER IS INITIAL. 5505 PERFORM SAVEFILETOPC USING ILINES[] 5506 NEWFILENAMEWITHPATH 5507 NEWFILENAMEONLY 5508 SPACE 5509 SPACE 5510 DISPLAYPROGRESSMESSAGE. 5511 ELSE. 5512 PERFORM SAVEFILETOSERVER USING ILINES[] 5513 NEWFILENAMEWITHPATH 5514 NEWFILENAMEONLY 5515 COMPLETESAVEPATH 5516 DISPLAYPROGRESSMESSAGE. 5517 ENDIF. 5518 5519 CLEAR ILINES[]. 5520 ENDLOOP. 5521 ENDFORM. "downloadGUITitles 5522 5523 *---------------------------------------------------------------------------------------------------------------------- 5524 * downloadPrograms.. 5525 *---------------------------------------------------------------------------------------------------------------------- 5526 FORM DOWNLOADPROGRAMS USING ILOCPROGRAM LIKE IPROGRAMS[] 5527 ILOCFUNCTIONS LIKE IFUNCTIONS[] 5528 VALUE(USERFILEPATH) 5529 VALUE(FILEEXTENSION) 5530 VALUE(HTMLFILEEXTENSION) 5531 VALUE(TEXTFILEEXTENSION) 5532 VALUE(CONVERTTOHTML) 5533 VALUE(SYNTAXHIGHLIGHTCOMMENTS) 5534 VALUE(CUSTOMERNAMERANGE) 5535 VALUE(GETINCLUDES) 5536 VALUE(GETDICTSTRUCT) 5537 VALUE(DOWNLOADDOCUMENTATION) 5538 VALUE(SORTTABLESASC) 5539 VALUE(SLASHSEPARATOR) 5540 VALUE(SAVETOSERVER) 5541 VALUE(DISPLAYPROGRESSMESSAGE). 5542 5543 5544 DATA: IPROGFUNCTIONS TYPE STANDARD TABLE OF TFUNCTION WITH HEADER LINE. 5545 FIELD-SYMBOLS: <WAPROGRAM> TYPE TPROGRAM. 5546 FIELD-SYMBOLS: <WAINCLUDE> TYPE TINCLUDE. 5547 DATA: IEMPTYTEXTELEMENTS TYPE STANDARD TABLE OF TTEXTTABLE. 5548 DATA: IEMPTYSELECTIONTEXTS TYPE STANDARD TABLE OF TTEXTTABLE. 5549 DATA: IEMPTYMESSAGES TYPE STANDARD TABLE OF TMESSAGE. 5550 DATA: IEMPTYGUITITLES TYPE STANDARD TABLE OF TGUITITLE. 5551 DATA: LOCCONVERTTOHTML(1). 5552 DATA: LOCFILEEXTENSION TYPE STRING. 5553 5554 SORT ILOCPROGRAM ASCENDING BY PROGNAME. 5555 5556 LOOP AT ILOCPROGRAM ASSIGNING <WAPROGRAM>. 5557 * if the program to download is this program then always download as text otherwise you will get a rubbish file 5558 IF <WAPROGRAM>-PROGNAME = SY-CPROG. 5559 LOCCONVERTTOHTML = ''. 5560 LOCFILEEXTENSION = TEXTEXTENSION. 5561 ELSE. 5562 LOCCONVERTTOHTML = CONVERTTOHTML. 5563 LOCFILEEXTENSION = FILEEXTENSION. 5564 ENDIF. 5565 5566 * Download the main program 5567 PERFORM READINCLUDEANDDOWNLOAD USING <WAPROGRAM>-ITEXTELEMENTS[] 5568 <WAPROGRAM>-ISELECTIONTEXTS[] 5569 <WAPROGRAM>-IMESSAGES[] 5570 <WAPROGRAM>-IGUITITLE[] 5571 <WAPROGRAM>-PROGNAME 5572 SPACE 5573 <WAPROGRAM>-PROGRAMTITLE 5574 IS_PROGRAM 5575 USERFILEPATH 5576 LOCFILEEXTENSION 5577 <WAPROGRAM>-PROGNAME 5578 LOCCONVERTTOHTML 5579 SYNTAXHIGHLIGHTCOMMENTS 5580 CUSTOMERNAMERANGE 5581 GETINCLUDES 5582 GETDICTSTRUCT 5583 SLASHSEPARATOR 5584 SAVETOSERVER 5585 DISPLAYPROGRESSMESSAGE. 5586 5587 * Download screens. 5588 IF NOT <WAPROGRAM>-ISCREENFLOW[] IS INITIAL. 5589 PERFORM DOWNLOADSCREENS USING <WAPROGRAM>-ISCREENFLOW[] 5590 <WAPROGRAM>-PROGNAME 5591 USERFILEPATH 5592 TEXTFILEEXTENSION 5593 <WAPROGRAM>-PROGNAME 5594 SLASHSEPARATOR 5595 SAVETOSERVER 5596 DISPLAYPROGRESSMESSAGE. 5597 ENDIF. 5598 5599 * Download GUI titles 5600 IF NOT <WAPROGRAM>-IGUITITLE[] IS INITIAL. 5601 PERFORM DOWNLOADGUITITLES USING <WAPROGRAM>-IGUITITLE 5602 USERFILEPATH 5603 TEXTFILEEXTENSION 5604 <WAPROGRAM>-PROGNAME 5605 SLASHSEPARATOR 5606 SAVETOSERVER 5607 DISPLAYPROGRESSMESSAGE. 5608 ENDIF. 5609 5610 * Download all other includes 5611 LOOP AT <WAPROGRAM>-IINCLUDES ASSIGNING <WAINCLUDE>. 5612 PERFORM READINCLUDEANDDOWNLOAD USING IEMPTYTEXTELEMENTS[] 5613 IEMPTYSELECTIONTEXTS[] 5614 IEMPTYMESSAGES[] 5615 IEMPTYGUITITLES[] 5616 <WAINCLUDE>-INCLUDENAME 5617 SPACE 5618 <WAINCLUDE>-INCLUDETITLE 5619 IS_PROGRAM 5620 USERFILEPATH 5621 FILEEXTENSION 5622 <WAPROGRAM>-PROGNAME 5623 CONVERTTOHTML 5624 SYNTAXHIGHLIGHTCOMMENTS 5625 CUSTOMERNAMERANGE 5626 GETINCLUDES 5627 GETDICTSTRUCT 5628 SLASHSEPARATOR 5629 SAVETOSERVER 5630 DISPLAYPROGRESSMESSAGE. 5631 5632 ENDLOOP. 5633 5634 * Download all dictionary structures 5635 IF NOT <WAPROGRAM>-IDICTSTRUCT[] IS INITIAL. 5636 PERFORM DOWNLOADDDSTRUCTURES USING <WAPROGRAM>-IDICTSTRUCT[] 5637 USERFILEPATH 5638 HTMLFILEEXTENSION 5639 <WAPROGRAM>-PROGNAME 5640 SORTTABLESASC 5641 SLASHSEPARATOR 5642 SAVETOSERVER 5643 DISPLAYPROGRESSMESSAGE. 5644 ENDIF. 5645 5646 * Download any functions used by these programs 5647 LOOP AT ILOCFUNCTIONS INTO IPROGFUNCTIONS WHERE PROGRAMLINKNAME = <WAPROGRAM>-PROGNAME. 5648 APPEND IPROGFUNCTIONS. 5649 ENDLOOP. 5650 5651 IF NOT IPROGFUNCTIONS[] IS INITIAL. 5652 PERFORM DOWNLOADFUNCTIONS USING IPROGFUNCTIONS[] 5653 USERFILEPATH 5654 FILEEXTENSION 5655 <WAPROGRAM>-PROGNAME 5656 DOWNLOADDOCUMENTATION 5657 CONVERTTOHTML 5658 SYNTAXHIGHLIGHTCOMMENTS 5659 CUSTOMERNAMERANGE 5660 GETINCLUDES 5661 GETDICTSTRUCT 5662 TEXTFILEEXTENSION 5663 HTMLFILEEXTENSION 5664 SORTTABLESASC 5665 SLASHSEPARATOR 5666 SAVETOSERVER 5667 DISPLAYPROGRESSMESSAGE. 5668 CLEAR IPROGFUNCTIONS[]. 5669 ENDIF. 5670 ENDLOOP. 5671 ENDFORM. "downloadPrograms 5672 5673 *---------------------------------------------------------------------------------------------------------------------- 5674 * downloadClasses.. 5675 *---------------------------------------------------------------------------------------------------------------------- 5676 FORM DOWNLOADCLASSES USING ILOCCLASSES LIKE ICLASSES[] 5677 ILOCFUNCTIONS LIKE IFUNCTIONS[] 5678 VALUE(USERFILEPATH) 5679 VALUE(FILEEXTENSION) 5680 VALUE(HTMLFILEEXTENSION) 5681 VALUE(TEXTFILEEXTENSION) 5682 VALUE(CONVERTTOHTML) 5683 VALUE(SYNTAXHIGHLIGHTCOMMENTS) 5684 VALUE(CUSTOMERNAMERANGE) 5685 VALUE(GETINCLUDES) 5686 VALUE(GETDICTSTRUCT) 5687 VALUE(DOWNLOADDOCUMENTATION) 5688 VALUE(SORTTABLESASC) 5689 VALUE(SLASHSEPARATOR) 5690 VALUE(SAVETOSERVER) 5691 VALUE(DISPLAYPROGRESSMESSAGE). 5692 5693 5694 DATA: ICLASSFUNCTIONS TYPE STANDARD TABLE OF TFUNCTION WITH HEADER LINE. 5695 FIELD-SYMBOLS: <WACLASS> TYPE TCLASS. 5696 FIELD-SYMBOLS: <WAMETHOD> TYPE TMETHOD. 5697 5698 SORT ILOCCLASSES ASCENDING BY CLSNAME. 5699 5700 LOOP AT ILOCCLASSES ASSIGNING <WACLASS>. 5701 * Download the class 5702 PERFORM READCLASSANDDOWNLOAD USING <WACLASS> 5703 <WACLASS>-CLSNAME 5704 SPACE 5705 IS_CLASS 5706 USERFILEPATH 5707 FILEEXTENSION 5708 SPACE 5709 CONVERTTOHTML 5710 SYNTAXHIGHLIGHTCOMMENTS 5711 CUSTOMERNAMERANGE 5712 GETINCLUDES 5713 GETDICTSTRUCT 5714 SLASHSEPARATOR 5715 SAVETOSERVER 5716 DISPLAYPROGRESSMESSAGE. 5717 5718 5719 * Download all of the methods 5720 LOOP AT <WACLASS>-IMETHODS ASSIGNING <WAMETHOD>. 5721 PERFORM READMETHODANDDOWNLOAD USING <WAMETHOD> 5722 <WAMETHOD>-CMPNAME 5723 <WAMETHOD>-METHODKEY 5724 SPACE 5725 IS_METHOD 5726 USERFILEPATH 5727 FILEEXTENSION 5728 <WACLASS>-CLSNAME 5729 CONVERTTOHTML 5730 SYNTAXHIGHLIGHTCOMMENTS 5731 CUSTOMERNAMERANGE 5732 GETINCLUDES 5733 GETDICTSTRUCT 5734 SLASHSEPARATOR 5735 SAVETOSERVER 5736 DISPLAYPROGRESSMESSAGE. 5737 5738 ENDLOOP. 5739 5740 * Download all dictionary structures 5741 IF NOT <WACLASS>-IDICTSTRUCT[] IS INITIAL. 5742 PERFORM DOWNLOADDDSTRUCTURES USING <WACLASS>-IDICTSTRUCT[] 5743 USERFILEPATH 5744 HTMLFILEEXTENSION 5745 <WACLASS>-CLSNAME 5746 SORTTABLESASC 5747 SLASHSEPARATOR 5748 SAVETOSERVER 5749 DISPLAYPROGRESSMESSAGE. 5750 ENDIF. 5751 5752 * Download any functions used by these programs 5753 LOOP AT ILOCFUNCTIONS INTO ICLASSFUNCTIONS WHERE PROGRAMLINKNAME = <WACLASS>-CLSNAME. 5754 APPEND ICLASSFUNCTIONS. 5755 ENDLOOP. 5756 5757 IF NOT ICLASSFUNCTIONS[] IS INITIAL. 5758 PERFORM DOWNLOADFUNCTIONS USING ICLASSFUNCTIONS[] 5759 USERFILEPATH 5760 FILEEXTENSION 5761 <WACLASS>-CLSNAME 5762 DOWNLOADDOCUMENTATION 5763 CONVERTTOHTML 5764 SYNTAXHIGHLIGHTCOMMENTS 5765 CUSTOMERNAMERANGE 5766 GETINCLUDES 5767 GETDICTSTRUCT 5768 TEXTFILEEXTENSION 5769 HTMLFILEEXTENSION 5770 SORTTABLESASC 5771 SLASHSEPARATOR 5772 SAVETOSERVER 5773 DISPLAYPROGRESSMESSAGE. 5774 CLEAR ICLASSFUNCTIONS[]. 5775 ENDIF. 5776 ENDLOOP. 5777 ENDFORM. "downloadClasses 5778 5779 *---------------------------------------------------------------------------------------------------------------------- 5780 * reFormatClassCode... Expand a classes public, private and protected section from the 72 characters that the class 5781 * builder sets it to back to the wide editor mode 5782 *---------------------------------------------------------------------------------------------------------------------- 5783 FORM REFORMATCLASSCODE USING ITEMPLINES LIKE DUMIHTML[]. 5784 5785 FIELD-SYMBOLS: <WALINE> TYPE STRING. 5786 DATA: NEWLINE TYPE STRING. 5787 DATA: INEWTABLE TYPE STANDARD TABLE OF STRING. 5788 DATA: FOUNDONE TYPE I VALUE FALSE. 5789 5790 LOOP AT ITEMPLINES ASSIGNING <WALINE>. 5791 IF NOT <WALINE> IS INITIAL. 5792 IF FOUNDONE = FALSE. 5793 FIND 'data' IN <WALINE> RESPECTING CASE. 5794 IF SY-SUBRC = 0. 5795 FOUNDONE = TRUE. 5796 ENDIF. 5797 5798 FIND 'constants' IN <WALINE> RESPECTING CASE. 5799 IF SY-SUBRC = 0. 5800 FOUNDONE = TRUE. 5801 ENDIF. 5802 5803 IF FOUNDONE = TRUE. 5804 NEWLINE = <WALINE>. 5805 5806 IF ( NEWLINE CS '.' OR NEWLINE CS '*' ). 5807 REPLACE '!' IN <WALINE> WITH ''. 5808 APPEND NEWLINE TO INEWTABLE. 5809 CLEAR NEWLINE. 5810 FOUNDONE = FALSE. 5811 ENDIF. 5812 ELSE. 5813 REPLACE '!' IN <WALINE> WITH ''. 5814 APPEND <WALINE> TO INEWTABLE. 5815 ENDIF. 5816 ELSE. 5817 CONCATENATE NEWLINE <WALINE> INTO NEWLINE SEPARATED BY SPACE. 5818 IF ( NEWLINE CS '.' OR NEWLINE CS '*' ). 5819 APPEND NEWLINE TO INEWTABLE. 5820 CLEAR NEWLINE. 5821 FOUNDONE = FALSE. 5822 ENDIF. 5823 ENDIF. 5824 ELSE. 5825 REPLACE '!' IN <WALINE> WITH ''. 5826 APPEND <WALINE> TO INEWTABLE[]. 5827 ENDIF. 5828 ENDLOOP. 5829 5830 ITEMPLINES[] = INEWTABLE[]. 5831 ENDFORM. "reFormatClassCode 5832 5833 *********************************************************************************************************************** 5834 **********************************************HTML ROUTINES************************************************************ 5835 *********************************************************************************************************************** 5836 5837 *---------------------------------------------------------------------------------------------------------------------- 5838 * convertDDToHTML... Convert text description to HTML 5839 *---------------------------------------------------------------------------------------------------------------------- 5840 FORM CONVERTDDTOHTML USING ILOCDICTSTRUCTURE LIKE DUMIDICTSTRUCTURE[] 5841 ILOCHTML LIKE DUMIHTML[] 5842 VALUE(TABLENAME) 5843 VALUE(TABLETITLE) 5844 VALUE(SORTTABLESASC). 5845 5846 DATA: ICOLUMNCAPTIONS TYPE STANDARD TABLE OF STRING WITH HEADER LINE. 5847 DATA: WADICTIONARY TYPE TDICTTABLESTRUCTURE. 5848 DATA: WAHTML TYPE STRING. 5849 DATA: TITLE TYPE STRING. 5850 5851 PERFORM BUILDCOLUMNHEADERS USING ICOLUMNCAPTIONS[]. 5852 5853 * Add a html header to the table 5854 CONCATENATE 'Dictionary object-' TABLENAME INTO TITLE SEPARATED BY SPACE. 5855 PERFORM ADDHTMLHEADER USING ILOCHTML[] 5856 TITLE. 5857 5858 CONCATENATE '<h2>' TABLENAME '</h2>' INTO WAHTML. 5859 APPEND WAHTML TO ILOCHTML. 5860 APPEND '' TO ILOCHTML. 5861 5862 CONCATENATE '<h3>' TABLETITLE '</h3>' INTO WAHTML. 5863 APPEND WAHTML TO ILOCHTML. 5864 APPEND '' TO ILOCHTML. 5865 5866 * Do we need to sort the fields into alphabetical order 5867 IF NOT SORTTABLESASC IS INITIAL. 5868 SORT ILOCDICTSTRUCTURE ASCENDING BY FIELDNAME. 5869 ENDIF. 5870 5871 PERFORM CONVERTITABTOHTML USING ICOLUMNCAPTIONS[] 5872 ILOCDICTSTRUCTURE[] 5873 ILOCHTML 5874 'X' 5875 COLOUR_BLACK 5876 '' 5877 COLOUR_YELLOW 5878 '' 5879 BACKGROUND_COLOUR 5880 'Arial' 5881 'green' 5882 '1' 5883 '1'. 5884 5885 * Add a html footer to the table 5886 APPEND '<br>' TO ILOCHTML. 5887 PERFORM ADDHTMLFOOTER USING ILOCHTML[]. 5888 ENDFORM. "convertDDToHTML 5889 5890 *---------------------------------------------------------------------------------------------------------------------- 5891 * convertITABtoHtml... produces a html table from an internal table 5892 *---------------------------------------------------------------------------------------------------------------------- 5893 FORM CONVERTITABTOHTML USING ILOCHEADER LIKE DUMIHEADER[] 5894 ILOCDICTSTRUCTURE LIKE DUMIDICTSTRUCTURE[] 5895 ILOCHTML LIKE DUMIHTML[] 5896 VALUE(INCLUDEROWCOUNT) 5897 HEADINGBACKCOLOUR 5898 HEADINGFONTNAME 5899 HEADINGFONTCOLOUR 5900 HEADINGFONTSIZE 5901 BODYBACKCOLOUR 5902 BODYFONTNAME 5903 BODYFONTCOLOUR 5904 BODYFONTSIZE 5905 BORDERSIZE. 5906 5907 * Holds one cell from the internal table 5908 FIELD-SYMBOLS: <FSFIELD>. 5909 * The value of one cell form the internal table 5910 DATA: WTEXTCELL TYPE STRING. 5911 * work area for putting the CSV value into 5912 DATA: WACSVTABLE TYPE STRING. 5913 * Have we used any font tags in the html code 5914 DATA: USEDAFONTATTRIBUTE TYPE I VALUE 0. 5915 * Work area for HTML table 5916 DATA: WAHTML TYPE STRING. 5917 * Loop counter for adding row numbers onto the output table 5918 DATA: LOOPCOUNTER TYPE STRING. 5919 * Work area for header table 5920 FIELD-SYMBOLS: <WAHEADER> TYPE STRING. 5921 FIELD-SYMBOLS: <ILOCDICTSTRUCTURE> TYPE TDICTTABLESTRUCTURE. 5922 5923 CONCATENATE '<table border="' BORDERSIZE '">' INTO WAHTML. 5924 APPEND WAHTML TO ILOCHTML. 5925 5926 IF NOT ILOCHEADER[] IS INITIAL. 5927 APPEND '<tr>' TO ILOCHTML. 5928 ENDIF. 5929 5930 LOOP AT ILOCHEADER ASSIGNING <WAHEADER>. 5931 IF HEADINGBACKCOLOUR IS INITIAL. 5932 WAHTML = '<th>'. 5933 ELSE. 5934 CONCATENATE '<th bgcolor="' HEADINGBACKCOLOUR '">' INTO WAHTML. 5935 ENDIF. 5936 5937 IF NOT HEADINGFONTNAME IS INITIAL OR NOT HEADINGFONTCOLOUR IS INITIAL OR NOT HEADINGFONTSIZE IS INITIAL. 5938 CONCATENATE WAHTML '<font' INTO WAHTML. 5939 5940 * Add the font name 5941 IF NOT HEADINGFONTNAME IS INITIAL. 5942 CONCATENATE WAHTML ' face ="' INTO WAHTML. 5943 CONCATENATE WAHTML HEADINGFONTNAME '"' INTO WAHTML. 5944 ENDIF. 5945 5946 * Add the font colour 5947 IF NOT HEADINGFONTCOLOUR IS INITIAL. 5948 CONCATENATE WAHTML ' color ="' INTO WAHTML. 5949 CONCATENATE WAHTML HEADINGFONTCOLOUR '"' INTO WAHTML. 5950 ENDIF. 5951 5952 * Add the fontsize 5953 IF NOT HEADINGFONTSIZE IS INITIAL. 5954 CONCATENATE WAHTML' size ="' INTO WAHTML. 5955 CONCATENATE WAHTML HEADINGFONTSIZE '"' INTO WAHTML. 5956 ENDIF. 5957 5958 CONCATENATE WAHTML '>' INTO WAHTML. 5959 USEDAFONTATTRIBUTE = TRUE. 5960 ENDIF. 5961 5962 * Add the caption name 5963 CONCATENATE WAHTML <WAHEADER> INTO WAHTML. 5964 5965 IF USEDAFONTATTRIBUTE = TRUE. 5966 CONCATENATE WAHTML '</font>' INTO WAHTML. 5967 USEDAFONTATTRIBUTE = FALSE. 5968 ENDIF. 5969 5970 CONCATENATE WAHTML '</th>' INTO WAHTML. 5971 APPEND WAHTML TO ILOCHTML. 5972 ENDLOOP. 5973 5974 APPEND '</tr>' TO ILOCHTML. 5975 FREE ILOCHEADER. 5976 5977 5978 * Line item data 5979 LOOP AT ILOCDICTSTRUCTURE ASSIGNING <ILOCDICTSTRUCTURE>. 5980 5981 LOOPCOUNTER = SY-TABIX. 5982 5983 APPEND '' TO ILOCHTML. 5984 APPEND '<tr>' TO ILOCHTML. 5985 5986 * Add the row count 5987 IF NOT INCLUDEROWCOUNT IS INITIAL. 5988 IF BODYBACKCOLOUR IS INITIAL. 5989 WAHTML = '<td>'. 5990 ELSE. 5991 CONCATENATE '<td bgcolor="' BODYBACKCOLOUR '">' INTO WAHTML. 5992 ENDIF. 5993 5994 IF NOT BODYFONTNAME IS INITIAL OR NOT BODYFONTCOLOUR IS INITIAL OR NOT BODYFONTSIZE IS INITIAL. 5995 CONCATENATE WAHTML '<font' INTO WAHTML. 5996 5997 * Add the font name 5998 IF NOT BODYFONTNAME IS INITIAL. 5999 CONCATENATE WAHTML ' face ="' INTO WAHTML. 6000 CONCATENATE WAHTML BODYFONTNAME '"' INTO WAHTML. 6001 ENDIF. 6002 6003 * Add the font colour 6004 IF NOT BODYFONTCOLOUR IS INITIAL. 6005 CONCATENATE WAHTML ' color ="' INTO WAHTML. 6006 CONCATENATE WAHTML BODYFONTCOLOUR '"' INTO WAHTML. 6007 ENDIF. 6008 6009 * Add the fontsize 6010 IF NOT BODYFONTSIZE IS INITIAL. 6011 CONCATENATE WAHTML ' size ="' INTO WAHTML. 6012 CONCATENATE WAHTML BODYFONTSIZE '"' INTO WAHTML. 6013 ENDIF. 6014 6015 CONCATENATE WAHTML '>' INTO WAHTML. 6016 USEDAFONTATTRIBUTE = TRUE. 6017 ENDIF. 6018 6019 * Add the row number into the table 6020 CONCATENATE WAHTML LOOPCOUNTER INTO WAHTML. 6021 6022 6023 IF USEDAFONTATTRIBUTE = TRUE. 6024 CONCATENATE WAHTML '</font>' INTO WAHTML. 6025 USEDAFONTATTRIBUTE = FALSE. 6026 ENDIF. 6027 6028 CONCATENATE WAHTML '</td>' INTO WAHTML. 6029 APPEND WAHTML TO ILOCHTML. 6030 ENDIF. 6031 6032 DO. 6033 * Assign each field in the table to the field symbol 6034 ASSIGN COMPONENT SY-INDEX OF STRUCTURE <ILOCDICTSTRUCTURE> TO <FSFIELD>. 6035 IF SY-SUBRC = 0. 6036 MOVE <FSFIELD> TO WTEXTCELL. 6037 6038 * Cell data processing 6039 IF BODYBACKCOLOUR IS INITIAL. 6040 WAHTML = '<td>'. 6041 ELSE. 6042 CONCATENATE '<td bgcolor="' BODYBACKCOLOUR '">' INTO WAHTML. 6043 ENDIF. 6044 6045 IF NOT BODYFONTNAME IS INITIAL OR NOT BODYFONTCOLOUR IS INITIAL OR NOT BODYFONTSIZE IS INITIAL. 6046 CONCATENATE WAHTML '<font' INTO WAHTML. 6047 6048 * Add the font name 6049 IF NOT BODYFONTNAME IS INITIAL. 6050 CONCATENATE WAHTML ' face ="' INTO WAHTML. 6051 CONCATENATE WAHTML BODYFONTNAME '"' INTO WAHTML. 6052 ENDIF. 6053 6054 * Add the font colour 6055 IF NOT BODYFONTCOLOUR IS INITIAL. 6056 CONCATENATE WAHTML ' color ="' INTO WAHTML. 6057 CONCATENATE WAHTML BODYFONTCOLOUR '"' INTO WAHTML. 6058 ENDIF. 6059 6060 * Add the fontsize 6061 IF NOT BODYFONTSIZE IS INITIAL. 6062 CONCATENATE WAHTML ' size ="' INTO WAHTML. 6063 CONCATENATE WAHTML BODYFONTSIZE '"' INTO WAHTML. 6064 ENDIF. 6065 6066 CONCATENATE WAHTML '>' INTO WAHTML. 6067 USEDAFONTATTRIBUTE = TRUE. 6068 ENDIF. 6069 6070 * Add the caption name 6071 IF WTEXTCELL IS INITIAL. 6072 CONCATENATE WAHTML '&nbsp;' INTO WAHTML. 6073 ELSE. 6074 CONCATENATE WAHTML WTEXTCELL INTO WAHTML. 6075 ENDIF. 6076 6077 IF USEDAFONTATTRIBUTE = TRUE. 6078 CONCATENATE WAHTML '</font>' INTO WAHTML. 6079 USEDAFONTATTRIBUTE = FALSE. 6080 ENDIF. 6081 6082 CONCATENATE WAHTML '</td>' INTO WAHTML. 6083 APPEND WAHTML TO ILOCHTML. 6084 ELSE. 6085 EXIT. 6086 ENDIF. 6087 ENDDO. 6088 6089 APPEND '</tr>' TO ILOCHTML. 6090 ENDLOOP. 6091 6092 APPEND '</table>' TO ILOCHTML. 6093 ENDFORM. "convertITABtoHtml 6094 6095 *---------------------------------------------------------------------------------------------------------------------- 6096 * convertCodeToHtml... Builds an HTML table based upon a text table. 6097 *---------------------------------------------------------------------------------------------------------------------- 6098 FORM CONVERTCODETOHTML USING ICONTENTS LIKE DUMIHTML[] 6099 VALUE(PROGRAMNAME) 6100 VALUE(SHORTDESCRIPTION) 6101 VALUE(SOURCECODETYPE) 6102 VALUE(FUNCTIONDOCUMENTATIONEXISTS) 6103 VALUE(ISMAINFUNCTIONINCLUDE) 6104 VALUE(SYNTAXHIGHLIGHTCOMMENTS) 6105 VALUE(HTMLEXTENSION) 6106 VALUE(CUSTOMERNAMERANGE) 6107 VALUE(GETINCLUDES) 6108 VALUE(GETDICTSTRUCTURES). 6109 6110 DATA: HTMLTABLE TYPE STANDARD TABLE OF STRING WITH HEADER LINE. 6111 DATA: LISTINGNAME TYPE STRING VALUE 'Code listing for:'. 6112 DATA: DESCRIPTIONNAME TYPE STRING VALUE `Description: `. 6113 DATA: HEAD(255). 6114 DATA: TAIL(255). 6115 DATA: MYTABIX TYPE SYTABIX. 6116 DATA: NEXTLINE TYPE SYTABIX. 6117 DATA: HYPERLINKNAME TYPE STRING. 6118 DATA: COPYOFCURRENTLINE TYPE STRING. 6119 DATA: CURRENTLINELENGTH TYPE I VALUE 0. 6120 DATA: COPYLINELENGTH TYPE I VALUE 0. 6121 DATA: IGNOREFUTURELINES TYPE I VALUE FALSE. 6122 DATA: FOUNDASTERIX TYPE I VALUE FALSE. 6123 DATA: LOWERCASELINK TYPE STRING. 6124 DATA: WANEXTLINE TYPE STRING. 6125 DATA: WACONTENT(255). 6126 6127 * Add a html header to the table 6128 PERFORM ADDHTMLHEADER USING HTMLTABLE[] 6129 PROGRAMNAME. 6130 6131 CONCATENATE LISTINGNAME PROGRAMNAME INTO LISTINGNAME SEPARATED BY SPACE. 6132 CONCATENATE '<font size="3" face = "Arial" color="' COLOUR_BLACK '"><b>' LISTINGNAME '</b></font>' INTO HTMLTABLE. 6133 APPEND HTMLTABLE. 6134 6135 IF NOT SHORTDESCRIPTION IS INITIAL. 6136 APPEND '<br>' TO HTMLTABLE. 6137 CONCATENATE DESCRIPTIONNAME SHORTDESCRIPTION INTO DESCRIPTIONNAME SEPARATED BY SPACE. 6138 CONCATENATE '<font size="3" face = "Arial" color="' COLOUR_BLACK '"><b>' DESCRIPTIONNAME '</b></font>' INTO HTMLTABLE. 6139 APPEND HTMLTABLE. 6140 ENDIF. 6141 6142 HTMLTABLE = '<hr>'. 6143 APPEND HTMLTABLE. 6144 6145 HTMLTABLE = '<pre width="100">'. 6146 APPEND HTMLTABLE. 6147 6148 LOOP AT ICONTENTS INTO WACONTENT. 6149 MYTABIX = SY-TABIX. 6150 6151 IF NOT ( ICONTENTS IS INITIAL ). 6152 WHILE ( WACONTENT CS '<' OR WACONTENT CS '>' ). 6153 REPLACE '<' IN WACONTENT WITH LT. 6154 REPLACE '>' IN WACONTENT WITH GT. 6155 ENDWHILE. 6156 6157 IF WACONTENT+0(1) <> ASTERIX. 6158 CURRENTLINELENGTH = STRLEN( WACONTENT ). 6159 COPYOFCURRENTLINE = WACONTENT. 6160 6161 * Don't hyperlink anything for files of type documentation 6162 IF SOURCECODETYPE <> IS_DOCUMENTATION. 6163 * Check for any functions to highlight 6164 IF ( WACONTENT CS CALLFUNCTION ) AND ( WACONTENT <> 'DESTINATION' ). 6165 NEXTLINE = MYTABIX + 1. 6166 READ TABLE ICONTENTS INTO WANEXTLINE INDEX NEXTLINE. 6167 TRANSLATE WANEXTLINE TO UPPER CASE. 6168 IF WANEXTLINE NS 'DESTINATION'. 6169 SHIFT COPYOFCURRENTLINE LEFT DELETING LEADING SPACE. 6170 6171 COPYLINELENGTH = STRLEN( COPYOFCURRENTLINE ). 6172 6173 SPLIT COPYOFCURRENTLINE AT SPACE INTO HEAD TAIL. 6174 SPLIT TAIL AT SPACE INTO HEAD TAIL. 6175 SPLIT TAIL AT SPACE INTO HEAD TAIL. 6176 * Function name is now in head 6177 TRANSLATE HEAD USING ''' '. 6178 SHIFT HEAD LEFT DELETING LEADING SPACE. 6179 6180 TRY. 6181 IF HEAD+0(1) = 'Y' OR HEAD+0(1) = 'Z' OR HEAD+0(1) = 'y' OR HEAD+0(1) = 'z' OR HEAD CS CUSTOMERNAMERANGE. 6182 * Definately a customer function module 6183 HYPERLINKNAME = HEAD. 6184 6185 IF SOURCECODETYPE = IS_FUNCTION. 6186 COPYOFCURRENTLINE = 'call function <a href ="../'. 6187 ELSE. 6188 COPYOFCURRENTLINE = 'call function <a href ="'. 6189 ENDIF. 6190 6191 LOWERCASELINK = HYPERLINKNAME. 6192 TRANSLATE LOWERCASELINK TO LOWER CASE. 6193 * If we are running on a non UNIX environment we will need to remove forward slashes 6194 IF FRONTENDOPSYSTEM = NON_UNIX. 6195 TRANSLATE LOWERCASELINK USING '/_'. 6196 ENDIF. 6197 6198 CONCATENATE COPYOFCURRENTLINE 6199 LOWERCASELINK "hyperlinkName 6200 '/' 6201 LOWERCASELINK "hyperlinkName 6202 PERIOD HTMLEXTENSION '">' 6203 '''' 6204 HYPERLINKNAME 6205 '''' 6206 '</a>' 6207 TAIL INTO COPYOFCURRENTLINE. 6208 6209 * Pad the string back out with spaces 6210 WHILE COPYLINELENGTH < CURRENTLINELENGTH. 6211 SHIFT COPYOFCURRENTLINE RIGHT BY 1 PLACES. 6212 COPYLINELENGTH = COPYLINELENGTH + 1. 6213 ENDWHILE. 6214 6215 WACONTENT = COPYOFCURRENTLINE. 6216 ENDIF. 6217 CATCH CX_SY_RANGE_OUT_OF_BOUNDS INTO OBJRUNTIMEERROR. 6218 ENDTRY. 6219 ENDIF. 6220 ENDIF. 6221 ENDIF. 6222 6223 * Check for any customer includes to hyperlink 6224 IF WACONTENT CS INCLUDE OR WACONTENT CS LOWINCLUDE. 6225 SHIFT COPYOFCURRENTLINE LEFT DELETING LEADING SPACE. 6226 COPYLINELENGTH = STRLEN( COPYOFCURRENTLINE ). 6227 6228 SPLIT COPYOFCURRENTLINE AT SPACE INTO HEAD TAIL. 6229 SHIFT TAIL LEFT DELETING LEADING SPACE. 6230 6231 TRY. 6232 IF ( TAIL+0(1) = 'Y' OR TAIL+0(1) = 'Z' OR TAIL+0(1) = 'y' OR TAIL+0(1) = 'z' OR TAIL CS CUSTOMERNAMERANGE OR TAIL+0(2) = 'mz' OR TAIL+0(2) = 'MZ' ) 6233 AND NOT GETINCLUDES IS INITIAL AND TAIL NS STRUCTURE AND TAIL NS LOWSTRUCTURE. 6234 6235 * Hyperlink for program includes 6236 CLEAR WACONTENT. 6237 SHIFT TAIL LEFT DELETING LEADING SPACE. 6238 SPLIT TAIL AT PERIOD INTO HYPERLINKNAME TAIL. 6239 COPYOFCURRENTLINE = 'include <a href ="'. 6240 6241 LOWERCASELINK = HYPERLINKNAME. 6242 TRANSLATE LOWERCASELINK TO LOWER CASE. 6243 6244 * If we are running on a non UNIX environment we will need to remove forward slashes 6245 IF FRONTENDOPSYSTEM = NON_UNIX. 6246 TRANSLATE LOWERCASELINK USING '/_'. 6247 ENDIF. 6248 6249 CONCATENATE COPYOFCURRENTLINE 6250 LOWERCASELINK "hyperlinkName 6251 PERIOD HTMLEXTENSION '">' 6252 HYPERLINKNAME 6253 '</a>' 6254 PERIOD TAIL INTO COPYOFCURRENTLINE. 6255 6256 * Pad the string back out with spaces 6257 WHILE COPYLINELENGTH < CURRENTLINELENGTH. 6258 SHIFT COPYOFCURRENTLINE RIGHT BY 1 PLACES. 6259 COPYLINELENGTH = COPYLINELENGTH + 1. 6260 ENDWHILE. 6261 WACONTENT = COPYOFCURRENTLINE. 6262 ELSE. 6263 IF NOT GETDICTSTRUCTURES IS INITIAL. 6264 * Hyperlink for structure include e.g. "include structure zfred." 6265 COPYLINELENGTH = STRLEN( COPYOFCURRENTLINE ). 6266 SPLIT COPYOFCURRENTLINE AT SPACE INTO HEAD TAIL. 6267 SHIFT TAIL LEFT DELETING LEADING SPACE. 6268 SPLIT TAIL AT SPACE INTO HEAD TAIL. 6269 6270 TRY. 6271 IF TAIL+0(1) = 'Y' OR TAIL+0(1) = 'Z' OR TAIL+0(1) = 'y' OR TAIL+0(1) = 'z' OR TAIL CS CUSTOMERNAMERANGE. 6272 CLEAR WACONTENT. 6273 SHIFT TAIL LEFT DELETING LEADING SPACE. 6274 SPLIT TAIL AT PERIOD INTO HYPERLINKNAME TAIL. 6275 COPYOFCURRENTLINE = 'include structure <a href ='. 6276 6277 LOWERCASELINK = HYPERLINKNAME. 6278 TRANSLATE LOWERCASELINK TO LOWER CASE. 6279 * If we are running on a non UNIX environment we will need to remove forward slashes 6280 IF FRONTENDOPSYSTEM = NON_UNIX. 6281 TRANSLATE LOWERCASELINK USING '/_'. 6282 ENDIF. 6283 6284 CONCATENATE COPYOFCURRENTLINE 6285 '"' 6286 LOWERCASELINK "hyperlinkName 6287 '/' 6288 'dictionary-' 6289 LOWERCASELINK "hyperlinkName 6290 PERIOD HTMLEXTENSION 6291 '">' 6292 HYPERLINKNAME 6293 '</a>' 6294 PERIOD TAIL INTO COPYOFCURRENTLINE. 6295 6296 * Pad the string back out with spaces 6297 WHILE COPYLINELENGTH < CURRENTLINELENGTH. 6298 SHIFT COPYOFCURRENTLINE RIGHT BY 1 PLACES. 6299 COPYLINELENGTH = COPYLINELENGTH + 1. 6300 ENDWHILE. 6301 WACONTENT = COPYOFCURRENTLINE. 6302 ENDIF. 6303 CATCH CX_SY_RANGE_OUT_OF_BOUNDS INTO OBJRUNTIMEERROR. 6304 ENDTRY. 6305 ENDIF. 6306 ENDIF. 6307 CATCH CX_SY_RANGE_OUT_OF_BOUNDS INTO OBJRUNTIMEERROR. 6308 ENDTRY. 6309 ENDIF. 6310 ELSE. 6311 IF NOT SYNTAXHIGHLIGHTCOMMENTS IS INITIAL AND WACONTENT+0(1) = ASTERIX. 6312 CONCATENATE '<font color ="' COMMENT_COLOUR '">' INTO HEAD. 6313 CONCATENATE HEAD WACONTENT '</font>' INTO TAIL. 6314 WACONTENT = TAIL. 6315 ENDIF. 6316 ENDIF. 6317 6318 HTMLTABLE = WACONTENT. 6319 6320 ELSE. 6321 HTMLTABLE = ''. 6322 ENDIF. 6323 APPEND HTMLTABLE. 6324 ENDLOOP. 6325 6326 HTMLTABLE = '</pre>'. 6327 APPEND HTMLTABLE. 6328 6329 * Add a html footer to the table 6330 PERFORM ADDHTMLFOOTER USING HTMLTABLE[]. 6331 6332 ICONTENTS[] = HTMLTABLE[]. 6333 ENDFORM. "convertCodeToHtml 6334 6335 *---------------------------------------------------------------------------------------------------------------------- 6336 * convertClassToHtml... Builds an HTML table based upon a text table. 6337 *---------------------------------------------------------------------------------------------------------------------- 6338 FORM CONVERTCLASSTOHTML USING ICONTENTS LIKE DUMIHTML[] 6339 VALUE(CLASSNAME) 6340 VALUE(SHORTDESCRIPTION) 6341 VALUE(SOURCECODETYPE) 6342 VALUE(SYNTAXHIGHLIGHTCOMMENTS) 6343 VALUE(HTMLEXTENSION) 6344 VALUE(CUSTOMERNAMERANGE) 6345 VALUE(GETDICTSTRUCTURES). 6346 6347 DATA: HTMLTABLE TYPE STANDARD TABLE OF STRING WITH HEADER LINE. 6348 DATA: LISTINGNAME TYPE STRING VALUE 'Code listing for class:'. 6349 DATA: DESCRIPTIONNAME TYPE STRING VALUE `Description: `. 6350 DATA: MYTABIX TYPE SYTABIX. 6351 DATA: WACONTENT(255). 6352 DATA: HEAD TYPE STRING. 6353 DATA: TAIL TYPE STRING. 6354 DATA: HYPERLINKNAME TYPE STRING. 6355 DATA: LOWERCASELINK TYPE STRING. 6356 DATA: COPYOFCURRENTLINE TYPE STRING. 6357 DATA: CURRENTLINELENGTH TYPE I VALUE 0. 6358 DATA: COPYLINELENGTH TYPE I VALUE 0. 6359 6360 * Add a html header to the table 6361 PERFORM ADDHTMLHEADER USING HTMLTABLE[] 6362 CLASSNAME. 6363 6364 CONCATENATE LISTINGNAME CLASSNAME INTO LISTINGNAME SEPARATED BY SPACE. 6365 CONCATENATE '<font size="3" face = "Arial" color="' COLOUR_BLACK '"><b>' LISTINGNAME '</b></font>' INTO HTMLTABLE. 6366 APPEND HTMLTABLE. 6367 6368 IF NOT SHORTDESCRIPTION IS INITIAL. 6369 APPEND '<br>' TO HTMLTABLE. 6370 CONCATENATE DESCRIPTIONNAME SHORTDESCRIPTION INTO DESCRIPTIONNAME SEPARATED BY SPACE. 6371 CONCATENATE '<font size="3" face = "Arial" color="' COLOUR_BLACK '"><b>' DESCRIPTIONNAME '</b></font>' INTO HTMLTABLE. 6372 APPEND HTMLTABLE. 6373 ENDIF. 6374 6375 HTMLTABLE = '<hr>'. 6376 APPEND HTMLTABLE. 6377 6378 HTMLTABLE = '<pre width="100">'. 6379 APPEND HTMLTABLE. 6380 6381 LOOP AT ICONTENTS INTO WACONTENT. 6382 MYTABIX = SY-TABIX. 6383 6384 * Comments 6385 IF NOT SYNTAXHIGHLIGHTCOMMENTS IS INITIAL AND WACONTENT+0(1) = ASTERIX. 6386 CONCATENATE '<font color ="' COMMENT_COLOUR '">' INTO HEAD. 6387 CONCATENATE HEAD WACONTENT '</font>' INTO WACONTENT. 6388 HTMLTABLE = WACONTENT. 6389 ELSE. 6390 * Smaller than, greater than signs 6391 IF NOT ( ICONTENTS IS INITIAL ). 6392 WHILE ( WACONTENT CS '<' OR WACONTENT CS '>' ). 6393 REPLACE '<' IN WACONTENT WITH LT. 6394 REPLACE '>' IN WACONTENT WITH GT. 6395 ENDWHILE. 6396 6397 * Dictionary structures 6398 IF NOT GETDICTSTRUCTURES IS INITIAL. 6399 FIND 'class' IN WACONTENT IGNORING CASE. 6400 IF SY-SUBRC <> 0. 6401 * Hyperlink for dictionary/structure include 6402 COPYLINELENGTH = STRLEN( WACONTENT ). 6403 COPYOFCURRENTLINE = WACONTENT. 6404 SPLIT COPYOFCURRENTLINE AT SPACE INTO HEAD TAIL. 6405 SHIFT TAIL LEFT DELETING LEADING SPACE. 6406 SPLIT TAIL AT SPACE INTO HEAD TAIL. 6407 6408 TRY. 6409 IF TAIL+0(1) = 'Y' OR TAIL+0(1) = 'Z' OR TAIL+0(1) = 'y' OR TAIL+0(1) = 'z' OR TAIL CS CUSTOMERNAMERANGE. 6410 CLEAR WACONTENT. 6411 SHIFT TAIL LEFT DELETING LEADING SPACE. 6412 SPLIT TAIL AT PERIOD INTO HYPERLINKNAME TAIL. 6413 COPYOFCURRENTLINE = 'include structure <a href ='. 6414 6415 LOWERCASELINK = HYPERLINKNAME. 6416 TRANSLATE LOWERCASELINK TO LOWER CASE. 6417 * If we are running on a non UNIX environment we will need to remove forward slashes 6418 IF FRONTENDOPSYSTEM = NON_UNIX. 6419 TRANSLATE LOWERCASELINK USING '/_'. 6420 ENDIF. 6421 6422 CONCATENATE COPYOFCURRENTLINE 6423 '"' 6424 LOWERCASELINK "hyperlinkName 6425 '/' 6426 'dictionary-' 6427 LOWERCASELINK "hyperlinkName 6428 PERIOD HTMLEXTENSION 6429 '">' 6430 HYPERLINKNAME 6431 '</a>' 6432 PERIOD TAIL INTO COPYOFCURRENTLINE. 6433 6434 * Pad the string back out with spaces 6435 WHILE COPYLINELENGTH < CURRENTLINELENGTH. 6436 SHIFT COPYOFCURRENTLINE RIGHT BY 1 PLACES. 6437 COPYLINELENGTH = COPYLINELENGTH + 1. 6438 ENDWHILE. 6439 WACONTENT = COPYOFCURRENTLINE. 6440 ENDIF. 6441 CATCH CX_SY_RANGE_OUT_OF_BOUNDS INTO OBJRUNTIMEERROR. 6442 ENDTRY. 6443 ENDIF. 6444 ENDIF. 6445 6446 HTMLTABLE = WACONTENT. 6447 ELSE. 6448 HTMLTABLE = ''. 6449 ENDIF. 6450 ENDIF. 6451 6452 APPEND HTMLTABLE. 6453 ENDLOOP. 6454 6455 HTMLTABLE = '</pre>'. 6456 APPEND HTMLTABLE. 6457 6458 * Add a html footer to the table 6459 PERFORM ADDHTMLFOOTER USING HTMLTABLE[]. 6460 6461 ICONTENTS[] = HTMLTABLE[]. 6462 ENDFORM. "convertClassToHtml 6463 6464 *---------------------------------------------------------------------------------------------------------------------- 6465 * convertFunctionToHtml... Builds an HTML table based upon a text table. 6466 *---------------------------------------------------------------------------------------------------------------------- 6467 FORM CONVERTFUNCTIONTOHTML USING ICONTENTS LIKE DUMIHTML[] 6468 VALUE(FUNCTIONNAME) 6469 VALUE(SHORTDESCRIPTION) 6470 VALUE(SOURCECODETYPE) 6471 VALUE(FUNCTIONDOCUMENTATIONEXISTS) 6472 VALUE(ISMAINFUNCTIONINCLUDE) 6473 VALUE(SYNTAXHIGHLIGHTCOMMENTS) 6474 VALUE(HTMLEXTENSION) 6475 VALUE(CUSTOMERNAMERANGE) 6476 VALUE(GETINCLUDES) 6477 VALUE(GETDICTSTRUCTURES). 6478 6479 DATA: HTMLTABLE TYPE STANDARD TABLE OF STRING WITH HEADER LINE. 6480 DATA: LISTINGNAME TYPE STRING VALUE 'Code listing for function:'. 6481 DATA: DESCRIPTIONNAME TYPE STRING VALUE `Description: `. 6482 DATA: HEAD(255). 6483 DATA: TAIL(255). 6484 DATA: MYTABIX TYPE SYTABIX. 6485 DATA: NEXTLINE TYPE SYTABIX. 6486 DATA: HYPERLINKNAME TYPE STRING. 6487 DATA: COPYOFCURRENTLINE TYPE STRING. 6488 DATA: CURRENTLINELENGTH TYPE I VALUE 0. 6489 DATA: COPYLINELENGTH TYPE I VALUE 0. 6490 DATA: IGNOREFUTURELINES TYPE I VALUE FALSE. 6491 DATA: FOUNDASTERIX TYPE I VALUE FALSE. 6492 DATA: LOWERCASELINK TYPE STRING. 6493 DATA: WANEXTLINE TYPE STRING. 6494 DATA: WACONTENT(255). 6495 6496 * Add a html header to the table 6497 PERFORM ADDHTMLHEADER USING HTMLTABLE[] 6498 FUNCTIONNAME. 6499 6500 CONCATENATE LISTINGNAME FUNCTIONNAME INTO LISTINGNAME SEPARATED BY SPACE. 6501 CONCATENATE '<font size="3" face = "Arial" color="' COLOUR_BLACK '"><b>' LISTINGNAME '</b></font>' INTO HTMLTABLE. 6502 APPEND HTMLTABLE. 6503 6504 IF NOT SHORTDESCRIPTION IS INITIAL. 6505 APPEND '<br>' TO HTMLTABLE. 6506 CONCATENATE DESCRIPTIONNAME SHORTDESCRIPTION INTO DESCRIPTIONNAME SEPARATED BY SPACE. 6507 CONCATENATE '<font size="3" face = "Arial" color="' COLOUR_BLACK '"><b>' DESCRIPTIONNAME '</b></font>' INTO HTMLTABLE. 6508 APPEND HTMLTABLE. 6509 ENDIF. 6510 6511 HTMLTABLE = '<hr>'. 6512 APPEND HTMLTABLE. 6513 6514 HTMLTABLE = '<pre width="100">'. 6515 APPEND HTMLTABLE. 6516 6517 LOOP AT ICONTENTS INTO WACONTENT. 6518 MYTABIX = SY-TABIX. 6519 6520 * Extra code for adding global and doc hyperlinks to functions 6521 IF SOURCECODETYPE = IS_FUNCTION AND ISMAINFUNCTIONINCLUDE = TRUE. 6522 IF SY-TABIX > 1. 6523 IF WACONTENT+0(1) = ASTERIX AND IGNOREFUTURELINES = FALSE. 6524 FOUNDASTERIX = TRUE. 6525 ELSE. 6526 IF FOUNDASTERIX = TRUE. 6527 * Lets add our extra HTML lines in here 6528 APPEND '' TO HTMLTABLE. 6529 6530 * Global data hyperlink 6531 IF NOT SYNTAXHIGHLIGHTCOMMENTS IS INITIAL. 6532 CONCATENATE '<font color ="' COMMENT_COLOUR '">' INTO COPYOFCURRENTLINE. 6533 ENDIF. 6534 6535 CONCATENATE COPYOFCURRENTLINE '* <a href ="' INTO COPYOFCURRENTLINE. 6536 LOWERCASELINK = FUNCTIONNAME. 6537 TRANSLATE LOWERCASELINK TO LOWER CASE. 6538 * If we are running on a non UNIX environment we will need to remove forward slashes 6539 IF FRONTENDOPSYSTEM = NON_UNIX. 6540 TRANSLATE LOWERCASELINK USING '/_'. 6541 ENDIF. 6542 6543 CONCATENATE COPYOFCURRENTLINE 'global-' LOWERCASELINK "functionName 6544 PERIOD HTMLEXTENSION '">' 'Global data declarations' '</a>' INTO COPYOFCURRENTLINE. 6545 6546 IF NOT SYNTAXHIGHLIGHTCOMMENTS IS INITIAL. 6547 CONCATENATE COPYOFCURRENTLINE '</font>' INTO COPYOFCURRENTLINE. 6548 ENDIF. 6549 6550 APPEND COPYOFCURRENTLINE TO HTMLTABLE. 6551 6552 * Documentation hyperlink. 6553 IF FUNCTIONDOCUMENTATIONEXISTS = TRUE. 6554 IF NOT SYNTAXHIGHLIGHTCOMMENTS IS INITIAL. 6555 CONCATENATE '<font color ="' COMMENT_COLOUR '">' INTO COPYOFCURRENTLINE. 6556 ENDIF. 6557 6558 CONCATENATE COPYOFCURRENTLINE '* <a href ="' INTO COPYOFCURRENTLINE. 6559 6560 LOWERCASELINK = FUNCTIONNAME. 6561 TRANSLATE LOWERCASELINK TO LOWER CASE. 6562 * If we are running on a non UNIX environment we will need to remove forward slashes 6563 IF FRONTENDOPSYSTEM = NON_UNIX. 6564 TRANSLATE LOWERCASELINK USING '/_'. 6565 ENDIF. 6566 6567 CONCATENATE COPYOFCURRENTLINE 6568 'docs-' 6569 LOWERCASELINK "functionName 6570 PERIOD HTMLEXTENSION '">' 6571 'Function module documentation' 6572 '</a>' 6573 INTO COPYOFCURRENTLINE. 6574 6575 IF NOT PCOMM IS INITIAL. 6576 CONCATENATE COPYOFCURRENTLINE '</font>' INTO COPYOFCURRENTLINE. 6577 ENDIF. 6578 APPEND COPYOFCURRENTLINE TO HTMLTABLE. 6579 ENDIF. 6580 6581 FOUNDASTERIX = FALSE. 6582 IGNOREFUTURELINES = TRUE. 6583 ENDIF. 6584 ENDIF. 6585 ENDIF. 6586 ENDIF. 6587 6588 * Carry on as normal 6589 IF NOT ( ICONTENTS IS INITIAL ). 6590 WHILE ( WACONTENT CS '<' OR WACONTENT CS '>' ). 6591 REPLACE '<' IN WACONTENT WITH LT. 6592 REPLACE '>' IN WACONTENT WITH GT. 6593 ENDWHILE. 6594 6595 IF WACONTENT+0(1) <> ASTERIX. 6596 CURRENTLINELENGTH = STRLEN( WACONTENT ). 6597 6598 * Don't hyperlink anything for files of type documentation 6599 IF SOURCECODETYPE <> IS_DOCUMENTATION. 6600 * Check for any functions to highlight 6601 IF ( WACONTENT CS CALLFUNCTION ) AND ( WACONTENT <> 'DESTINATION' ). 6602 NEXTLINE = MYTABIX + 1. 6603 READ TABLE ICONTENTS INTO WANEXTLINE INDEX NEXTLINE. 6604 TRANSLATE WANEXTLINE TO UPPER CASE. 6605 IF WANEXTLINE NS 'DESTINATION'. 6606 COPYOFCURRENTLINE = WACONTENT. 6607 SHIFT COPYOFCURRENTLINE LEFT DELETING LEADING SPACE. 6608 6609 COPYLINELENGTH = STRLEN( COPYOFCURRENTLINE ). 6610 6611 SPLIT COPYOFCURRENTLINE AT SPACE INTO HEAD TAIL. 6612 SPLIT TAIL AT SPACE INTO HEAD TAIL. 6613 SPLIT TAIL AT SPACE INTO HEAD TAIL. 6614 * Function name is now in head 6615 TRANSLATE HEAD USING ''' '. 6616 SHIFT HEAD LEFT DELETING LEADING SPACE. 6617 6618 TRY. 6619 IF HEAD+0(1) = 'Y' OR HEAD+0(1) = 'Z' OR HEAD+0(1) = 'y' OR HEAD+0(1) = 'z' OR HEAD CS CUSTOMERNAMERANGE. 6620 6621 * Definately a customer function module 6622 HYPERLINKNAME = HEAD. 6623 6624 IF SOURCECODETYPE = IS_FUNCTION. 6625 COPYOFCURRENTLINE = 'call function <a href ="../'. 6626 ELSE. 6627 COPYOFCURRENTLINE = 'call function <a href ="'. 6628 ENDIF. 6629 6630 LOWERCASELINK = HYPERLINKNAME. 6631 TRANSLATE LOWERCASELINK TO LOWER CASE. 6632 * If we are running on a non UNIX environment we will need to remove forward slashes 6633 IF FRONTENDOPSYSTEM = NON_UNIX. 6634 TRANSLATE LOWERCASELINK USING '/_'. 6635 ENDIF. 6636 6637 CONCATENATE COPYOFCURRENTLINE 6638 LOWERCASELINK "hyperlinkName 6639 '/' 6640 LOWERCASELINK "hyperlinkName 6641 PERIOD HTMLEXTENSION '">' 6642 '''' 6643 HYPERLINKNAME 6644 '''' 6645 '</a>' 6646 TAIL INTO COPYOFCURRENTLINE. 6647 6648 * Pad the string back out with spaces 6649 WHILE COPYLINELENGTH < CURRENTLINELENGTH. 6650 SHIFT COPYOFCURRENTLINE RIGHT BY 1 PLACES. 6651 COPYLINELENGTH = COPYLINELENGTH + 1. 6652 ENDWHILE. 6653 6654 WACONTENT = COPYOFCURRENTLINE. 6655 ENDIF. 6656 CATCH CX_SY_RANGE_OUT_OF_BOUNDS INTO OBJRUNTIMEERROR. 6657 ENDTRY. 6658 ENDIF. 6659 ENDIF. 6660 ENDIF. 6661 6662 * Check for any customer includes to hyperlink 6663 IF WACONTENT CS INCLUDE OR WACONTENT CS LOWINCLUDE. 6664 COPYOFCURRENTLINE = WACONTENT. 6665 6666 SHIFT COPYOFCURRENTLINE LEFT DELETING LEADING SPACE. 6667 COPYLINELENGTH = STRLEN( COPYOFCURRENTLINE ). 6668 6669 SPLIT COPYOFCURRENTLINE AT SPACE INTO HEAD TAIL. 6670 SHIFT TAIL LEFT DELETING LEADING SPACE. 6671 6672 TRY. 6673 IF ( TAIL+0(1) = 'Y' OR TAIL+0(1) = 'Z' OR TAIL+0(1) = 'y' OR TAIL+0(1) = 'z' 6674 OR TAIL CS CUSTOMERNAMERANGE OR TAIL+0(2) = 'mz' OR TAIL+0(2) = 'MZ' ) AND NOT GETINCLUDES IS INITIAL. 6675 6676 * Hyperlink for program includes 6677 CLEAR WACONTENT. 6678 SHIFT TAIL LEFT DELETING LEADING SPACE. 6679 SPLIT TAIL AT PERIOD INTO HYPERLINKNAME TAIL. 6680 COPYOFCURRENTLINE = 'include <a href ="'. 6681 6682 LOWERCASELINK = HYPERLINKNAME. 6683 TRANSLATE LOWERCASELINK TO LOWER CASE. 6684 * If we are running on a non UNIX environment we will need to remove forward slashes 6685 IF FRONTENDOPSYSTEM = NON_UNIX. 6686 TRANSLATE LOWERCASELINK USING '/_'. 6687 ENDIF. 6688 6689 CONCATENATE COPYOFCURRENTLINE 6690 LOWERCASELINK "hyperlinkName 6691 PERIOD HTMLEXTENSION '">' 6692 HYPERLINKNAME 6693 '</a>' 6694 PERIOD TAIL INTO COPYOFCURRENTLINE. 6695 6696 * Pad the string back out with spaces 6697 WHILE COPYLINELENGTH < CURRENTLINELENGTH. 6698 SHIFT COPYOFCURRENTLINE RIGHT BY 1 PLACES. 6699 COPYLINELENGTH = COPYLINELENGTH + 1. 6700 ENDWHILE. 6701 WACONTENT = COPYOFCURRENTLINE. 6702 ELSE. 6703 IF NOT GETDICTSTRUCTURES IS INITIAL. 6704 * Hyperlink for structure include 6705 COPYLINELENGTH = STRLEN( COPYOFCURRENTLINE ). 6706 SPLIT COPYOFCURRENTLINE AT SPACE INTO HEAD TAIL. 6707 SHIFT TAIL LEFT DELETING LEADING SPACE. 6708 SPLIT TAIL AT SPACE INTO HEAD TAIL. 6709 6710 TRY. 6711 IF TAIL+0(1) = 'Y' OR TAIL+0(1) = 'Z' OR TAIL+0(1) = 'y' OR TAIL+0(1) = 'z' OR TAIL CS CUSTOMERNAMERANGE. 6712 CLEAR WACONTENT. 6713 SHIFT TAIL LEFT DELETING LEADING SPACE. 6714 SPLIT TAIL AT PERIOD INTO HYPERLINKNAME TAIL. 6715 COPYOFCURRENTLINE = 'include structure <a href ='. 6716 6717 LOWERCASELINK = HYPERLINKNAME. 6718 TRANSLATE LOWERCASELINK TO LOWER CASE. 6719 * If we are running on a non UNIX environment we will need to remove forward slashes 6720 IF FRONTENDOPSYSTEM = NON_UNIX. 6721 TRANSLATE LOWERCASELINK USING '/_'. 6722 ENDIF. 6723 6724 CONCATENATE COPYOFCURRENTLINE 6725 '"' 6726 LOWERCASELINK "hyperlinkName 6727 '/' 6728 'dictionary-' 6729 LOWERCASELINK "hyperlinkName 6730 PERIOD HTMLEXTENSION 6731 '">' 6732 HYPERLINKNAME 6733 '</a>' 6734 PERIOD TAIL INTO COPYOFCURRENTLINE. 6735 6736 * Pad the string back out with spaces 6737 WHILE COPYLINELENGTH < CURRENTLINELENGTH. 6738 SHIFT COPYOFCURRENTLINE RIGHT BY 1 PLACES. 6739 COPYLINELENGTH = COPYLINELENGTH + 1. 6740 ENDWHILE. 6741 WACONTENT = COPYOFCURRENTLINE. 6742 ENDIF. 6743 CATCH CX_SY_RANGE_OUT_OF_BOUNDS INTO OBJRUNTIMEERROR. 6744 ENDTRY. 6745 ENDIF. 6746 ENDIF. 6747 CATCH CX_SY_RANGE_OUT_OF_BOUNDS INTO OBJRUNTIMEERROR. 6748 ENDTRY. 6749 ENDIF. 6750 ELSE. 6751 IF NOT SYNTAXHIGHLIGHTCOMMENTS IS INITIAL AND WACONTENT+0(1) = ASTERIX. 6752 CONCATENATE '<font color ="' COMMENT_COLOUR '">' INTO HEAD. 6753 CONCATENATE HEAD WACONTENT '</font>' INTO TAIL. 6754 WACONTENT = TAIL. 6755 ENDIF. 6756 ENDIF. 6757 6758 HTMLTABLE = WACONTENT. 6759 6760 ELSE. 6761 HTMLTABLE = ''. 6762 ENDIF. 6763 APPEND HTMLTABLE. 6764 ENDLOOP. 6765 6766 HTMLTABLE = '</pre>'. 6767 APPEND HTMLTABLE. 6768 6769 * Add a html footer to the table 6770 PERFORM ADDHTMLFOOTER USING HTMLTABLE[]. 6771 6772 ICONTENTS[] = HTMLTABLE[]. 6773 ENDFORM. "convertFunctionToHtml 6774 6775 *---------------------------------------------------------------------------------------------------------------------- 6776 * buildColumnHeaders... build table column names 6777 *---------------------------------------------------------------------------------------------------------------------- 6778 FORM BUILDCOLUMNHEADERS USING ILOCCOLUMNCAPTIONS LIKE DUMIHTML[]. 6779 6780 APPEND 'Row' TO ILOCCOLUMNCAPTIONS. 6781 APPEND 'Field name' TO ILOCCOLUMNCAPTIONS. 6782 APPEND 'Position' TO ILOCCOLUMNCAPTIONS. 6783 APPEND 'Key' TO ILOCCOLUMNCAPTIONS. 6784 APPEND 'Data element' TO ILOCCOLUMNCAPTIONS. 6785 APPEND 'Domain' TO ILOCCOLUMNCAPTIONS. 6786 APPEND 'Datatype' TO ILOCCOLUMNCAPTIONS. 6787 APPEND 'Length' TO ILOCCOLUMNCAPTIONS. 6788 APPEND 'Domain text' TO ILOCCOLUMNCAPTIONS. 6789 ENDFORM. "buildColumnHeaders 6790 6791 *---------------------------------------------------------------------------------------------------------------------- 6792 * addHTMLHeader... add a html formatted header to our output table 6793 *---------------------------------------------------------------------------------------------------------------------- 6794 FORM ADDHTMLHEADER USING ILOCHEADER LIKE DUMIHTML[] 6795 VALUE(TITLE). 6796 6797 DATA: WAHEADER TYPE STRING. 6798 6799 APPEND '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">' TO ILOCHEADER. 6800 APPEND '<html>' TO ILOCHEADER. 6801 APPEND '<head>' TO ILOCHEADER. 6802 6803 CONCATENATE '<title>' TITLE '</title>' INTO WAHEADER. 6804 APPEND WAHEADER TO ILOCHEADER. 6805 6806 APPEND '</head>' TO ILOCHEADER. 6807 6808 IF NOT PBACK IS INITIAL. 6809 CONCATENATE '<body bgcolor="' BACKGROUND_COLOUR '">' INTO WAHEADER. 6810 ELSE. 6811 CONCATENATE '<body bgcolor="' COLOUR_WHITE '">' INTO WAHEADER. 6812 ENDIF. 6813 6814 APPEND WAHEADER TO ILOCHEADER. 6815 ENDFORM. "addHTMLHeader 6816 6817 *---------------------------------------------------------------------------------------------------------------------- 6818 * addHTMLFooter... add a html formatted footer to our output table 6819 *---------------------------------------------------------------------------------------------------------------------- 6820 FORM ADDHTMLFOOTER USING ILOCFOOTER LIKE DUMIHTML[]. 6821 6822 DATA: FOOTERMESSAGE TYPE STRING. 6823 DATA: WAFOOTER TYPE STRING. 6824 6825 PERFORM BUILDFOOTERMESSAGE USING 'HTML' 6826 FOOTERMESSAGE. 6827 6828 APPEND '<hr>' TO ILOCFOOTER. 6829 CONCATENATE '<font size="2" face = "Sans Serif">' FOOTERMESSAGE INTO WAFOOTER. 6830 APPEND WAFOOTER TO ILOCFOOTER. 6831 APPEND '</font>' TO ILOCFOOTER. 6832 APPEND '</body>' TO ILOCFOOTER. 6833 APPEND '</html>' TO ILOCFOOTER. 6834 ENDFORM. "addHTMLFooter 6835 6836 *---------------------------------------------------------------------------------------------------------------------- 6837 * buildFooterMessage...Returns a footer message based on the output file type. 6838 *---------------------------------------------------------------------------------------------------------------------- 6839 FORM BUILDFOOTERMESSAGE USING FILETYPE 6840 RETURNMESSAGE. 6841 6842 IF FILETYPE = 'HTML'. 6843 CONCATENATE `Extracted by Direct Download Enterprise version ` 6844 VERSIONNO ` - E.G.Mellodew. 1998-2005 UK. Sap Release ` SY-SAPRL 6845 INTO RETURNMESSAGE. 6846 ELSE. 6847 CONCATENATE `Extracted by Direct Download Enterprise version ` 6848 VERSIONNO ` - E.G.Mellodew. 1998-2005 UK. Sap Release ` SY-SAPRL 6849 INTO RETURNMESSAGE. 6850 ENDIF. 6851 ENDFORM. "buildFooterMessage 6852 6853 *********************************************************************************************************************** 6854 ********************************************DISPLAY ROUTINES*********************************************************** 6855 *********************************************************************************************************************** 6856 6857 *---------------------------------------------------------------------------------------------------------------------- 6858 * fillTreeNodeTables... 6859 *---------------------------------------------------------------------------------------------------------------------- 6860 FORM FILLTREENODETABLES USING ILOCDICTIONARY LIKE IDICTIONARY[] 6861 ILOCTREEDISPLAY LIKE ITREEDISPLAY[] 6862 VALUE(RUNTIME). 6863 6864 DATA: TABLELINES TYPE I. 6865 DATA: WATREEDISPLAY LIKE SNODETEXT. 6866 FIELD-SYMBOLS: <WADICTIONARY> TYPE TDICTTABLE. 6867 DATA: TABLELINESSTRING TYPE STRING. 6868 DATA: RUNTIMECHAR(10). 6869 DATA: SUBLEVEL TYPE STRING. 6870 6871 TABLELINES = LINES( ILOCDICTIONARY ). 6872 TABLELINESSTRING = TABLELINES. 6873 6874 IF TABLELINES = 1. 6875 CONCATENATE TABLELINESSTRING 'table downloaded' INTO WATREEDISPLAY-TEXT2 SEPARATED BY SPACE. 6876 ELSE. 6877 CONCATENATE TABLELINESSTRING 'tables downloaded' INTO WATREEDISPLAY-TEXT2 SEPARATED BY SPACE. 6878 ENDIF. 6879 6880 WRITE RUNTIME TO RUNTIMECHAR. 6881 CONCATENATE WATREEDISPLAY-TEXT2 '- runtime' RUNTIMECHAR INTO WATREEDISPLAY-TEXT2 SEPARATED BY SPACE. 6882 6883 * include header display record. 6884 WATREEDISPLAY-TLEVEL = '1'. 6885 WATREEDISPLAY-TLENGTH2 = 60. 6886 WATREEDISPLAY-TCOLOR2 = 1. 6887 APPEND WATREEDISPLAY TO ILOCTREEDISPLAY. 6888 6889 LOOP AT ILOCDICTIONARY ASSIGNING <WADICTIONARY>. 6890 WATREEDISPLAY-TLEVEL = '2'. 6891 WATREEDISPLAY-TEXT2 = <WADICTIONARY>-TABLENAME. 6892 WATREEDISPLAY-TCOLOR2 = 3. 6893 WATREEDISPLAY-TLENGTH3 = 80. 6894 WATREEDISPLAY-TCOLOR3 = 3. 6895 WATREEDISPLAY-TPOS3 = 60. 6896 CONCATENATE 'Dictionary:' <WADICTIONARY>-TABLETITLE INTO WATREEDISPLAY-TEXT3 SEPARATED BY SPACE. 6897 6898 APPEND WATREEDISPLAY TO ILOCTREEDISPLAY. 6899 ENDLOOP. 6900 ENDFORM. "fillTreeNodeTables 6901 6902 *---------------------------------------------------------------------------------------------------------------------- 6903 * fillTreeNodeMessages... 6904 *---------------------------------------------------------------------------------------------------------------------- 6905 FORM FILLTREENODEMESSAGES USING ILOCMESSAGES LIKE IMESSAGES[] 6906 ILOCTREEDISPLAY LIKE ITREEDISPLAY[] 6907 VALUE(RUNTIME). 6908 6909 DATA: TABLELINES TYPE I. 6910 DATA: WATREEDISPLAY LIKE SNODETEXT. 6911 FIELD-SYMBOLS: <WAMESSAGE> TYPE TMESSAGE. 6912 DATA: TABLELINESSTRING TYPE STRING. 6913 DATA: RUNTIMECHAR(10). 6914 6915 SORT ILOCMESSAGES ASCENDING BY ARBGB. 6916 6917 LOOP AT ILOCMESSAGES ASSIGNING <WAMESSAGE>. 6918 AT NEW ARBGB. 6919 TABLELINES = TABLELINES + 1. 6920 ENDAT. 6921 ENDLOOP. 6922 TABLELINESSTRING = TABLELINES. 6923 6924 IF TABLELINES = 1. 6925 CONCATENATE TABLELINESSTRING 'message class downloaded' INTO WATREEDISPLAY-TEXT2 SEPARATED BY SPACE. 6926 ELSE. 6927 CONCATENATE TABLELINESSTRING 'message classes downloaded' INTO WATREEDISPLAY-TEXT2 SEPARATED BY SPACE. 6928 ENDIF. 6929 6930 WRITE RUNTIME TO RUNTIMECHAR. 6931 CONCATENATE WATREEDISPLAY-TEXT2 '- runtime' RUNTIMECHAR INTO WATREEDISPLAY-TEXT2 SEPARATED BY SPACE. 6932 6933 * include header display record. 6934 WATREEDISPLAY-TLEVEL = '1'. 6935 WATREEDISPLAY-TLENGTH2 = 60. 6936 WATREEDISPLAY-TCOLOR2 = 1. 6937 APPEND WATREEDISPLAY TO ILOCTREEDISPLAY. 6938 6939 LOOP AT ILOCMESSAGES ASSIGNING <WAMESSAGE>. 6940 AT NEW ARBGB. 6941 WATREEDISPLAY-TLEVEL = '2'. 6942 WATREEDISPLAY-TEXT2 = <WAMESSAGE>-ARBGB. 6943 WATREEDISPLAY-TCOLOR2 = 5. 6944 WATREEDISPLAY-TLENGTH3 = 80. 6945 WATREEDISPLAY-TCOLOR3 = 5. 6946 WATREEDISPLAY-TPOS3 = 60. 6947 WATREEDISPLAY-TEXT3 = <WAMESSAGE>-STEXT. 6948 CONCATENATE 'Message class:' WATREEDISPLAY-TEXT3 INTO WATREEDISPLAY-TEXT3 SEPARATED BY SPACE. 6949 APPEND WATREEDISPLAY TO ILOCTREEDISPLAY. 6950 ENDAT. 6951 ENDLOOP. 6952 ENDFORM. "fillTreeNodeMessages 6953 6954 *---------------------------------------------------------------------------------------------------------------------- 6955 * fillTreeNodeFunctions... 6956 *---------------------------------------------------------------------------------------------------------------------- 6957 FORM FILLTREENODEFUNCTIONS USING ILOCFUNCTIONS LIKE IFUNCTIONS[] 6958 ILOCTREEDISPLAY LIKE ITREEDISPLAY[] 6959 VALUE(RUNTIME). 6960 6961 DATA: TABLELINES TYPE I. 6962 DATA: WATREEDISPLAY LIKE SNODETEXT. 6963 FIELD-SYMBOLS: <WAFUNCTION> TYPE TFUNCTION. 6964 FIELD-SYMBOLS: <WASCREEN> TYPE TSCREENFLOW. 6965 FIELD-SYMBOLS: <WAGUITITLE> TYPE TGUITITLE. 6966 FIELD-SYMBOLS: <WADICTIONARY> TYPE TDICTTABLE. 6967 FIELD-SYMBOLS: <WAINCLUDE> TYPE TINCLUDE. 6968 FIELD-SYMBOLS: <WAMESSAGE> TYPE TMESSAGE. 6969 DATA: TABLELINESSTRING TYPE STRING. 6970 DATA: RUNTIMECHAR(10). 6971 6972 SORT ILOCFUNCTIONS ASCENDING BY FUNCTIONNAME. 6973 6974 TABLELINES = LINES( ILOCFUNCTIONS ). 6975 TABLELINESSTRING = TABLELINES. 6976 6977 IF TABLELINES = 1. 6978 CONCATENATE TABLELINESSTRING ` function downloaded` INTO WATREEDISPLAY-TEXT2. 6979 ELSE. 6980 CONCATENATE TABLELINESSTRING ` functions downloaded` INTO WATREEDISPLAY-TEXT2. 6981 ENDIF. 6982 6983 WRITE RUNTIME TO RUNTIMECHAR. 6984 6985 CONCATENATE WATREEDISPLAY-TEXT2 ` - runtime ` RUNTIMECHAR INTO WATREEDISPLAY-TEXT2. 6986 * include header display record. 6987 WATREEDISPLAY-TLEVEL = '1'. 6988 WATREEDISPLAY-TLENGTH2 = 60. 6989 WATREEDISPLAY-TCOLOR2 = 1. 6990 APPEND WATREEDISPLAY TO ILOCTREEDISPLAY. 6991 6992 * Lets fill the detail in 6993 LOOP AT ILOCFUNCTIONS ASSIGNING <WAFUNCTION>. 6994 WATREEDISPLAY-TLEVEL = 2. 6995 WATREEDISPLAY-TEXT2 = <WAFUNCTION>-FUNCTIONNAME. 6996 WATREEDISPLAY-TCOLOR2 = 7. 6997 WATREEDISPLAY-TLENGTH3 = 80. 6998 WATREEDISPLAY-TCOLOR3 = 7. 6999 WATREEDISPLAY-TPOS3 = 60. 7000 CONCATENATE `Function: ` <WAFUNCTION>-FUNCTIONNAME INTO WATREEDISPLAY-TEXT3. 7001 APPEND WATREEDISPLAY TO ILOCTREEDISPLAY. 7002 7003 * Screens. 7004 LOOP AT <WAFUNCTION>-ISCREENFLOW ASSIGNING <WASCREEN>. 7005 WATREEDISPLAY-TLEVEL = '2'. 7006 WATREEDISPLAY-TEXT2 = <WASCREEN>-SCREEN. 7007 WATREEDISPLAY-TCOLOR2 = 6. 7008 WATREEDISPLAY-TLENGTH3 = 80. 7009 WATREEDISPLAY-TCOLOR3 = 6. 7010 WATREEDISPLAY-TPOS3 = 60. 7011 WATREEDISPLAY-TEXT3 = 'Screen'. 7012 APPEND WATREEDISPLAY TO ITREEDISPLAY. 7013 ENDLOOP. 7014 7015 * GUI Title. 7016 LOOP AT <WAFUNCTION>-IGUITITLE ASSIGNING <WAGUITITLE>. 7017 WATREEDISPLAY-TLEVEL = '2'. 7018 WATREEDISPLAY-TEXT2 = <WAGUITITLE>-OBJ_CODE. 7019 WATREEDISPLAY-TCOLOR2 = 6. 7020 WATREEDISPLAY-TLENGTH3 = 80. 7021 WATREEDISPLAY-TCOLOR3 = 6. 7022 WATREEDISPLAY-TPOS3 = 60. 7023 WATREEDISPLAY-TEXT3 = 'GUI Title'. 7024 APPEND WATREEDISPLAY TO ITREEDISPLAY. 7025 ENDLOOP. 7026 7027 * Fill in the tree with include information 7028 LOOP AT <WAFUNCTION>-IINCLUDES ASSIGNING <WAINCLUDE>. 7029 WATREEDISPLAY-TLEVEL = 3. 7030 WATREEDISPLAY-TEXT2 = <WAINCLUDE>-INCLUDENAME. 7031 WATREEDISPLAY-TCOLOR2 = 4. 7032 WATREEDISPLAY-TLENGTH3 = 80. 7033 WATREEDISPLAY-TCOLOR3 = 4. 7034 WATREEDISPLAY-TPOS3 = 60. 7035 CONCATENATE `Include: ` <WAINCLUDE>-INCLUDETITLE INTO WATREEDISPLAY-TEXT3. 7036 APPEND WATREEDISPLAY TO ILOCTREEDISPLAY. 7037 ENDLOOP. 7038 7039 * fill in the tree with dictionary information 7040 LOOP AT <WAFUNCTION>-IDICTSTRUCT ASSIGNING <WADICTIONARY>. 7041 WATREEDISPLAY-TLEVEL = 3. 7042 WATREEDISPLAY-TEXT2 = <WADICTIONARY>-TABLENAME. 7043 WATREEDISPLAY-TCOLOR2 = 3. 7044 WATREEDISPLAY-TLENGTH3 = 80. 7045 WATREEDISPLAY-TCOLOR3 = 3. 7046 WATREEDISPLAY-TPOS3 = 60. 7047 CONCATENATE `Dictionary:` <WADICTIONARY>-TABLETITLE INTO WATREEDISPLAY-TEXT3. 7048 APPEND WATREEDISPLAY TO ILOCTREEDISPLAY. 7049 ENDLOOP. 7050 7051 * fill in the tree with message information 7052 SORT <WAFUNCTION>-IMESSAGES[] ASCENDING BY ARBGB. 7053 LOOP AT <WAFUNCTION>-IMESSAGES ASSIGNING <WAMESSAGE>. 7054 AT NEW ARBGB. 7055 WATREEDISPLAY-TLEVEL = 3. 7056 WATREEDISPLAY-TEXT2 = <WAMESSAGE>-ARBGB. 7057 WATREEDISPLAY-TCOLOR2 = 5. 7058 WATREEDISPLAY-TLENGTH3 = 80. 7059 WATREEDISPLAY-TCOLOR3 = 5. 7060 WATREEDISPLAY-TPOS3 = 60. 7061 7062 * Select the message class text if we do not have it already 7063 IF <WAMESSAGE>-STEXT IS INITIAL. 7064 SELECT SINGLE STEXT FROM T100A 7065 INTO <WAMESSAGE>-STEXT 7066 WHERE ARBGB = <WAMESSAGE>-ARBGB. 7067 ENDIF. 7068 7069 WATREEDISPLAY-TEXT3 = <WAMESSAGE>-STEXT. 7070 CONCATENATE `Message class: ` WATREEDISPLAY-TEXT3 INTO WATREEDISPLAY-TEXT3. 7071 APPEND WATREEDISPLAY TO ILOCTREEDISPLAY. 7072 ENDAT. 7073 ENDLOOP. 7074 ENDLOOP. 7075 ENDFORM. "fillTreeNodeFunctions 7076 7077 *---------------------------------------------------------------------------------------------------------------------- 7078 * fillTreeNodePrograms 7079 *---------------------------------------------------------------------------------------------------------------------- 7080 FORM FILLTREENODEPROGRAMS USING ILOCPROGRAMS LIKE IPROGRAMS[] 7081 ILOCFUNCTIONS LIKE IFUNCTIONS[] 7082 ILOCTREEDISPLAY LIKE ITREEDISPLAY[] 7083 VALUE(RUNTIME). 7084 7085 DATA: TABLELINES TYPE I. 7086 DATA: WATREEDISPLAY LIKE SNODETEXT. 7087 FIELD-SYMBOLS: <WAPROGRAM> TYPE TPROGRAM. 7088 FIELD-SYMBOLS: <WASCREEN> TYPE TSCREENFLOW. 7089 FIELD-SYMBOLS: <WAFUNCTION> TYPE TFUNCTION. 7090 FIELD-SYMBOLS: <WADICTIONARY> TYPE TDICTTABLE. 7091 FIELD-SYMBOLS: <WAINCLUDE> TYPE TINCLUDE. 7092 FIELD-SYMBOLS: <WAMESSAGE> TYPE TMESSAGE. 7093 DATA: TABLELINESSTRING TYPE STRING. 7094 DATA: RUNTIMECHAR(10). 7095 7096 TABLELINES = LINES( ILOCPROGRAMS ). 7097 TABLELINESSTRING = TABLELINES. 7098 7099 IF TABLELINES = 1. 7100 CONCATENATE TABLELINESSTRING ` program downloaded` INTO WATREEDISPLAY-TEXT2. 7101 ELSE. 7102 CONCATENATE TABLELINESSTRING ` programs downloaded` INTO WATREEDISPLAY-TEXT2. 7103 ENDIF. 7104 7105 WRITE RUNTIME TO RUNTIMECHAR. 7106 7107 CONCATENATE WATREEDISPLAY-TEXT2 ` - runtime ` RUNTIMECHAR INTO WATREEDISPLAY-TEXT2. 7108 * include header display record. 7109 WATREEDISPLAY-TLEVEL = '1'. 7110 WATREEDISPLAY-TLENGTH2 = 60. 7111 WATREEDISPLAY-TCOLOR2 = 1. 7112 APPEND WATREEDISPLAY TO ITREEDISPLAY. 7113 7114 LOOP AT ILOCPROGRAMS ASSIGNING <WAPROGRAM>. 7115 * Main programs. 7116 WATREEDISPLAY-TLEVEL = '2'. 7117 WATREEDISPLAY-TEXT2 = <WAPROGRAM>-PROGNAME. 7118 WATREEDISPLAY-TCOLOR2 = 1. 7119 * Description 7120 WATREEDISPLAY-TLENGTH3 = 80. 7121 WATREEDISPLAY-TCOLOR3 = 1. 7122 WATREEDISPLAY-TPOS3 = 60. 7123 CONCATENATE `Program: ` <WAPROGRAM>-PROGRAMTITLE INTO WATREEDISPLAY-TEXT3. 7124 APPEND WATREEDISPLAY TO ITREEDISPLAY. 7125 * Screens. 7126 LOOP AT <WAPROGRAM>-ISCREENFLOW ASSIGNING <WASCREEN>. 7127 WATREEDISPLAY-TLEVEL = '3'. 7128 WATREEDISPLAY-TEXT2 = <WASCREEN>-SCREEN. 7129 WATREEDISPLAY-TCOLOR2 = 6. 7130 WATREEDISPLAY-TLENGTH3 = 80. 7131 WATREEDISPLAY-TCOLOR3 = 6. 7132 WATREEDISPLAY-TPOS3 = 60. 7133 WATREEDISPLAY-TEXT3 = 'Screen'. 7134 APPEND WATREEDISPLAY TO ITREEDISPLAY. 7135 ENDLOOP. 7136 * fill in the tree with message information 7137 SORT <WAPROGRAM>-IMESSAGES[] ASCENDING BY ARBGB. 7138 LOOP AT <WAPROGRAM>-IMESSAGES ASSIGNING <WAMESSAGE>. 7139 AT NEW ARBGB. 7140 WATREEDISPLAY-TLEVEL = 3. 7141 WATREEDISPLAY-TEXT2 = <WAMESSAGE>-ARBGB. 7142 WATREEDISPLAY-TCOLOR2 = 5. 7143 WATREEDISPLAY-TLENGTH3 = 80. 7144 WATREEDISPLAY-TCOLOR3 = 5. 7145 WATREEDISPLAY-TPOS3 = 60. 7146 7147 * Select the message class text if we do not have it already 7148 IF <WAMESSAGE>-STEXT IS INITIAL. 7149 SELECT SINGLE STEXT FROM T100A 7150 INTO <WAMESSAGE>-STEXT 7151 WHERE ARBGB = <WAMESSAGE>-ARBGB. 7152 ENDIF. 7153 7154 WATREEDISPLAY-TEXT3 = <WAMESSAGE>-STEXT. 7155 CONCATENATE `Message class: ` WATREEDISPLAY-TEXT3 INTO WATREEDISPLAY-TEXT3. 7156 APPEND WATREEDISPLAY TO ILOCTREEDISPLAY. 7157 ENDAT. 7158 ENDLOOP. 7159 * Fill in the tree with include information 7160 LOOP AT <WAPROGRAM>-IINCLUDES ASSIGNING <WAINCLUDE>. 7161 WATREEDISPLAY-TLEVEL = 3. 7162 WATREEDISPLAY-TEXT2 = <WAINCLUDE>-INCLUDENAME. 7163 WATREEDISPLAY-TCOLOR2 = 4. 7164 WATREEDISPLAY-TLENGTH3 = 80. 7165 WATREEDISPLAY-TCOLOR3 = 4. 7166 WATREEDISPLAY-TPOS3 = 60. 7167 CONCATENATE `Include: ` <WAINCLUDE>-INCLUDETITLE INTO WATREEDISPLAY-TEXT3. 7168 APPEND WATREEDISPLAY TO ILOCTREEDISPLAY. 7169 ENDLOOP. 7170 * fill in the tree with dictionary information 7171 LOOP AT <WAPROGRAM>-IDICTSTRUCT ASSIGNING <WADICTIONARY>. 7172 WATREEDISPLAY-TLEVEL = 3. 7173 WATREEDISPLAY-TEXT2 = <WADICTIONARY>-TABLENAME. 7174 WATREEDISPLAY-TCOLOR2 = 3. 7175 WATREEDISPLAY-TLENGTH3 = 80. 7176 WATREEDISPLAY-TCOLOR3 = 3. 7177 WATREEDISPLAY-TPOS3 = 60. 7178 CONCATENATE `Dictionary: ` <WADICTIONARY>-TABLETITLE INTO WATREEDISPLAY-TEXT3. 7179 APPEND WATREEDISPLAY TO ILOCTREEDISPLAY. 7180 ENDLOOP. 7181 7182 * Function Modules 7183 LOOP AT ILOCFUNCTIONS ASSIGNING <WAFUNCTION> WHERE PROGRAMLINKNAME = <WAPROGRAM>-PROGNAME. 7184 WATREEDISPLAY-TLEVEL = 3. 7185 WATREEDISPLAY-TEXT2 = <WAFUNCTION>-FUNCTIONNAME. 7186 WATREEDISPLAY-TCOLOR2 = 7. 7187 WATREEDISPLAY-TLENGTH3 = 80. 7188 WATREEDISPLAY-TCOLOR3 = 7. 7189 WATREEDISPLAY-TPOS3 = 60. 7190 CONCATENATE `Function: ` <WAFUNCTION>-FUNCTIONNAME INTO WATREEDISPLAY-TEXT3. 7191 APPEND WATREEDISPLAY TO ILOCTREEDISPLAY. 7192 7193 * Fill in the tree with include information 7194 LOOP AT <WAFUNCTION>-IINCLUDES ASSIGNING <WAINCLUDE>. 7195 WATREEDISPLAY-TLEVEL = 4. 7196 WATREEDISPLAY-TEXT2 = <WAINCLUDE>-INCLUDENAME. 7197 WATREEDISPLAY-TCOLOR2 = 4. 7198 WATREEDISPLAY-TLENGTH3 = 80. 7199 WATREEDISPLAY-TCOLOR3 = 4. 7200 WATREEDISPLAY-TPOS3 = 60. 7201 CONCATENATE `Include: ` <WAINCLUDE>-INCLUDETITLE INTO WATREEDISPLAY-TEXT3. 7202 APPEND WATREEDISPLAY TO ILOCTREEDISPLAY. 7203 ENDLOOP. 7204 7205 * fill in the tree with dictionary information 7206 LOOP AT <WAFUNCTION>-IDICTSTRUCT ASSIGNING <WADICTIONARY>. 7207 WATREEDISPLAY-TLEVEL = 4. 7208 WATREEDISPLAY-TEXT2 = <WADICTIONARY>-TABLENAME. 7209 WATREEDISPLAY-TCOLOR2 = 3. 7210 WATREEDISPLAY-TLENGTH3 = 80. 7211 WATREEDISPLAY-TCOLOR3 = 3. 7212 WATREEDISPLAY-TPOS3 = 60. 7213 CONCATENATE `Dictionary: ` <WADICTIONARY>-TABLETITLE INTO WATREEDISPLAY-TEXT3. 7214 APPEND WATREEDISPLAY TO ILOCTREEDISPLAY. 7215 ENDLOOP. 7216 7217 * fill in the tree with message information 7218 SORT <WAFUNCTION>-IMESSAGES[] ASCENDING BY ARBGB. 7219 LOOP AT <WAFUNCTION>-IMESSAGES ASSIGNING <WAMESSAGE>. 7220 AT NEW ARBGB. 7221 WATREEDISPLAY-TLEVEL = 4. 7222 WATREEDISPLAY-TEXT2 = <WAMESSAGE>-ARBGB. 7223 WATREEDISPLAY-TCOLOR2 = 5. 7224 WATREEDISPLAY-TLENGTH3 = 80. 7225 WATREEDISPLAY-TCOLOR3 = 5. 7226 WATREEDISPLAY-TPOS3 = 60. 7227 7228 * Select the message class text if we do not have it already 7229 IF <WAMESSAGE>-STEXT IS INITIAL. 7230 SELECT SINGLE STEXT FROM T100A 7231 INTO <WAMESSAGE>-STEXT 7232 WHERE ARBGB = <WAMESSAGE>-ARBGB. 7233 ENDIF. 7234 7235 WATREEDISPLAY-TEXT3 = <WAMESSAGE>-STEXT. 7236 CONCATENATE `Message class: ` WATREEDISPLAY-TEXT3 INTO WATREEDISPLAY-TEXT3. 7237 APPEND WATREEDISPLAY TO ILOCTREEDISPLAY. 7238 ENDAT. 7239 ENDLOOP. 7240 ENDLOOP. 7241 ENDLOOP. 7242 ENDFORM. "fillTreeNodePrograms 7243 7244 *---------------------------------------------------------------------------------------------------------------------- 7245 * fillTreeNodeClasses 7246 *---------------------------------------------------------------------------------------------------------------------- 7247 FORM FILLTREENODECLASSES USING ILOCCLASSES LIKE ICLASSES[] 7248 ILOCFUNCTIONS LIKE IFUNCTIONS[] 7249 ILOCTREEDISPLAY LIKE ITREEDISPLAY[] 7250 VALUE(RUNTIME). 7251 7252 DATA: TABLELINES TYPE I. 7253 DATA: WATREEDISPLAY LIKE SNODETEXT. 7254 FIELD-SYMBOLS: <WACLASS> TYPE TCLASS. 7255 FIELD-SYMBOLS: <WAMETHOD> TYPE TMETHOD. 7256 FIELD-SYMBOLS: <WAFUNCTION> TYPE TFUNCTION. 7257 FIELD-SYMBOLS: <WADICTIONARY> TYPE TDICTTABLE. 7258 FIELD-SYMBOLS: <WAINCLUDE> TYPE TINCLUDE. 7259 FIELD-SYMBOLS: <WAMESSAGE> TYPE TMESSAGE. 7260 DATA: TABLELINESSTRING TYPE STRING. 7261 DATA: RUNTIMECHAR(10). 7262 7263 TABLELINES = LINES( ILOCCLASSES ). 7264 TABLELINESSTRING = TABLELINES. 7265 7266 IF TABLELINES = 1. 7267 CONCATENATE TABLELINESSTRING ` class downloaded` INTO WATREEDISPLAY-TEXT2. 7268 ELSE. 7269 CONCATENATE TABLELINESSTRING ` classes downloaded` INTO WATREEDISPLAY-TEXT2. 7270 ENDIF. 7271 7272 WRITE RUNTIME TO RUNTIMECHAR. 7273 7274 CONCATENATE WATREEDISPLAY-TEXT2 ` - runtime ` RUNTIMECHAR INTO WATREEDISPLAY-TEXT2. 7275 * include header display record. 7276 WATREEDISPLAY-TLEVEL = '1'. 7277 WATREEDISPLAY-TLENGTH2 = 60. 7278 WATREEDISPLAY-TCOLOR2 = 1. 7279 APPEND WATREEDISPLAY TO ITREEDISPLAY. 7280 7281 LOOP AT ILOCCLASSES ASSIGNING <WACLASS>. 7282 * Main Class. 7283 WATREEDISPLAY-TLEVEL = '2'. 7284 WATREEDISPLAY-TEXT2 = <WACLASS>-CLSNAME. 7285 WATREEDISPLAY-TCOLOR2 = 1. 7286 * Description 7287 WATREEDISPLAY-TLENGTH3 = 80. 7288 WATREEDISPLAY-TCOLOR3 = 1. 7289 WATREEDISPLAY-TPOS3 = 60. 7290 CONCATENATE `Class: ` <WACLASS>-DESCRIPT INTO WATREEDISPLAY-TEXT3. 7291 APPEND WATREEDISPLAY TO ITREEDISPLAY. 7292 7293 * fill in the tree with method information 7294 LOOP AT <WACLASS>-IMETHODS[] ASSIGNING <WAMETHOD>. 7295 WATREEDISPLAY-TLEVEL = 3. 7296 WATREEDISPLAY-TEXT2 = <WAMETHOD>-CMPNAME. 7297 WATREEDISPLAY-TCOLOR2 = 2. 7298 WATREEDISPLAY-TLENGTH3 = 80. 7299 WATREEDISPLAY-TCOLOR3 = 2. 7300 WATREEDISPLAY-TPOS3 = 60. 7301 CONCATENATE `Method: ` <WAMETHOD>-DESCRIPT INTO WATREEDISPLAY-TEXT3. 7302 APPEND WATREEDISPLAY TO ILOCTREEDISPLAY. 7303 ENDLOOP. 7304 7305 * fill in the tree with message information 7306 SORT <WACLASS>-IMESSAGES[] ASCENDING BY ARBGB. 7307 LOOP AT <WACLASS>-IMESSAGES ASSIGNING <WAMESSAGE>. 7308 AT NEW ARBGB. 7309 WATREEDISPLAY-TLEVEL = 3. 7310 WATREEDISPLAY-TEXT2 = <WAMESSAGE>-ARBGB. 7311 WATREEDISPLAY-TCOLOR2 = 5. 7312 WATREEDISPLAY-TLENGTH3 = 80. 7313 WATREEDISPLAY-TCOLOR3 = 5. 7314 WATREEDISPLAY-TPOS3 = 60. 7315 7316 * Select the message class text if we do not have it already 7317 IF <WAMESSAGE>-STEXT IS INITIAL. 7318 SELECT SINGLE STEXT FROM T100A 7319 INTO <WAMESSAGE>-STEXT 7320 WHERE ARBGB = <WAMESSAGE>-ARBGB. 7321 ENDIF. 7322 7323 WATREEDISPLAY-TEXT3 = <WAMESSAGE>-STEXT. 7324 CONCATENATE `Message class: ` WATREEDISPLAY-TEXT3 INTO WATREEDISPLAY-TEXT3. 7325 APPEND WATREEDISPLAY TO ILOCTREEDISPLAY. 7326 ENDAT. 7327 ENDLOOP. 7328 7329 * fill in the tree with dictionary information 7330 LOOP AT <WACLASS>-IDICTSTRUCT ASSIGNING <WADICTIONARY>. 7331 WATREEDISPLAY-TLEVEL = 3. 7332 WATREEDISPLAY-TEXT2 = <WADICTIONARY>-TABLENAME. 7333 WATREEDISPLAY-TCOLOR2 = 3. 7334 WATREEDISPLAY-TLENGTH3 = 80. 7335 WATREEDISPLAY-TCOLOR3 = 3. 7336 WATREEDISPLAY-TPOS3 = 60. 7337 CONCATENATE `Dictionary: ` <WADICTIONARY>-TABLETITLE INTO WATREEDISPLAY-TEXT3. 7338 APPEND WATREEDISPLAY TO ILOCTREEDISPLAY. 7339 ENDLOOP. 7340 7341 * Function Modules 7342 LOOP AT ILOCFUNCTIONS ASSIGNING <WAFUNCTION> WHERE PROGRAMLINKNAME = <WACLASS>-CLSNAME. 7343 WATREEDISPLAY-TLEVEL = 3. 7344 WATREEDISPLAY-TEXT2 = <WAFUNCTION>-FUNCTIONNAME. 7345 WATREEDISPLAY-TCOLOR2 = 7. 7346 WATREEDISPLAY-TLENGTH3 = 80. 7347 WATREEDISPLAY-TCOLOR3 = 7. 7348 WATREEDISPLAY-TPOS3 = 60. 7349 CONCATENATE `Function: ` <WAFUNCTION>-FUNCTIONNAME INTO WATREEDISPLAY-TEXT3. 7350 APPEND WATREEDISPLAY TO ILOCTREEDISPLAY. 7351 7352 * Fill in the tree with include information 7353 LOOP AT <WAFUNCTION>-IINCLUDES ASSIGNING <WAINCLUDE>. 7354 WATREEDISPLAY-TLEVEL = 4. 7355 WATREEDISPLAY-TEXT2 = <WAINCLUDE>-INCLUDENAME. 7356 WATREEDISPLAY-TCOLOR2 = 4. 7357 WATREEDISPLAY-TLENGTH3 = 80. 7358 WATREEDISPLAY-TCOLOR3 = 4. 7359 WATREEDISPLAY-TPOS3 = 60. 7360 CONCATENATE `Include: ` <WAINCLUDE>-INCLUDETITLE INTO WATREEDISPLAY-TEXT3. 7361 APPEND WATREEDISPLAY TO ILOCTREEDISPLAY. 7362 ENDLOOP. 7363 7364 * fill in the tree with dictionary information 7365 LOOP AT <WAFUNCTION>-IDICTSTRUCT ASSIGNING <WADICTIONARY>. 7366 WATREEDISPLAY-TLEVEL = 4. 7367 WATREEDISPLAY-TEXT2 = <WADICTIONARY>-TABLENAME. 7368 WATREEDISPLAY-TCOLOR2 = 3. 7369 WATREEDISPLAY-TLENGTH3 = 80. 7370 WATREEDISPLAY-TCOLOR3 = 3. 7371 WATREEDISPLAY-TPOS3 = 60. 7372 CONCATENATE `Dictionary: ` <WADICTIONARY>-TABLETITLE INTO WATREEDISPLAY-TEXT3. 7373 APPEND WATREEDISPLAY TO ILOCTREEDISPLAY. 7374 ENDLOOP. 7375 7376 * fill in the tree with message information 7377 SORT <WAFUNCTION>-IMESSAGES[] ASCENDING BY ARBGB. 7378 LOOP AT <WAFUNCTION>-IMESSAGES ASSIGNING <WAMESSAGE>. 7379 AT NEW ARBGB. 7380 WATREEDISPLAY-TLEVEL = 4. 7381 WATREEDISPLAY-TEXT2 = <WAMESSAGE>-ARBGB. 7382 WATREEDISPLAY-TCOLOR2 = 5. 7383 WATREEDISPLAY-TLENGTH3 = 80. 7384 WATREEDISPLAY-TCOLOR3 = 5. 7385 WATREEDISPLAY-TPOS3 = 60. 7386 7387 * Select the message class text if we do not have it already 7388 IF <WAMESSAGE>-STEXT IS INITIAL. 7389 SELECT SINGLE STEXT FROM T100A 7390 INTO <WAMESSAGE>-STEXT 7391 WHERE ARBGB = <WAMESSAGE>-ARBGB. 7392 ENDIF. 7393 7394 WATREEDISPLAY-TEXT3 = <WAMESSAGE>-STEXT. 7395 CONCATENATE `Message class: ` WATREEDISPLAY-TEXT3 INTO WATREEDISPLAY-TEXT3. 7396 APPEND WATREEDISPLAY TO ILOCTREEDISPLAY. 7397 ENDAT. 7398 ENDLOOP. 7399 ENDLOOP. 7400 ENDLOOP. 7401 ENDFORM. "fillTreeNodeClasses 7402 7403 *---------------------------------------------------------------------------------------------------------------------- 7404 * displayTree... 7405 *---------------------------------------------------------------------------------------------------------------------- 7406 FORM DISPLAYTREE USING ILOCTREEDISPLAY LIKE ITREEDISPLAY[]. 7407 7408 DATA: WATREEDISPLAY TYPE SNODETEXT. 7409 7410 * build up the tree from the internal table node 7411 CALL FUNCTION 'RS_TREE_CONSTRUCT' 7412 TABLES 7413 NODETAB = ITREEDISPLAY 7414 EXCEPTIONS 7415 TREE_FAILURE = 1 7416 ID_NOT_FOUND = 2 7417 WRONG_RELATIONSHIP = 3 7418 OTHERS = 4. 7419 7420 * get the first index and expand the whole tree 7421 READ TABLE ILOCTREEDISPLAY INTO WATREEDISPLAY INDEX 1. 7422 CALL FUNCTION 'RS_TREE_EXPAND' 7423 EXPORTING 7424 NODE_ID = WATREEDISPLAY-ID 7425 ALL = 'X' 7426 EXCEPTIONS 7427 NOT_FOUND = 1 7428 OTHERS = 2. 7429 7430 * now display the tree 7431 CALL FUNCTION 'RS_TREE_LIST_DISPLAY' 7432 EXPORTING 7433 CALLBACK_PROGRAM = SY-CPROG 7434 CALLBACK_USER_COMMAND = 'CB_USER_COMMAND' 7435 CALLBACK_TEXT_DISPLAY = 'CB_text_DISPLAY' 7436 CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE' 7437 EXCEPTIONS 7438 OTHERS = 1. 7439 ENDFORM. "displayTree 7440 7441 *---------------------------------------------------------------------------------------------------------------------- 7442 * topOfPage... for tree display routines. 7443 *---------------------------------------------------------------------------------------------------------------------- 7444 FORM TOPOFPAGE. 7445 7446 ENDFORM. 7447 7448 7449 *Messages 7450 *---------------------------------------------------------- 7451 * 7452 * Message class: OO 7453 *000 & & & & 7454 7455 ---------------------------------------------------------------------------------- 7456 Extracted by Direct Download Enterprise version 1.3.1 - E.G.Mellodew. 1998-2005 UK. Sap Release 740

 

 posted on 2016-03-16 12:09  Aerodynamics  阅读(2894)  评论(0编辑  收藏  举报