Code for Downloading Programs

Embed Size (px)

Citation preview

*&---------------------------------------------------------------------* *& Report ZZSOLPROD *& *&---------------------------------------------------------------------* *& Beliebig langer Pfadname *& *&--------------------------------------------------------------------* REPORT ZZSOLPROD LINE-SIZE 255. ************************************************ *Constant for length of field "Existing Path" CONSTANTS c_path_length TYPE i VALUE 200. ************************************************ ******Variablen fuer Selektionsbildschirme *Transaktionscodes DATA: tacode TYPE tstc. *Namen von Funktionsgruppen DATA: fktgroup TYPE tlibg-area. *Klassen und Interfaces DATA: class TYPE vseoclass-clsname. *Entwicklungsklassen DATA devcl TYPE tadir-devclass. *Definition fuer Selektion ueber Transportauftraege DATA: trkorr TYPE e071-trkorr. *Definition fuer Badi-Implementierung DATA: badi_imp TYPE sxc_attr-imp_name. *Definition fuer Kundenerweiterungsprojekte DATA: wa_cmod TYPE modact. *Definition fuer IDOCs *Definition ueberi Tables-Anweisung wegen Suchhilfe TABLES: sed5struc. *IAC-Service TABLES: iachtml. *Modifikationselemente DATA: modiname TYPE smodilog-sub_name. *Tabellen mit den Includeobjekten DATA: it_trdir TYPE TABLE OF trdir, wa_trdir LIKE LINE OF it_trdir. DATA: report_name TYPE reposrc-progname. *Sprachenfeld DATA: language TYPE t002c-spras. ************************************************ *** Selektionsbildschirm. ************************************************ *Startselektionsbildschirm SELECTION-SCREEN BEGIN OF BLOCK b80 WITH FRAME TITLE text059. PARAMETERS: p_single RADIOBUTTON GROUP g0. PARAMETERS: p_trkorr RADIOBUTTON GROUP g0. PARAMETERS: p_devc RADIOBUTTON GROUP g0. SELECTION-SCREEN END OF BLOCK b80. *Sonstige Selektionsparameter PARAMETERS: p_nspace TYPE namespace.

SELECTION-SCREEN SKIP 1. *PARAMETERS: pfad(7) TYPE c DEFAULT 'C:\temp'. PARAMETERS: pfad(c_path_length) TYPE c DEFAULT 'C:\temp'. SELECT-OPTIONS: o_lan FOR language DEFAULT sy-langu NO INTERVALS. *Selektionsbildschirm fuer Selektion ueber den Transportauftrag SELECTION-SCREEN BEGIN OF SCREEN 100. SELECTION-SCREEN BEGIN OF BLOCK b0 WITH FRAME TITLE text057. SELECT-OPTIONS: o_trkorr FOR trkorr NO INTERVALS. SELECTION-SCREEN END OF BLOCK b0. SELECTION-SCREEN END OF SCREEN 100. *Selektionsbildschrim fuer die Selektion ueber die Entwicklungsklasse SELECTION-SCREEN BEGIN OF SCREEN 101. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text052. SELECT-OPTIONS: o_devcl FOR devcl NO INTERVALS. SELECTION-SCREEN END OF BLOCK b1. SELECTION-SCREEN END OF SCREEN 101. *Selektionsbildschirm fuer die Selektion von einzelnen Objekten *und Selektion einer logischen Entwicklung SELECTION-SCREEN BEGIN OF SCREEN 102. PARAMETERS: p_logic(10) TYPE c. SELECTION-SCREEN SKIP 2. SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text069. * Rahmenprogramme, Modulpoole SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text040. SELECT-OPTIONS: o_prog FOR report_name NO INTERVALS. SELECTION-SCREEN END OF BLOCK b2. *Transaktion SELECTION-SCREEN BEGIN OF BLOCK b2a WITH FRAME TITLE text070. SELECT-OPTIONS: o_tcode FOR tacode-tcode NO INTERVALS. SELECTION-SCREEN END OF BLOCK b2a. * Funktionsgruppen SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text041. SELECT-OPTIONS: o_fkgrp FOR fktgroup NO INTERVALS. SELECTION-SCREEN END OF BLOCK b3. * Klassen, Classpools SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text042. SELECT-OPTIONS: o_class FOR class NO INTERVALS. SELECTION-SCREEN END OF BLOCK b4. * Interfaces SELECTION-SCREEN BEGIN OF BLOCK b4a WITH FRAME TITLE text067. SELECT-OPTIONS: o_intf FOR class NO INTERVALS. SELECTION-SCREEN END OF BLOCK b4a. * IDOC's * Funktionsgruppen SELECTION-SCREEN BEGIN OF BLOCK b5 WITH FRAME TITLE text048. SELECT-OPTIONS: o_idoc FOR sed5struc-object NO INTERVALS. PARAMETERS: p_basis LIKE sed5struc-select_org RADIOBUTTON GROUP g1. PARAMETERS: p_enh LIKE sed5struc-select_ext RADIOBUTTON GROUP g1. SELECTION-SCREEN END OF BLOCK b5.

* *Kundenerweiterungsprojekte: CMOD SELECTION-SCREEN BEGIN OF BLOCK b6 WITH FRAME TITLE text049. SELECT-OPTIONS o_cmod FOR wa_cmod-name NO INTERVALS. SELECTION-SCREEN END OF BLOCK b6. * *Badiimplementierungen SELECTION-SCREEN BEGIN OF BLOCK b7 WITH FRAME TITLE text054. SELECT-OPTIONS o_badis FOR badi_imp NO INTERVALS. SELECTION-SCREEN END OF BLOCK b7. * Modifikationen SELECTION-SCREEN BEGIN OF BLOCK b8 WITH FRAME TITLE text068. SELECT-OPTIONS o_inc FOR modiname NO INTERVALS. SELECT-OPTIONS o_func FOR modiname NO INTERVALS. SELECT-OPTIONS o_dynp FOR modiname NO INTERVALS. SELECTION-SCREEN END OF BLOCK b8. * IAC-Service SELECTION-SCREEN BEGIN OF BLOCK b9 WITH FRAME TITLE text062. SELECT-OPTIONS o_iacs FOR iachtml-service NO INTERVALS. SELECTION-SCREEN END OF BLOCK b9. SELECTION-SCREEN END OF BLOCK b. SELECTION-SCREEN END OF SCREEN 102. ************************************************ *******Datendeklarationen ************************************************ *Praefixe fuer Downloaddateinamen CONSTANTS: ci(4) VALUE 'IN_', "Filename fr Includes cr(3) VALUE 'R_', "Filename fr Onlineprogramme cl(4) VALUE 'OL_', "Objektliste ct(4) VALUE 'TAB_', "Tables cv(5) VALUE 'View_', "View cst(4) VALUE 'STR_', "Strukturen cap(4) VALUE 'App_', "Appends ca(4) VALUE 'AL_', "alle Programme/Includes cs(4) VALUE 'SC_', "Filename fr Screens cte(4) VALUE 'TE_', "Textelemnte ctg(4) VALUE 'TGR_', "Typgruppen ccl(5) VALUE 'CLIN_', "Klassenincludes cint(5) VALUE 'Intf_', "Interfaceincludes eint(5) VALUE 'Enh_', "Enhancementinclude cfunc(5) VALUE 'Func_'. "einzelner Funktionsbaustein *** Namensraum DATA: g_name(11) g_savename DATA: g_nspace DATA: g_len_nspace TYPE TYPE TYPE TYPE c, string. string. i.

*interne Tabelle und Arbeitsbereich fuer Sprache DATA: it_lan TYPE STANDARD TABLE OF t002c-spras, wa_lan LIKE LINE OF it_lan. *Einbindung des Typepools damit das kopierte Coding fuer die Bearbeitung *der IDOC's funktioniert.

TYPE-POOLS ledid. *Type fuer Tabelle mit Includename TYPES: BEGIN OF include, name TYPE trdir-name, END OF include. TYPES: includetab TYPE STANDARD TABLE OF include. *Typ fuer Performtabelle TYPES: performtab TYPE STANDARD TABLE OF string. *Tabllentype fr download-Tabelle FIELD-SYMBOLS: TYPE STANDARD TABLE. *Verzeichnisname beim Anlegen des Verzeichnisses des Rahmenprogramms FIELD-SYMBOLS TYPE ANY. *DATA: new_dir(128) TYPE c. DATA: new_dir TYPE string. *Bezugstabelle fuer Textpool-Parametertabelle DATA: it_textpool TYPE STANDARD TABLE OF textpool. *** Anzahl gefundener TRDIR-Stze (Anzahl der Rahmenprogramme) DATA: anz TYPE i. *** Antwort aus Popupabfrage, wenn mehr als 50 Rahmenprogramme DATA: answer. *Zwischenspeicherugng Pfad fuer Klassen OO *DATA: lcl_it_path TYPE STANDARD TABLE OF rlgrap-filename, DATA: lcl_it_path TYPE STANDARD TABLE OF string, lcl_wa_path LIKE LINE OF lcl_it_path. *Eindeutiger Identifizierer Installation + System DATA: instnr(30) TYPE c. *Sichern des Rootverzeichnisses fuer spaetere Zugriffe DATA: root TYPE string. *Fag,ob Verzeichnis bereits angelegt worden ist. DATA: direxists TYPE c. *Tabelle mit abhngigen Includes des jeweiligen Rahmenprogramms DATA: it_d010inc TYPE STANDARD TABLE OF d010inc, wa_d010inc LIKE LINE OF it_d010inc. *Tabelle mit abhngigen Includes des jeweiligen Rahmenprogramms DATA: it_d020s TYPE STANDARD TABLE OF d020s, wa_d020s LIKE LINE OF it_d020s. *Tabelle mit abhngigen Tabellen, Strukturen, Appends des jeweiligen *Rahmenprogramms DATA: it_d010tab TYPE STANDARD TABLE OF d010tab, wa_d010tab LIKE LINE OF it_d010tab. *Generische Tabelle zum Download von Includes *DATA: downtab TYPE STANDARD TABLE OF ababsource. DATA: "down_variable(255) type c, downtab LIKE STANDARD TABLE OF abaptxt255 ."down_variable. *String zum Schreiben der Ausgabeliste nach Download DATA: str_output TYPE string.

*Generischer Bezugsdatentyp fr includename DATA: c_includename(40) TYPE c. *Stckliste fr die Speicherung der Struktur des Rahmenprogramms TYPES: BEGIN OF prog_stueckliste, type TYPE string, "beliebige Laenge wegen sprechenden Namen name(75) TYPE c, "Laenge wegen zusammengesetzten Namen obername TYPE trdir-name, instnr LIKE instnr, file_name(75) TYPE c, "filename with replaced special chars END OF prog_stueckliste. *allgemeine Stueckliste DATA: it_prog_stueckliste TYPE STANDARD TABLE OF prog_stueckliste WITH NON-UNIQUE KEY name obername. DATA: wa_prog_stueckliste LIKE LINE OF it_prog_stueckliste. *spezielle Stueckliste fuer logische Entwicklung DATA: it_log_stueckliste TYPE STANDARD TABLE OF prog_stueckliste, wa_log_stueckliste LIKE LINE OF it_log_stueckliste. *Tabelle fr Strukturinformationen ber Funktionsgruppen. *Includename und wenn Fktbaustein, auch dessen Namen. *Die Name der Fktgruppe wird im Dateinamen festgehalten TYPES: BEGIN OF fkgrp_struktur, objecttype(20) TYPE c, objectname(75) TYPE c, "wegen zsammengesetzten Namen fktbstname TYPE tfdir-funcname, file_objectname(75) TYPE c, END OF fkgrp_struktur. DATA: it_fkgrp_struktur TYPE STANDARD TABLE OF fkgrp_struktur, wa_fkgrp_struktur LIKE LINE OF it_fkgrp_struktur. *** Dateiname fr den Download *DATA: filename LIKE rlgrap-filename. DATA: filename TYPE string. *** Dateigrsse des Donwloads DATA: size TYPE i. *Workarea fuer dd02l -->Bestimmung der Tabellentypen DATA: wa_ddictypes TYPE dd02l. *Bereiche fuer die Verarbeitung der Datenelemente DATA: it_dataelements TYPE STANDARD TABLE OF dd04v, wa_dataelements LIKE LINE OF it_dataelements. *Typ, der nur sinnvolle Informationen ber Datenelemente TYPES: BEGIN OF idd04v, rollname TYPE dd04v-rollname, ddlanguage TYPE dd04v-ddlanguage, domname TYPE dd04v-domname, memoryid TYPE dd04v-memoryid, logflag TYPE dd04v-logflag, headlen TYPE dd04v-headlen, scrlen1 TYPE dd04v-scrlen1, scrlen2 TYPE dd04v-scrlen2,

scrlen3 TYPE dd04v-scrlen3, ddtext TYPE dd04v-ddtext, reptext TYPE dd04v-reptext, scrtext_s TYPE dd04v-scrtext_s, scrtext_m TYPE dd04v-scrtext_m, scrtext_l TYPE dd04v-scrtext_l, actflag TYPE dd04v-actflag, shlpname TYPE dd04v-shlpname, shlpfield TYPE dd04v-shlpfield, END OF idd04v. *Bereiche fuer die Verarbeitung der Domaenen DATA: it_dd01v TYPE STANDARD TABLE OF dd01v, wa_dd01v LIKE LINE OF it_dd01v, it_dd07v TYPE STANDARD TABLE OF dd07v, wa_dd07v LIKE LINE OF it_dd07v. *Typ fuer Aussagefhigelder Felder fuer Menuexitcodes TYPES: BEGIN OF icuatexts, prog TYPE cuatexts-prog, code TYPE cuatexts-code, sprsl TYPE cuatexts-sprsl, l_text TYPE cuatexts-l_text, s_text TYPE cuatexts-s_text, info_text TYPE cuatexts-info_text, icon_name TYPE cuatexts-icon_name, END OF icuatexts. *Gesamttabelle fuer Messages DATA: it_messages TYPE STANDARD TABLE OF t100 WITH NON-UNIQUE KEY sprsl arbgb msgnr, wa_messages LIKE LINE OF it_messages. *Feststellen, ob Includedownload erfolgreich war DATA: ok TYPE c. *globale Tabelle der Tabellentypen: Sammlung fuer Downlaod DATA: it_tabletypes TYPE STANDARD TABLE OF dd40vv, wa_tabletypes LIKE LINE OF it_tabletypes. *Typ der nur die wichtigen Infos zu Tabellentyp enthlt TYPES: BEGIN OF itabletypes, typename TYPE dd40vv-typename, rowtype TYPE dd40vv-rowtype, rowkind TYPE string, datatype TYPE dd40vv-datatype, leng TYPE dd40vv-leng, decimals TYPE dd40vv-decimals, accessmode TYPE string, keydef TYPE string, keykind TYPE string, generic TYPE dd40vv-generic, END OF itabletypes. *Typ fuer Schluesselfelder von Tabellentypen TYPES: BEGIN OF idd42s, keyfdpos TYPE dd42s-keyfdpos, keyfield TYPE dd42s-keyfield, END OF idd42s. *Tabelle fuer alle Tabellentypen TYPES: BEGIN OF all_tabletypes,

typename TYPE ddtypes-typename, END OF all_tabletypes. DATA: it_all_tabletypes TYPE STANDARD TABLE OF all_tabletypes. *Typ mit Joindedingungen im View TYPES: BEGIN OF idd28j, ltab TYPE dd28j-ltab, lfield TYPE dd28j-lfield, operator TYPE dd28j-operator, rtab TYPE dd28j-rtab, rfield TYPE dd28j-rfield, END OF idd28j. *Typ mit wichtigen Selektionsbedingungen fuer Views *(Basis Tabelle dd28s) TYPES: BEGIN OF idd28s, tabname TYPE dd28s-tabname, fieldname TYPE dd28s-fieldname, operator TYPE dd28s-operator, constants TYPE dd28s-constants, END OF idd28s. *Typ mit wichtigen Felder der Viewfeler *(Basis: dd27s) TYPES: BEGIN OF idd27s, viewfield TYPE dd27s-viewfield, tabname TYPE dd27s-tabname, fieldname TYPE dd27s-fieldname, END OF idd27s. *Uebersicht der Berechtigungsobjekte DATA: it_tobj TYPE STANDARD TABLE OF tobj, wa_tobj LIKE LINE OF it_tobj. *Aktivitaeten zu den Berichtigungsobjekten DATA: it_tactz TYPE STANDARD TABLE OF tactz, wa_tactz LIKE LINE OF it_tactz. *Berechtigungsfelder DATA: it_authx TYPE STANDARD TABLE OF authx, wa_authx LIKE LINE OF it_authx. *Globale Bereiche fr Titlebars DATA: it_d347t TYPE STANDARD TABLE OF d347t, wa_d347t LIKE LINE OF it_d347t. *bersichtstabelle ber Zuordnung von Transaktionen *zu Programmen TYPES: BEGIN OF itstc, tcode TYPE tstc-tcode, pgmna TYPE tstc-pgmna , dypno TYPE tstc-dypno, END OF itstc. DATA: it_tstc TYPE STANDARD TABLE OF itstc, wa_tstc LIKE LINE OF it_tstc. *Transaktionscodetabelle fuer Klassen (Parmetertabelle) DATA: it_tstcp TYPE STANDARD TABLE OF tstcp, wa_tstcp LIKE LINE OF it_tstcp. *Globale Tabellen fr Menueaufbau Pfstatus

DATA: it_rsmpe_tree TYPE STANDARD TABLE OF rsmpe_tree, wa_rsmpe_tree LIKE LINE OF it_rsmpe_tree. *Globale Tabelle fr Functionkeys DATA: it_rsmpe_keys TYPE STANDARD TABLE OF rsmpe_keys, wa_rsme_keys LIKE LINE OF it_rsmpe_keys. *Variablen fr Klassenbehandlung *Flag fuer Ueberpruefung, ob Klasse vorliegt DATA: clintf(1) TYPE c. *Stckliste fr Klassenliste TYPES: BEGIN OF classlist, typus(20) TYPE c, inc TYPE trdir-name, meth TYPE tmdir-methodname , file_inc TYPE trdir-name, END OF classlist. DATA: it_classlist TYPE STANDARD TABLE OF classlist, wa_classlist LIKE LINE OF it_classlist. *Verarbeitung von verschachtelten Aufrufstrukturen TYPES: BEGIN OF collectmains, typus(4) TYPE c, mainname(40) TYPE c, END OF collectmains. DATA: it_collectmains TYPE STANDARD TABLE OF collectmains WITH NON-UNIQUE KEY mainname, wa_collectmains LIKE LINE OF it_collectmains. *Bereiche fuer Interface in einer Klass zu schreiben DATA: it_vseoimplem TYPE STANDARD TABLE OF vseoimplem, wa_vseoimplem LIKE LINE OF it_vseoimplem. *Bereiche fuer Dialogbausteine *1.) Zuordnung Dialogbaustein -> Modulpool; Gesamttabelle TYPES: BEGIN OF itdct, dnam TYPE tdct-dnam, prog TYPE tdct-prog, dynr TYPE tdct-dynr, END OF itdct. DATA: it_tdct TYPE STANDARD TABLE OF itdct, wa_tdct LIKE LINE OF it_tdct. *2.) Zuordnung der Parameter zu einem Funktionsbaustein; Gesamttabelle DATA: it_diapar TYPE STANDARD TABLE OF diapar, wa_diapar LIKE LINE OF it_diapar. *Bereiche fuer SET/GET Parameter; globale fuer jeweiliges Rahmenprogramm DATA: it_tpara TYPE STANDARD TABLE OF tpara, wa_tpara LIKE LINE OF it_tpara. *Bereiche fuer HTML-Tabellendatei (wird global fuer alle HTML-Dateien *definiert DATA: it_html TYPE STANDARD TABLE OF line, wa_html LIKE LINE OF it_html. *global table for ABAP.xsl DATA: it_abap_xsl TYPE STANDARD TABLE OF line. *global table for formate.css DATA: it_formate_css TYPE STANDARD TABLE OF line.

*global table for nav.xsl DATA: it_nav_xsl TYPE STANDARD TABLE OF line. *global table for table.xsl DATA: it_table_xsl TYPE STANDARD TABLE OF line. *global table for blank.xsl DATA: it_blank_xsl TYPE STANDARD TABLE OF line. *Datenobjekte fr XSL-Files DATA: it_xsl TYPE STANDARD TABLE OF line, wa_xsl LIKE LINE OF it_xsl. *Zusammenfassende Tabelle fuer Kunden erweiterungsprogjekt TYPES: BEGIN OF enhancecomp, sapenh TYPE modsap-name, comp TYPE modsap-member, typus(20) TYPE c, internal(50) TYPE c, file_internal(50) TYPE c, END OF enhancecomp. DATA: it_enhancecomp TYPE STANDARD TABLE OF enhancecomp, wa_enhancecomp LIKE LINE OF it_enhancecomp. *Tabelle fuer Selektion ueber Entwicklungsklasse DATA: it_tadir TYPE STANDARD TABLE OF tadir, wa_tadir LIKE LINE OF it_tadir. *interne Tabelle fuer Wertehilfe bei Modinamen DATA: BEGIN OF it_f4_modi OCCURS 0, name LIKE smodilog-sub_name, END OF it_f4_modi. *interne Tabelle fuer Wertehilfe bei Klassen DATA: BEGIN OF it_f4_class OCCURS 0, name LIKE vseoclass-clsname, END OF it_f4_class. *interne Tabelle fuer Wertehilfe bei Interfaces DATA: BEGIN OF it_f4_intf OCCURS 0, name LIKE vseointerf-clsname, END OF it_f4_intf. *intern Tabelle fuer Wertehilfe bei Badiimplementierung *interne Tabelle fuer Wertehilfe bei Enhancementprojekt DATA: BEGIN OF it_f4_cmod OCCURS 0, name LIKE modact-name, END OF it_f4_cmod. *intern Tabelle fuer Wertehilfe bei Badiimplementierung DATA: BEGIN OF it_f4_badiimp OCCURS 0, name LIKE sxc_attr-imp_name, END OF it_f4_badiimp. *globale tabelle um die heruntergeladenen Typgruppen von Customer*enhancements in die spezifische Enhancementstueckliste schreiben *zu koennen DATA: it_enh_d010inc TYPE STANDARD TABLE OF d010inc, wa_enh_d010inc LIKE LINE OF it_enh_d010inc. *Globale Tabelle um die heruntergeladenen Tabellen von Customer*enhancements in die spezifischen Enhancementstrueckliste schreiben *zu koennen

TYPES: BEGIN OF enh_d010tab, tabname TYPE d010tab-tabname, typus(4) TYPE c, END OF enh_d010tab. DATA: it_enh_d010tab TYPE STANDARD TABLE OF enh_d010tab, wa_enh_d010tab LIKE LINE OF it_enh_d010tab. *Globale Tabelle fuer Informationen von Menueexits DATA: it_cuatexts TYPE STANDARD TABLE OF cuatexts. *Tabelle fuer Rueckgabewert der ausprogrammierten F4-Hilfen DATA: it_rueck TYPE STANDARD TABLE OF ddshretval, wa_rueck LIKE LINE OF it_rueck. *Gesamttabelle einer Implementierung zur Uebersicht Badi zu *Implementierung und Filterparameter DATA: it_ges_sxc_exit TYPE STANDARD TABLE OF sxc_exit. *Typ fuer Dialogbausteine TYPES: BEGIN OF dialogmodule, header LIKE tdct, par LIKE diapar, END OF dialogmodule. *Bezugstabelle fur vseoclass DATA: it_vseoclass TYPE STANDARD TABLE OF vseoclass. *Typ zur Speicherung von Klassenhierarchien TYPES: BEGIN OF inheritance, sub TYPE vseoextend-clsname, super TYPE vseoextend-clsname, END OF inheritance. *Tabelle + Workarea fuer Vererbungshierachie DATA: it_inheritance TYPE STANDARD TABLE OF inheritance, wa_inheritance LIKE LINE OF it_inheritance. *Protokolltabelle fuer Ausgabe TYPES: BEGIN OF protocol, typus TYPE c, objtype(20) TYPE c, objname(50) TYPE c, * filename(128) TYPE c, filename TYPE string, END OF protocol. DATA: it_protocol TYPE STANDARD TABLE OF protocol, wa_protocol LIKE LINE OF it_protocol. *Variable zum Zusammenbauen der Ueberschrift *DATA: header(128) TYPE c. DATA: header TYPE string. *globale Tabelle fuer Haupttransportauftraege(Objekte haengen *an Unterauftraegen DATA: it_trkorr_ueber TYPE STANDARD TABLE OF e070-strkorr, wa_trkorr_ueber LIKE LINE OF it_trkorr_ueber.

*Struktur zum Sichern der globalen Tabellen eines Rahmenprogramms

TYPES: BEGIN OF global_save, type TYPE c, name LIKE wa_trdir-name, END OF global_save. *Bereiche zur Sicherung der globalen Tabellen eines Rahmenprogramms DATA: it_global_save TYPE STANDARD TABLE OF global_save, wa_global_save LIKE LINE OF it_global_save. *Arbeitsbereich zur temporaeren Speicherung der globalen Tabellen DATA: it_tmpgs TYPE STANDARD TABLE OF global_save, wa_tmpgs LIKE LINE OF it_tmpgs. *Returncode fuer Methodenaufruf Directory_Create DATA: rc TYPE i. *Variable fuer globalen Namen des uebergeordneten Objektes DATA: global_main_name LIKE wa_trdir-name. *interner Typ fuer Domaenenattribute, der nur die notwendigen *Werte enthaelt TYPES: BEGIN OF idd01v, domname TYPE dd01v-domname, ddlanguage TYPE dd01v-ddlanguage, datatype TYPE dd01v-datatype, leng TYPE dd01v-leng, outputlen TYPE dd01v-outputlen, decimals TYPE dd01v-decimals, lowercase TYPE dd01v-lowercase, signflag TYPE dd01v-signflag, valexi TYPE dd01v-valexi, entitytab TYPE dd01v-entitytab, convexit TYPE dd01v-convexit, ddtext TYPE dd01v-ddtext, END OF idd01v. *interner Typ fuer Domaenenfestwert, der nur die notwendigen *Werte enthaelt TYPES: BEGIN OF directory_list, dir TYPE string, END OF directory_list. DATA: it_directory_list TYPE STANDARD TABLE OF directory_list, wa_directory_list LIKE LINE OF it_directory_list. *globaler Verzeichnisname *DATA: dir TYPE rlgrap-filename. DATA: dir TYPE string. *Verzeichnisname fr Entwicklungsklassen *DATA: dc_path TYPE rlgrap-filename. DATA: dc_path TYPE string. *Verzeichnisname bei Transportauftraegen *DATA: tr_path TYPE rlgrap-filename. DATA: tr_path TYPE string.

*Typ fuer Liste der Oberobjekte bei Einzelselektion TYPES: BEGIN OF obj_list,

name TYPE string, END OF obj_list. *Bereiche fuer Liste der Einzelselektionen DATA: it_obj_list TYPE STANDARD TABLE OF obj_list, wa_obj_list LIKE LINE OF it_obj_list. *Variable fr Pfadsuche. FIELD-SYMBOLS: TYPE ANY. *Flag, ob Externe Programmaufe abgearbeitet werden DATA: extern TYPE c. *Typ fuer Wetehilfe von Domnen TYPES: BEGIN OF idd07v, domname TYPE dd07v-domname, valpos TYPE dd07v-valpos, ddlanguage TYPE dd07v-ddlanguage, domvalue_l TYPE dd07v-domvalue_l, domvalue_h TYPE dd07v-domvalue_h, ddtext TYPE dd07v-ddtext, END OF idd07v. *Versionstabelle fuer Hilfe der Modifikationen DATA: it_vrsd TYPE STANDARD TABLE OF vrsd, wa_vrsd LIKE LINE OF it_vrsd. *Zwischentabelle fuer Selektion aus smodilog TYPES: BEGIN OF such, sub_name TYPE smodilog-sub_name, END OF such. DATA: it_such TYPE STANDARD TABLE OF such, wa_such LIKE LINE OF it_such. *Tabelle zur Aufnahme der Verzeichnis *Typ fuer Tabelllen/View und Appendstrukturen, der nur die notwendigen *Informationen enthlt TYPES: BEGIN OF idd03p, tabname TYPE dd03p-tabname, fieldname TYPE dd03p-fieldname, shorttext TYPE dfies-fieldtext, position TYPE dd03p-position, keyflag TYPE dd03p-keyflag, mandatory TYPE dd03p-mandatory, rollname TYPE dd03p-rollname, checktable TYPE dd03p-checktable, adminfield TYPE dd03p-adminfield, reftable TYPE dd03p-reftable, precfield TYPE dd03p-precfield, notnull TYPE dd03p-notnull, datatype TYPE dd03p-datatype, leng TYPE dd03p-leng, decimals TYPE dd03p-decimals, END OF idd03p. *Variablen zur Belegung initialer Textelemente DATA: text001 TYPE string, text002 TYPE string, text003 TYPE string, text004 TYPE string, text005 TYPE string, text006 TYPE string,

text007 text008 text009 text010 text011 text012 text013 text014 text015 text016 text017 text018 text019 text020 text021 text022 text023 text024 text025 text026 text027 text028 text029 text030 text031 text032 text033 text034 text035 text036 text037 text038 text039 text043 text044 text045 text046 text047 text050 text051 text055 text056 text058 text060 text061 text066 text071 text072

TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE

string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string.

*Variablen zur Steuerung der Belegung der Selektionstexte DATA: program TYPE sy-cprog, it_tp TYPE STANDARD TABLE OF textpool, wa_tp LIKE LINE OF it_tp. DATA tp_flag(1) TYPE c. ************************************************ * *Initialisierungen ************************************************* INITIALIZATION.

*Belegung der Selektionstexte nach erstem Start program = sy-cprog. READ TEXTPOOL program INTO it_tp LANGUAGE sy-langu. DELETE it_tp WHERE entry = '' AND id = 'S'. READ TABLE it_tp INTO wa_tp WITH KEY key = 'O_LAN'. IF NOT wa_tp-entry = ' Documentation Language'. wa_tp-id = 'S'. wa_tp-key = 'O_IACS'. wa_tp-entry = ' IAC-Service(ITS)'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'O_LAN'. wa_tp-entry = ' Documentation Language'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'O_BADIS'. wa_tp-entry = ' Badi-Implementation'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'O_CLASS'. wa_tp-entry = ' Classes'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'O_CMOD'. wa_tp-entry = ' Enhancement Project'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'O_DEVCL'. wa_tp-entry = ' Developmentclass'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'O_DYNP'. wa_tp-entry = ' Dynpro'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'O_FKGRP'. wa_tp-entry = ' Functiongroups'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'O_FUNC'. wa_tp-entry = ' Functionmodule'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'O_IDOC'. wa_tp-entry = ' IDoc/Enhancement'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'O_INC'. wa_tp-entry = ' Include'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'O_INTF'. wa_tp-entry = ' Interface'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'O_PROG'. wa_tp-entry = ' Online-Program'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'O_TCODE'.

wa_tp-entry = ' Transactioncode'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'O_TRKORR'. wa_tp-entry = ' Transport-Request'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'PFAD'. wa_tp-entry = ' Existing path'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'P_APP1'. wa_tp-entry = ' Data-File auf App-Server'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'P_APP2'. wa_tp-entry = ' CO-File auf App-Server'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'P_ASC'. wa_tp-entry = ' Asci Mode'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'P_BASIS'. wa_tp-entry = ' Basistype'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'P_BIN'. wa_tp-entry = ' Binary Mode'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'P_DEVC'. wa_tp-entry = ' Selection via Developmentclass'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'P_DOWN'. wa_tp-entry = ' Download vom R/3-Server'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'P_ENH'. wa_tp-entry = ' Enhancement'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'P_FRONT'. wa_tp-entry = ' Verzeichnis WS'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'P_LOGIC'. wa_tp-entry = ' Logical Development'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'P_OVER'. wa_tp-entry = ' Bestehende Dat. beschr.'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'P_SINGLE'. wa_tp-entry = ' Selction via single Objects'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'P_TRFIL'.

wa_tp-entry = ' Handling of Transport Files'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'P_TRKOR1'. wa_tp-entry = ' Transportauftrag'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'P_TRKORR'. wa_tp-entry = ' Selection via Transportrequest'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'P_NSPACE'. wa_tp-entry = ' Namespace'. APPEND wa_tp TO it_tp. wa_tp-id = 'S'. wa_tp-key = 'P_UP'. wa_tp-entry = ' Upload zum R/3-Server'. APPEND wa_tp TO it_tp. INSERT TEXTPOOL program FROM it_tp LANGUAGE sy-langu. tp_flag = 'X'. *Stautusmeldung als Hinweis fuer Neustart MESSAGE i888(sabapdocu) WITH 'This is the first time you start this report.' 'After the next start the ' 'selectiontexts are initialized!'. ENDIF. *************************************************************** *Initialisierung der Bezeichnungsfelder; *Zum besseren Upload werden die Textelemente mit den Inhalten der *Variablen gefuellt, wenn die Textelemente nicht belegt sind. text001 ='SUBRC'(001). text002 = 'by reading object list for'(002). text003 = 'by write file'(003). text004 = 'saved as'(004). text005 = 'Continue ?'(005). text006 = 'More then 50 programs found.'(006). text007 = 'Information'(007). text008 = 'Object list'(008). text009 = 'Table/View'(009). text010 = 'Maininclude'(010). text011 = 'Include'(011). text012 = 'Objectlist'(012). text013 = 'not saved as'(013). text014 = 'Download error...'(013). text015 = 'Directory exists ?'(015). text016 = 'Summary'(016). text017 = 'Screen'(017). text018 = 'Textelements'(018). text019 = 'Parts List'(019). text020 = 'Messagetable'(020). text021 = 'Fktgroupstructure'(021). text022 = 'Dataelements'(022). text023 = 'DomainHeader'(023). text024 = 'DomainValues'(024). text025 = 'Typegroup'(025). text026 = 'Structure'(026). text027 = 'Append'(027). text028 = 'Directory exists Already'(028).

text029 text030 text031 text032 text033 text034 text035 text036 text037 text038 text039 text040 text041 text042 text043 text044 text045 text046 text047 text048 text049 text050 text051 text052 text054 text055 text056 text057 text058 text059 text060 text061 text062

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

'Yes for next Main-program!'(029). 'No for stop !'(030). 'Autthorityobjects'(031). 'Author. Acti'(032). 'Titlebar'(033). 'Tacodelist'(034). 'Menulist'(035). 'Functionkeylist'(036). 'Classinclude'(037). 'Interfaceinclude'(038). 'Classlist'(039). 'Reports / Modulepools'(040). 'Functiongroups'(041). 'Classes'(042). 'Dlgmd_to_Modpool_'(043). 'Dlgmoduleparams'(044). 'Patchlist'(045). 'Lockobject'(046). 'Set/Get-Parameter'(047). 'IDOC'(048). 'Customer Enhancements'(049). 'Enhancementinclude'(050). 'EnhOverview'(051). 'via Developmentclass'(052). 'Badi-Implementation'(054). 'BadiImpFilter'(055). 'Menuexitlist'(056). 'via Transport-Request'. 'Functionmodule'(058). 'Selection Method'(059). 'View'(060). 'Authorityfields'(061). 'IAC-Service(ITS)'(062).

text066 = 'Transport request does not exist in the source system'(066). text067 = 'Interfaces'(067). text068 = 'Modification'(068). text069 = 'Mainobjects of Workbench'(069). text070 = 'Transactioncode'(070). text071 = 'Messageclass'(071). text072 = 'Tabletype'(072). ************************************************ *F4-Hilfe fuer Wahl des Basisverzeichnis ************************************************* AT SELECTION-SCREEN ON VALUE-REQUEST FOR PFAD. *Dummyvariablen zur Zuweisung je nach Release DATA: lcl_char LIKE rlgrap-filename, lcl_string TYPE string. *Lngenbestimmung DATA: lcl_len TYPE i. *Bereich fuer Lesen der Parameter DATA: lcl_wa_vseoparam TYPE vseoparam. *Verarbeitung unterscheiden je nach Release: *Typisierung nach string oder char. *Pruefen wie der Parameter Directory der Methode typisiert ist

SELECT SINGLE * FROM vseoparam INTO lcl_wa_vseoparam WHERE clsname = 'CL_GUI_FRONTEND_SERVICES' AND cmpname = 'DIRECTORY_BROWSE' AND sconame = 'SELECTED_FOLDER'. IF lcl_wa_vseoparam-type = 'C'. ASSIGN lcl_char TO . ELSEIF lcl_wa_vseoparam-type = 'STRING'. ASSIGN lcl_string TO . ENDIF. CALL METHOD cl_gui_frontend_services=>directory_browse EXPORTING window_title = 'Selection of Basis Folder' initial_folder = 'C:\' CHANGING selected_folder = EXCEPTIONS cntl_error = 1 * ERROR_NO_GUI = 2 * others = 3 . IF sy-subrc = 0. CALL METHOD cl_gui_cfw=>flush EXCEPTIONS cntl_system_error = 1 cntl_error = 2 OTHERS = 3. IF sy-subrc = 0. lcl_len = STRLEN( ). IF lcl_len Offset von 3 bei p_include *Nur downloaden wenn noch nicht gedownloaded, da IF p_typus = 'T'. READ TABLE it_prog_stueckliste WITH KEY name TRANSPORTING NO FIELDS. ELSE. READ TABLE it_prog_stueckliste WITH KEY name TRANSPORTING NO FIELDS. ENDIF. IF sy-subrc 0. "nichts gefunden *Quelltext lesen READ REPORT p_include INTO downtab. *Fallunterscheidung der einzelnen Typen von Includes *fuer Downloadtabelle und Ausgabename CASE p_typus. WHEN 'I'. "normale Includes CONCATENATE ci p_include INTO filename. str_output = text011. WHEN 'R'. "Rahmenprogramme CONCATENATE cr p_include INTO filename. str_output = text010. WHEN 'T'. "Typgruppen lcl_laeng = STRLEN( p_include ). lcl_laeng = lcl_laeng - 3. CONCATENATE ctg p_include+3(lcl_laeng) INTO filename. str_output = text025. WHEN 'C'. "Klaseeninclude CONCATENATE ccl p_include INTO filename. str_output = text037. WHEN 'J'. "Interface CONCATENATE cint p_include INTO filename. str_output = text038. WHEN 'E'. "Include eines Enhancements CONCATENATE eint p_include INTO filename. str_output = text050. WHEN 'F'. "Einzelner Funktionsbaustein CONCATENATE cfunc p_include INTO filename. str_output = text058. ENDCASE. * * begin of changes for partner namespace TRANSLATE filename USING '/_'. end of changes for partner namespace Incldename in Stckliste. = p_include+3 = p_include

*

Convert include to XML PERFORM convert_include_to_xml TABLES lcl_it_xml USING p_include.

*Nur downloaden wenn include existiert (subrc von read report =0) IF sy-subrc = 0. * create complete filename CONCATENATE new_dir '\' filename '.XML' INTO filename. * replace g_nspace with g_savename into p_include. *Durchfhrung des eigentlichen Downloads PERFORM call_ws_download USING filename lcl_it_xml CHANGING lcl_subrc.

IF lcl_subrc 0. *Protokollliste schreiben. PERFORM write_protocol USING 'E' str_output p_include filename. ELSE. *Protokollliste schreiben. PERFORM write_protocol USING 'N' str_output p_include filename. *p_OK auf X setzen; Download hat funktioniert ok = 'X'. ENDIF. "subrc-Abfrage Fktbstabfrage * * ELSE. no success in reading the files WE have to clear the ok flag CLEAR ok. ENDIF. "Include vorhanden? ENDIF. "schon in Stueckliste drin * replace g_savename with g_nspace into p_include. ENDFORM. " DOWNLOAD_INCLUDE

*&---------------------------------------------------------------------* *& Form HANDLE_TYPGROUPS *&---------------------------------------------------------------------* * Lesen und Sichern der Typgruppen des Rahmenprogramms, * das in Parameter P_NAME enthalten ist. * Schreiben der Stueckliste. *----------------------------------------------------------------------* FORM handle_typgroups USING p_wa_cross_ref TYPE cross. *Variable fuer Includenamen der Typgruppe DATA: lcl_inc LIKE c_includename. CONCATENATE '%_C' p_wa_cross_ref-name INTO lcl_inc. *Uebergabe des Typ des Includes, um Dateinamen festlegen zu knnen CLEAR ok. PERFORM download_include USING lcl_inc 'T' CHANGING ok. IF ok = 'X'. "Download include war erfolgreich

*Stueckliste schreiben PERFORM write_stueckliste USING 'Typgroup' p_wa_cross_ref-name global_main_name. ENDIF. ENDFORM. " HANDLE_TYPGROUPS

*&---------------------------------------------------------------------* *& Form HANDLE_SCREENS *&---------------------------------------------------------------------* * Selektion der Dynpros des im Parameter P_NAME mitgegegbenen * Rahmenprogrammes. * Aufruf der Downloadroutine fuer Dynpros und Schreiben der * Uebersichtsliste. *----------------------------------------------------------------------* FORM handle_screens USING p_name LIKE wa_trdir-name p_typus TYPE c. *Lokale Tabellen und Arbeitsbereiche zur Sicherung der * Modularisierbareit DATA: lcl_it_d020s LIKE it_d020s, lcl_wa_d020s LIKE wa_d020s.

*Nur die Screens selektieren die nicht durch select-option/parameters *im Coding festgelegt worden sind (d020s-type = S;J;W). SELECT prog dnum type fnum FROM d020s INTO TABLE lcl_it_d020s WHERE prog = p_name AND ( ( type NE 'S' ) AND ( type NE 'J' ) AND ( type NE 'W' ) ). LOOP AT lcl_it_d020s INTO lcl_wa_d020s. *Unterscheidung zu welcher Ordnungsebene der Screen gehoert: *Rahmenprogramm oder Funktionsgruppe oder ... (wegen Stuecklisten) IF p_typus = 'R'. "Rahmenprogramm *Ueberpuefen, ob schon Heruntergeladen (nur fuer Rahmenprogramme, *da Screens von Funktionsgruppen ueber die Funktionsgruppen selbst *abgesichert sind. READ TABLE it_prog_stueckliste WITH TABLE KEY name = lcl_wa_d020s-dnum obername = p_name TRANSPORTING NO FIELDS. IF sy-subrc 0. "nichts gefunden PERFORM download_dynpro USING lcl_wa_d020s. PERFORM write_stueckliste USING 'SCR' lcl_wa_d020s-dnum p_name. ENDIF. ENDIF. ENDLOOP. ENDFORM. " HANDLE_SCREENS

*&---------------------------------------------------------------------* *& Form DOWNLOAD_DYNPRO *&---------------------------------------------------------------------*

* Durchfhrung der Sicherung eines Dynpros in das lokale * Dateisystem. * Der Code ist angepasster Standardcode. nderungen sind druch * eckige Klammern gekennzeichnet *----------------------------------------------------------------------* FORM download_dynpro USING p_wa_d020s LIKE wa_d020s. * subrc fr Downloadform-routine DATA: lcl_subrc TYPE sy-subrc. *Lokaler Dynproname zum Download DATA: lcl_screenbez TYPE string. *Lokale Strukturen zu Einlesen des Dynpros aus dem System DATA: lcl_wa_dynproheader TYPE d020s, "Header des Dynpros lcl_it_feldliste TYPE TABLE OF d021s, "Feldlistentabelle lcl_it_ablauflogik LIKE d022s OCCURS 0 WITH HEADER LINE, "Ablauflogk lcl_it_matchcode LIKE d023s OCCURS 0 WITH HEADER LINE. DATA: BEGIN OF lcl_dynp, prog TYPE d020s-prog, dnum TYPE d020s-dnum, END OF lcl_dynp. *filename initialisieren CLEAR filename. *[zustzliche Deklarationen fr kopierten code(siehe Include) DATA: header TYPE d020s, descript TYPE d020t-dtxt, * file TYPE rlgrap-filename. file TYPE string. DATA: fields TYPE TABLE OF d021s, flowlogic LIKE d022s OCCURS 0 WITH HEADER LINE, params LIKE d023s OCCURS 0 WITH HEADER LINE. DATA header_char LIKE scr_chhead. DATA dynp_char LIKE scr_chfld OCCURS 0 WITH HEADER LINE. TABLES: d020t. DATA prog_len TYPE p. DATA fields_char LIKE scr_chfld OCCURS 0 WITH HEADER LINE. CONSTANTS: stars(64) VALUE '****************************************************************', "#EC NOTEXT comment1(64) VALUE '* THIS FILE IS GENERATED BY THE SCREEN PAINTER. *', "#EC NOTEXT comment2(64) VALUE '* NEVER CHANGE IT MANUALLY, PLEASE ! *', "#EC NOTEXT dynpro_text(8) VALUE '%_DYNPRO', "#EC NOTEXT header_text(8) VALUE '%_HEADER', "#EC NOTEXT params_text(8) VALUE '%_PARAMS', "#EC NOTEXT descript_text(13) VALUE '%_DESCRIPTION', "#EC NOTEXT fields_text(8) VALUE '%_FIELDS', "#EC NOTEXT kreuz(1) VALUE 'x', "#EC NOTEXT flowlogic_text(11) VALUE '%_FLOWLOGIC'. "#EC NOTEXT *]

*Dynpro zuordnen lcl_dynp-dnum = p_wa_d020s-dnum. lcl_dynp-prog = p_wa_d020s-prog. *Dynpro importieren IMPORT DYNPRO lcl_wa_dynproheader lcl_it_feldliste lcl_it_ablauflogik lcl_it_matchcode ID lcl_dynp. *** Dateiname und Pfad bilden CONCATENATE new_dir '\' cs p_wa_d020s-prog p_wa_d020s-dnum '.TXT' INTO filename. *In dieser Routine bis zum Ende des Formulars ist im wesentlichen der *Code aus dem Funktionsbaustein RS_DYNPRO_DOWNLOAD enthalten. Die *zustzlichen *Datendeklarationen sind am Anfang der Form enthalten. nderungen des *Codings sind mit [] gekennzeichnet. Der Funktionsbaustein 'Download' *wurde durch 'WS_Download' ersetzt, um nicht den Pfad zur Speicherung *manuell eingeben zu mssen. *----------------------------------------------------------------------*[Erweiterung DNE *Zuordnung der Parameter wie beim Aufruf des FB-Bausteins header = lcl_wa_dynproheader. file = filename. fields = lcl_it_feldliste. flowlogic[] = lcl_it_ablauflogik[]. params[] = lcl_it_matchcode[]. *Lesen der Kurztextbeschreibung des Dynpros SELECT SINGLE dtxt FROM d020t INTO descript WHERE prog = lcl_dynp-prog AND dynr = lcl_dynp-dnum . *] *kopierter Text aus Funktionsbaustein CALL FUNCTION 'RS_SCRP_HEADER_RAW_TO_CHAR' EXPORTING header_int = header IMPORTING header_char = header_char EXCEPTIONS OTHERS = 1. REFRESH dynp_char. * Comment dynp_char dynp_char dynp_char dynp_char = = = = stars. comment1. comment2. stars. APPEND APPEND APPEND APPEND dynp_char. dynp_char. dynp_char. dynp_char. " '%_DYNPRO'

* Identification dynp_char = dynpro_text. APPEND dynp_char. dynp_char = header_char-prog. APPEND dynp_char. dynp_char = header_char-dnum. APPEND dynp_char.

dynp_char = sy-saprl. APPEND dynp_char. DESCRIBE FIELD d020t-prog LENGTH prog_len IN CHARACTER MODE. dynp_char(16) = prog_len. APPEND dynp_char. * Header dynp_char = header_text. APPEND dynp_char. APPEND header_char TO dynp_char. * Description dynp_char = descript_text. APPEND dynp_char. APPEND descript TO dynp_char. * Fieldlist dynp_char = fields_text. " '%_FIELDS' APPEND dynp_char. CALL FUNCTION 'RS_SCRP_FIELDS_RAW_TO_CHAR' TABLES fields_int = fields fields_char = fields_char EXCEPTIONS OTHERS = 1. LOOP AT fields_char. APPEND fields_char TO dynp_char. ENDLOOP. * Flowlogic dynp_char = flowlogic_text. APPEND dynp_char. LOOP AT flowlogic. APPEND flowlogic TO dynp_char. ENDLOOP. ** refresh flowlogic. " '%_FLOWLOGIC' " '%_HEADER'

" '%_DESCRIPTION'

"vjb 25.06.98

*[Abnderung des Funktionsbausteins DNE * Dynpro Parameters "vjb ab 4.6A (01.07.98) ** IF NOT ( PARAMS IS INITIAL ). dynp_char = params_text. APPEND dynp_char. LOOP AT params. APPEND params TO dynp_char. ENDLOOP. * ENDIF. *] * begin of changes for partner namespace TRANSLATE file USING '/_'. * end of changes for partner namespace * Download PERFORM call_ws_download USING file dynp_char[] CHANGING lcl_subrc. *[Eigene Fehlerprfung/Wegschreiben Listen; Erweiterung DNE CONCATENATE p_wa_d020s-prog ', ' p_wa_d020s-dnum INTO lcl_screenbez. IF lcl_subrc 0. *Protokollliste schreiben. PERFORM write_protocol USING 'E' text017 lcl_screenbez filename.

ELSE. PERFORM write_protocol USING 'N' text017 lcl_screenbez filename. ENDIF. *] ENDFORM. " DOWNLOAD_DYNPRO

*&---------------------------------------------------------------------* *& Form DOWNLOAD_TEXTELEMENTS *&---------------------------------------------------------------------* * Lesen und Sichern der Textelemente des im Parameter * P_NAME uebergebenen Rahmenprogrammes *----------------------------------------------------------------------* FORM download_textelements USING * subrc fr Downloadform-routine DATA: lcl_subrc TYPE sy-subrc. *Lokale Datendefinition fuer Textelementtabelle *Interne Tabellle zum Aufnehmender Textelemente DATA: lcl_it_textelements LIKE textpool OCCURS 50 WITH HEADER LINE. *Name des Textelements in der Stckliste (darf nicht heien wie *Rahmenprogramm. DATA: lcl_text_name TYPE snodetext-text1. *Filename initialisieren CLEAR filename. *Schleife ueber die selektierten Sprachen LOOP AT it_lan INTO wa_lan. *Name fr Prfung zusammenbauen. CONCATENATE 'TE_' p_name '(' wa_lan ')' INTO filename. *Namen fuer Stueckliste lcl_text_name = filename. *Nur downloaden wenn noch nicht gedownloaded, da in Stckliste. READ TABLE it_prog_stueckliste WITH KEY name = filename TRANSPORTING NO FIELDS. IF sy-subrc 0. ** Dateiname und Pfad bilden CONCATENATE new_dir '\' filename '.htm' INTO filename. *Textelemente in der Anmeldesprache herunterladen READ TEXTPOOL p_name INTO lcl_it_textelements LANGUAGE wa_lan. *Nur Download und Eintrag in Stueckliste durchfuehren, wenn *Textelement vorhanden sind. IF sy-subrc = 0. *HTML-Tabelle fuer Textelemente zusamenbauen PERFORM create_htmltab_for_textelement USING lcl_it_textelements[] . * begin of changes for partner namespace TRANSLATE filename USING '/_'. * end of changes for partner namespace PERFORM call_ws_download USING filename it_html CHANGING lcl_subrc. p_name LIKE wa_trdir-name p_typus TYPE c.

IF lcl_subrc 0. *Protokollliste schreiben. PERFORM write_protocol USING 'E' text018 p_name filename. ELSE. *Protokollliste schreiben. PERFORM write_protocol USING 'N' text018 p_name filename. *Je nach Typ oder Hierarchiestufe wird das wegschreiben der *Strukturinformationen verschieden gehandhabt. IF p_typus = 'G'. "Funktionsgruppe CLEAR wa_fkgrp_struktur. wa_fkgrp_struktur-objecttype = 'TE'. wa_fkgrp_struktur-objectname = p_name. APPEND wa_fkgrp_struktur TO it_fkgrp_struktur. ELSEIF p_typus = 'R'. "Rahmenprogramm: Report/Modulpool *Statisches wegschreiben der Stckliste fr die Textelemente (Angaben *stehen im vorhinein schon fest CLEAR wa_prog_stueckliste. wa_prog_stueckliste-type = 'TE'. wa_prog_stueckliste-name = lcl_text_name. wa_prog_stueckliste-obername = p_name. wa_prog_stueckliste-instnr = instnr. APPEND wa_prog_stueckliste TO it_prog_stueckliste. ELSEIF p_typus = 'T'. "Selektion ber Transportrequest *Statisches wegschreiben der Stckliste fr die Textelemente (Angaben *stehen im vorhinein schon fest CLEAR wa_prog_stueckliste. wa_prog_stueckliste-type = 'TE'. wa_prog_stueckliste-name = lcl_text_name. wa_prog_stueckliste-obername = global_main_name. wa_prog_stueckliste-instnr = instnr. APPEND wa_prog_stueckliste TO it_prog_stueckliste. ELSEIF p_typus = 'C'. "Klasse CLEAR wa_classlist. wa_classlist-typus = 'TE'. wa_classlist-inc = lcl_text_name. APPEND wa_classlist TO it_classlist. ENDIF. "Welcher Typ liegt vor vor???? ENDIF. "Waren Textelemente vorhanden ENDIF. ENDIF. "Ende der Ueberpruefung, ob ueberhaupt Textelemente vorhanden ENDLOOP. "Sprachentabelle ENDFORM. " DOWNLOAD_TEXTELEMENTS

*&---------------------------------------------------------------------* *& Form DOWNLOAD_STUECKLISTE *&---------------------------------------------------------------------* * Sicherung einer erzeugten Stueckliste in das lokale Dateisystem. * Generierung der Tabelle in HTML-Format *----------------------------------------------------------------------* FORM download_stueckliste. * subrc fr Downloadform-routine DATA: lcl_subrc TYPE sy-subrc. *Stcklistenname DATA: lcl_stueckliste_name TYPE string.

* Name for object name in parts list DATA: lcl_file_name LIKE wa_prog_stueckliste-file_name. *Variable fuer Kopfzeile DATA: lcl_header TYPE string. *Headertabelle fuer HTML-Tabelle DATA: lcl_it_headerrow TYPE STANDARD TABLE OF string. * begin of changes for partner namespace * Auffuellen der Felder fuer den verwendeten file_name LOOP AT it_prog_stueckliste INTO wa_prog_stueckliste. lcl_file_name = wa_prog_stueckliste-name. TRANSLATE lcl_file_name USING '/_'. CONDENSE lcl_file_name NO-GAPS. wa_prog_stueckliste-file_name = lcl_file_name. MODIFY it_prog_stueckliste FROM wa_prog_stueckliste INDEX sy-tabix. ENDLOOP. * end of changes for partner namespace *Ueberschrift zusammenbauen CONCATENATE 'List of Object' global_main_name INTO lcl_header SEPARATED BY space. *Headertabelle zusammenbauen APPEND 'Objecttype' TO lcl_it_headerrow. APPEND 'Objectname' TO lcl_it_headerrow. APPEND 'Super Object' TO lcl_it_headerrow. APPEND 'System Identifier' TO lcl_it_headerrow. APPEND 'Name in file system' TO lcl_it_headerrow. *Nur downloaden, wenn nicht leer IF NOT ( it_prog_stueckliste IS INITIAL ). CONCATENATE 'Stueckliste_' global_main_name INTO lcl_stueckliste_name. *Umwandlung in HTML-Tabelle ******************************************************** PERFORM create_htmltab_header USING lcl_it_headerrow lcl_header. LOOP AT it_prog_stueckliste INTO wa_prog_stueckliste. PERFORM create_htmltab_body USING wa_prog_stueckliste. ENDLOOP. PERFORM create_html_tab_foot. ********************************************************* CLEAR filename. CONCATENATE new_dir '\' lcl_stueckliste_name '.xml' INTO filename. * * begin of changes for partner namespace TRANSLATE filename USING '/_'. end of changes for partner namespace PERFORM call_ws_download USING filename it_html CHANGING lcl_subrc. IF lcl_subrc 0. Protokollliste schreiben. PERFORM write_protocol USING 'E' text019 lcl_stueckliste_name filename.

*

*

ELSE. Protokollliste schreiben. PERFORM write_protocol USING 'N' text019 lcl_stueckliste_name filename. ENDIF.

*

Navigationsfiles zusammenbauen CONCATENATE lcl_stueckliste_name '.htm' INTO lcl_stueckliste_name. PERFORM create_nav_files USING lcl_stueckliste_name. Aufbauen und Herunterladen der XSL-Files PERFORM create_xsl_files. " DOWNLOAD_STUECKLISTE

*

ENDIF. ENDFORM.

*&---------------------------------------------------------------------* *& Form WRITE_STUECKLISTE *&---------------------------------------------------------------------* * Schreiben der Stueckliste mit den Aufrufparametern Typ (p_typus), * Name des Objektes (p_name) und Nam des bergeordneten Objektes * (p_obername). *----------------------------------------------------------------------* FORM write_stueckliste USING p_type TYPE any p_name TYPE any p_obername TYPE any. wa_prog_stueckliste-type = p_type. wa_prog_stueckliste-name = p_name. wa_prog_stueckliste-obername = p_obername. wa_prog_stueckliste-instnr = instnr. APPEND wa_prog_stueckliste TO it_prog_stueckliste. ENDFORM. " WRITE_STUECKLISTE

*&---------------------------------------------------------------------* *& Form HANDLE_DDIC *&---------------------------------------------------------------------* * Lesen von Tabellentypen, Strukturen, Tabellen, Views und Appends * zu einem Rahmenprogramm (Parameter P_NAME). *----------------------------------------------------------------------* FORM handle_ddic USING p_name LIKE wa_trdir-name p_typus TYPE c. *Breiche fuer Bearbeitung von Rahmenprogramm abhngigen Includes DATA: lcl_it_d010tab LIKE it_d010tab, lcl_wa_d010tab LIKE wa_d010tab. DATA: lcl_it_ddic TYPE STANDARD TABLE OF rddnm. DATA: lcl_wa_ddic LIKE LINE OF lcl_it_ddic. *lokaler Puffer fuer dd02l DATA: lcl_it_puffer TYPE STANDARD TABLE OF dd02l, lcl_wa_puffer LIKE LINE OF lcl_it_puffer. *lokale Variable fuer Stuecklisten DATA: lcl_ddictyp TYPE string. *Arbeitsrbereiche fuer Bestimmung von Tabellenappends DATA: lcl_it_dd02l TYPE STANDARD TABLE OF dd02l, lcl_wa_dd02l LIKE LINE OF lcl_it_dd02l.

*Abgleich und Verarbeitung der Tabellentypen SELECT * FROM d010tab INTO TABLE lcl_it_d010tab WHERE master = p_name. * DELETE lcl_it_d010tab * WHERE NOT ( ( tabname(1) = 'Y' ) * OR ( tabname(1) = 'Z' ) * OR ( tabname(g_len_nspace) = p_nspace ) ). LOOP AT lcl_it_d010tab INTO lcl_wa_d010tab. * Only deal with elements in namespace IF ( ( lcl_wa_d010tab-tabname(1) NE 'Y' ) AND ( lcl_wa_d010tab-tabname(1) NE 'Z' ) AND ( lcl_wa_d010tab-tabname(g_len_nspace) NE p_nspace ) ). CONTINUE. ENDIF. READ TABLE it_all_tabletypes WITH KEY typename = lcl_wa_d010tab-tabname TRANSPORTING NO FIELDS. IF sy-subrc = 0. "Tabellentyp liegt vor PERFORM handle_tabletype USING lcl_wa_d010tab-tabname. *Stueckliste schreiben PERFORM write_stueckliste USING 'Tabletype' lcl_wa_d010tab-tabname p_name. ENDIF. ENDLOOP. LOAD REPORT p_name PART 'DDNM' INTO lcl_it_ddic. *Zu den *Verarbeitung der Informationen LOOP AT lcl_it_ddic INTO lcl_wa_ddic. *Initialisieren des Puffers REFRESH lcl_it_puffer. CLEAR lcl_wa_puffer. *Feststellen des Typs des DDicobjektes SELECT SINGLE * FROM dd02l INTO wa_ddictypes WHERE tabname = lcl_wa_ddic-tabname. *Objekte im Kundennamensraum herunterladen + Partnernamensraum IF ( ( lcl_wa_ddic-tabname(1) = 'Y' ) OR ( lcl_wa_ddic-tabname(1) = 'Z' ) OR ( lcl_wa_ddic-tabname(g_len_nspace) = p_nspace ) ). *Behandlung der Faelle CASE wa_ddictypes-tabclass. WHEN 'TRANSP'. "normale Tabellen PERFORM download_table USING wa_ddictypes 'T'. lcl_ddictyp = 'Table'. WHEN 'VIEW'. "View * PERFORM download_table USING wa_ddictypes 'V'. PERFORM download_view USING wa_ddictypes. lcl_ddictyp = 'View'. WHEN 'INTTAB'. "Struktur PERFORM download_table USING wa_ddictypes 'S'. lcl_ddictyp = 'Structure'. ENDCASE.

ELSE. *Objekte im SAP-Namensraum auf eine Appendstruktur ueberpruefen REFRESH lcl_it_dd02l. CLEAR lcl_wa_dd02l. SELECT * FROM dd02l INTO TABLE lcl_it_dd02l WHERE sqltab = lcl_wa_ddic-tabname AND tabclass = 'APPEND'. IF sy-subrc = 0. "es existieren appends lcl_ddictyp = 'APP'. LOOP AT lcl_it_dd02l INTO lcl_wa_dd02l. *Eigentlicher Download PERFORM download_table USING lcl_wa_dd02l 'A'. *Schreiben der Stuecklisten *Unterscheidung zu welcher Ordnungsebene diese Ddic-objektes gehoert: *Rahmenprogramm oder Funktionsgruppe oder ... IF p_typus = 'R'. "Rahmenprogramm *Ueberpruefen, ob Eintrag mit diesem Schluessel schon in Stueckliste *steht READ TABLE it_prog_stueckliste WITH TABLE KEY name = lcl_wa_dd02l-tabname obername = lcl_wa_ddic-tabname TRANSPORTING NO FIELDS. IF sy-subrc 0. "nichts gefunden PERFORM write_stueckliste USING 'Append' lcl_wa_dd02l-tabname lcl_wa_ddic-tabname. ENDIF. ENDIF. ENDLOOP. "Loop ueber Appends CONTINUE. ELSE. "Sap-Tabellen nicht in Stueckliste schreiben CONTINUE. ENDIF. "existiert ein Append ENDIF. "Kundennamensraum *Unterscheidung zu welcher Ordnungsebene diese Ddic-objektes gehoert: *Rahmenprogramm oder Funktionsgruppe oder ... IF p_typus = 'R'. "Rahmenprogramm *Ueberpruefen, ob Eintrag mit diesem Schluessel schon in Stueckliste *steht READ TABLE it_prog_stueckliste WITH TABLE KEY name = lcl_wa_ddic-tabname obername = p_name TRANSPORTING NO FIELDS. IF sy-subrc 0. "nichts gefunden PERFORM write_stueckliste USING lcl_ddictyp lcl_wa_ddic-tabname p_name. ENDIF. ENDIF. ENDLOOP. ENDFORM. " HANDLE_DDIC

*&---------------------------------------------------------------------* *& Form DOWNLOAD_DOMAINS *&---------------------------------------------------------------------*

* Lesen und Sichern der Domaenenheaderinformationen und * wenn vorhanden der Wertehilfen. Als Grundlage dient dient die * Liste der Datenelemente. *----------------------------------------------------------------------* FORM download_domains. * subrc fr Downloadform-routine DATA: lcl_subrc TYPE sy-subrc. *Variablen fuer Download (Filename) festlegen DATA: lcl_domainheader_name TYPE string. DATA: lcl_domainvalues_name TYPE string. *Lokaler Datenbereich fuer temporaere Verarbeitung von dd07v(enthlt *evtl. Wertebereich der Domaene. DATA: lcl_it_dd07v TYPE STANDARD TABLE OF dd07v, lcl_wa_dd07v LIKE LINE OF lcl_it_dd07v. *Variable fuer Kopfzeile DATA: lcl_header TYPE string. *Headertabelle fuer HTML-Tabelle DATA: lcl_it_headerrow TYPE STANDARD TABLE OF string. *Arbeitsbereich nur fuer die sinnvolen Attrbute der Domaene DATA: lcl_wa_idd01v TYPE idd01v. *Arbeitsbereich nur fuer die sinnvolen Festwerte der Domaene DATA: lcl_wa_idd07v TYPE idd07v. *Schleife ueber die Kundeneigenen Datenelemente *Es werden alle Domaenen (auch die SAP-Domaenen) *betrachtet, da sie wegen der referentiellen Intgritt *in der Datenbank notwendig sind LOOP AT it_dataelements INTO wa_dataelements. LOOP AT it_lan INTO wa_lan. REFRESH lcl_it_dd07v. CALL FUNCTION 'DDIF_DOMA_GET' EXPORTING name = wa_dataelements-domname state = 'A' langu = wa_lan IMPORTING GOTSTATE = dd01v_wa = wa_dd01v TABLES dd07v_tab = lcl_it_dd07v EXCEPTIONS ILLEGAL_INPUT = 1 OTHERS = 2 . IF sy-subrc = 0. Domaeneninfos in Gesamttabelle schreiben, wenn im Kundennamensraum. IF wa_dd01v-domname(1) = 'Z' OR wa_dd01v-domname(1) = 'Y' OR wa_dd01v-domname(g_len_nspace) = p_nspace. APPEND wa_dd01v TO it_dd01v. Wertelistetabelle (dd07v) in Gesamtwerteliste schreiben. Nur ausfhren wenn lcl_it_dd07v nicht leer ist. Nur ausfuehren wenn Domaenen im Kundennamensraum liegen. IF NOT ( lcl_it_dd07v IS INITIAL ). LOOP AT lcl_it_dd07v INTO lcl_wa_dd07v. IF ( lcl_wa_dd07v-domname(1) = 'Z' OR lcl_wa_dd07v-domname(1) = 'Y' OR lcl_wa_dd07v-domname(g_len_nspace) = p_nspace ). APPEND lcl_wa_dd07v TO it_dd07v.

*

* * * *

* * *

ENDIF. "Kundennamensraum ENDLOOP. ENDIF. "initialpruefung ENDIF. "Kundnennamensraum ENDIF. "sy-subrc * Loeschen der zeile, wenn kein Datenelementname vorhanden-->Eintrag * aus Verarbeitung Tabellentyp IF wa_dataelements-rollname IS INITIAL. DELETE it_dataelements INDEX sy-tabix. ENDIF. ENDLOOP. "Sprachtabelle ENDLOOP. ****************************************************************** *Download der allgemeinen Informationen ****************************************************************** *Nur Download wenn it_dd01v nicht leer ist IF NOT ( it_dd01v IS INITIAL ). *Duplikate lschen SORT it_dd01v BY domname ddlanguage. DELETE ADJACENT DUPLICATES FROM it_dd01v COMPARING ALL FIELDS. * * Ueberschrift zusammenbauen CONCATENATE 'Domain Attributes of ' global_main_name INTO lcl_header SEPARATED BY space. Headertabelle zusammenbauen APPEND 'Domain Name' TO lcl_it_headerrow. APPEND 'Language Key' TO lcl_it_headerrow. APPEND 'Data Type' TO lcl_it_headerrow. APPEND 'Length of Type' TO lcl_it_headerrow. APPEND 'Output Length' TO lcl_it_headerrow. APPEND 'Decimal places' TO lcl_it_headerrow. APPEND 'Lowercase letters (flag)' TO lcl_it_headerrow. APPEND 'Sign (flag)' TO lcl_it_headerrow. APPEND 'Flag for fixed Values' TO lcl_it_headerrow. APPEND 'Value Table' TO lcl_it_headerrow. APPEND 'Conversion Routine' TO lcl_it_headerrow. APPEND 'Short Text' TO lcl_it_headerrow.

* *

Umwandlung in HTML-Tabelle ******************************************************* PERFORM create_htmltab_header USING lcl_it_headerrow lcl_header.

LOOP AT it_dd01v INTO wa_dd01v. *nur sinnvolle Felder nutzen MOVE-CORRESPONDING wa_dd01v TO lcl_wa_idd01v. PERFORM create_htmltab_body USING lcl_wa_idd01v. ENDLOOP. * PERFORM create_html_tab_foot. ******************************************************** CONCATENATE 'DomHeader_' global_main_name INTO lcl_domainheader_name.

CLEAR filename. CONCATENATE new_dir '\' lcl_domainheader_name '.xml' INTO filename. * begin of changes for partner namespace TRANSLATE filename USING '/_'. * end of changes for partner namespace PERFORM call_ws_download USING filename it_html "it_dd01v CHANGING lcl_subrc. IF lcl_subrc 0. *Protokollliste schreiben. PERFORM write_protocol USING 'E' text023 lcl_domainheader_name filename. ELSE. *Protokollliste schreiben. PERFORM write_protocol USING 'N' text023 lcl_domainheader_name filename. *Stueckliste schreiben PERFORM write_stueckliste USING 'Domainheader' 'Domainheader' global_main_name. ENDIF. ENDIF. "Ist Tabelle it_dd01v gefllt. ****************************************************** *Herunterladen der Wertehilfen ****************************************************** *Nur Download wenn it_dd07v nicht leer ist IF NOT ( it_dd07v IS INITIAL ). *Duplikate lschen SORT it_dd07v BY domname valpos ddlanguage. DELETE ADJACENT DUPLICATES FROM it_dd07v COMPARING ALL FIELDS. SORT it_dd07v BY domname ddlanguage valpos. * CLEAR lcl_header. REFRESH lcl_it_headerrow. Ueberschrift zusammenbauen CONCATENATE 'Value Range and Short Text of Domains used in ' global_main_name INTO lcl_header SEPARATED BY space. Headertabelle zusammenbauen APPEND 'Domain Name' TO lcl_it_headerrow. APPEND 'Position in Value List' TO lcl_it_headerrow. APPEND 'Language' TO lcl_it_headerrow. APPEND 'Single Value/lower Limit' TO lcl_it_headerrow. APPEND 'Upper limit' TO lcl_it_headerrow. APPEND 'Short Text for fixed Values' TO lcl_it_headerrow. Umwandlung in HTML-Tabelle ******************************************************* PERFORM create_htmltab_header USING lcl_it_headerrow lcl_header.

*

* *

LOOP AT it_dd07v INTO wa_dd07v. *nur sinnvolle Felder nutzen MOVE-CORRESPONDING wa_dd07v TO lcl_wa_idd07v. PERFORM create_htmltab_body USING lcl_wa_idd07v. ENDLOOP.

*

PERFORM create_html_tab_foot. ******************************************************** CONCATENATE 'DomValues_' global_main_name INTO lcl_domainvalues_name. CLEAR filename. CONCATENATE new_dir '\' lcl_domainvalues_name '.xml' INTO filename.

* *

begin of changes for partner namespace TRANSLATE filename USING '/_'. end of changes for partner namespace PERFORM call_ws_download USING filename it_html CHANGING lcl_subrc.

"it_dd07v

IF lcl_subrc 0. *Protokollliste schreiben. PERFORM write_protocol USING 'E' text024 lcl_domainvalues_name filename. ELSE. PERFORM write_protocol USING 'N' text024 lcl_domainvalues_name filename. *Stueckliste schreiben PERFORM write_stueckliste USING 'Domainvalues' 'Domainvalues' global_main_name. ENDIF. ENDIF. ENDFORM. " DOWNLOAD_DOMAINS

*&---------------------------------------------------------------------* *& Form WRITE_DATAELEMENTS *&---------------------------------------------------------------------* * Lesen der Informationen zu dem im Parameter P_ROLLNAME * angegebenen Datenelement. Information wird an Gesamtliste * der Dateneelemente zu spterem Download angehngt. *----------------------------------------------------------------------* FORM write_dataelements USING p_rollname LIKE wa_dataelements-rollname. *Initialisieren der Datenelemente CLEAR wa_dataelements. *Sprachabhaengigkeit LOOP AT it_lan INTO wa_lan. *Herauslesen der spezifischen Information fuer Datenelemente CALL FUNCTION 'DDIF_DTEL_GET' EXPORTING name = p_rollname state = 'A' langu = wa_lan IMPORTING * GOTSTATE = dd04v_wa = wa_dataelements

* * * *

TPARA_WA = EXCEPTIONS ILLEGAL_INPUT = 1 OTHERS = 2 . IF sy-subrc 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. APPEND wa_dataelements TO it_dataelements. ENDLOOP. "Sprachtabelle ENDFORM. " WRITE_DATAELEMENTS

*&---------------------------------------------------------------------* *& Form DOWNLOAD_TABLE *&---------------------------------------------------------------------* * Lesen und Sichern der Feldinformationen zu Tabellen, Views, * Strukturen und Appends. *----------------------------------------------------------------------* FORM download_table USING p_dd02l TYPE dd02l p_typus TYPE c. * subrc fr Downloadform-routine DATA: lcl_subrc TYPE sy-subrc. *Arbeitsbereich fuer die sinnvolen Felder DATA: lcl_wa_idd03p TYPE idd03p. *Variable fuer Kopfzeile der zu generierenden HTML-Tabelle DATA: lcl_header TYPE string. *Headertabelle fuer HTML-Tabelle DATA: lcl_it_headerrow TYPE STANDARD TABLE OF string. *Variable zur Modularisierung des Ausgabenamens DATA: str_output TYPE string. *lokale Datendeklarationen fuer Zugriff auf DDIC-Objekte DATA: lcl_t_dd03p LIKE dd03p OCCURS 0 WITH HEADER LINE, lcl_t_dd05m LIKE dd05m OCCURS 0 WITH HEADER LINE, lcl_ddic_name LIKE dcobjdef-name, lcl_w_dd02v LIKE dd02v. ** Variable for shorttext of fieldname DATA: lcl_it_dfies TYPE STANDARD TABLE OF dfies, lcl_wa_dfies LIKE LINE OF lcl_it_dfies. CLEAR filename. lcl_ddic_name = p_dd02l-tabname. CALL FUNCTION 'DDIF_TABL_GET' EXPORTING name = lcl_ddic_name IMPORTING dd02v_wa = lcl_w_dd02v TABLES dd03p_tab = lcl_t_dd03p dd05m_tab = lcl_t_dd05m EXCEPTIONS illegal_input = 1 OTHERS = 2. IF sy-subrc = 0.

*

Weiter Verarbeitung wenn etwas gefunden worden ist IF NOT ( lcl_t_dd03p[] IS INITIAL ).

IF sy-subrc 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. * Verarbeitung der kundeneigenen Datenelemente in der Tabelle LOOP AT lcl_t_dd03p. IF ( ( lcl_t_dd03p-rollname(1) = 'Z' ) OR ( lcl_t_dd03p-rollname(1) = 'Y' ) OR ( lcl_t_dd03p-rollname(g_len_nspace) = p_nspace ) ). PERFORM write_dataelements USING lcl_t_dd03p-rollname. ENDIF. ENDLOOP. *Vorbereitungen fr Download *Fallunterscheidung der einzelnen Typen von DDIC-Strukturen *fuer Downloadtabelle und Ausgabename; und Ueberschrift HTML-Tabelle CASE p_typus. WHEN 'T'. "Tabelle CONCATENATE new_dir '\' ct lcl_ddic_name '.xml' INTO filename. str_output = text009. CONCATENATE 'Fields of Table ' lcl_ddic_name INTO lcl_header SEPARATED BY space. WHEN 'V'. "View CONCATENATE new_dir '\' cv lcl_ddic_name '.xml' INTO filename. str_output = text060. CONCATENATE 'Fields of View ' lcl_ddic_name INTO lcl_header SEPARATED BY space. WHEN 'S'. "Strukturen CONCATENATE new_dir '\' cst lcl_ddic_name '.xml' INTO filename. str_output = text026. CONCATENATE 'Fields of Structure ' lcl_ddic_name INTO lcl_header SEPARATED BY space. WHEN 'A'. "Appends CONCATENATE new_dir '\' cap lcl_ddic_name '.xml' INTO filename. str_output = text027. CONCATENATE 'Fields of Append-Structure ' lcl_ddic_name 'of Table' p_dd02l-sqltab INTO lcl_header SEPARATED BY space. ENDCASE. * * * * begin of changes for partner namespace TRANSLATE filename USING '/_'. Read shorttext for fieldname To Do: Check whether this function module can replace the one above CALL FUNCTION 'DDIF_FIELDINFO_GET' EXPORTING tabname = lcl_ddic_name langu = sy-langu TABLES dfies_tab = lcl_it_dfies EXCEPTIONS not_found = 1

internal_error = 2 OTHERS = 3. IF sy-subrc 0. REFRESH lcl_it_dfies. ENDIF. * Headertabelle zusammenbauen APPEND 'Table Name' TO lcl_it_headerrow. APPEND 'Field Name' TO lcl_it_headerrow. APPEND 'Short Text' TO lcl_it_headerrow. APPEND 'Position in Table' TO lcl_it_headerrow. APPEND 'Key Field (Flag)' TO lcl_it_headerrow. APPEND 'Mandatory Field (Flag)' TO lcl_it_headerrow. APPEND 'Data Element' TO lcl_it_headerrow. APPEND 'Checktable' TO lcl_it_headerrow. APPEND 'Nesting Depth for Includes' TO lcl_it_headerrow. APPEND 'Table for Reference Field' TO lcl_it_headerrow. APPEND 'Name of included Table' TO lcl_it_headerrow. APPEND 'NOTNULL (flag)' TO lcl_it_headerrow. APPEND 'Data Type' TO lcl_it_headerrow. APPEND 'Length of Field' TO lcl_it_headerrow. APPEND 'Number of decimals' TO lcl_it_headerrow. Umwandlung in HTML-Tabelle ******************************************************* PERFORM create_htmltab_header USING lcl_it_headerrow lcl_header. LOOP AT lcl_t_dd03p. MOVE-CORRESPONDING lcl_t_dd03p TO lcl_wa_idd03p. * Get fieldtexts CLEAR lcl_wa_dfies. READ TABLE lcl_it_dfies WITH KEY tabname = lcl_t_dd03p-tabname fieldname = lcl_t_dd03p-fieldname INTO lcl_wa_dfies. lcl_wa_idd03p-shorttext = lcl_wa_dfies-fieldtext. PERFORM create_htmltab_body USING lcl_wa_idd03p. ENDLOOP. * PERFORM create_html_tab_foot. ********************************************************

* *

*** Tables/View downloaden * end of changes for partner namespace PERFORM call_ws_download USING filename it_html "lcl_t_dd03p CHANGING lcl_subrc. *lcl_t_DD03P-ROLLNAME. IF lcl_subrc 0. *Protokollliste schreiben. PERFORM write_protocol USING 'E' str_output lcl_ddic_name filename. ELSE.

*Protokollliste schreiben. PERFORM write_protocol USING 'N' str_output lcl_ddic_name filename. ENDIF. "subrc-Abfrage des Download ENDIF. "subrc des ddifget-Bausteine * ENDIF. "Subrc der Stuecklistenueberpruefung ENDIF. "Tabelle gefuellte??? ENDFORM. " DOWNLOAD_TABLE *&---------------------------------------------------------------------* *& Form DATAELEMENTS_DOWNLOAD *&---------------------------------------------------------------------* * Sicherung der Gesamttabelle der Datenelemente. * Konvertierung in HTML-Format. *----------------------------------------------------------------------* FORM download_dataelements. * subrc fr Downloadform-routine DATA: lcl_subrc TYPE sy-subrc. *Datenelementname DATA: lcl_dataelements_name TYPE string. DATA: lcl_wa_idd03p TYPE idd03p. *Variable fuer Kopfzeile der zu generierenden HTML-Tabelle DATA: lcl_header TYPE string. *Headertabelle fuer HTML-Tabelle DATA: lcl_it_headerrow TYPE STANDARD TABLE OF string. *Komprimierter Bereich fuer Datenelemete DATA: lcl_wa_idataelements TYPE idd04v. *Nur herunterladen, wenn Datenelementliste Inhalt hat. IF NOT ( it_dataelements IS INITIAL ). lcl_header = 'Dataelements'. *Duplikate lschen SORT it_dataelements BY rollname ddlanguage. DELETE ADJACENT DUPLICATES FROM it_dataelements COMPARING ALL FIELDS. * Headertabelle zusammenbauen APPEND 'Dataelement Name' TO lcl_it_headerrow. APPEND 'Language' TO lcl_it_headerrow. APPEND 'Domainname' TO lcl_it_headerrow. APPEND 'Parameter ID' TO lcl_it_headerrow. APPEND 'Change Document (flag)' TO lcl_it_headerrow. APPEND 'Length of Heading' TO lcl_it_headerrow. APPEND 'Length of Short-Label' TO lcl_it_headerrow. APPEND 'Length of Medium-Label' TO lcl_it_headerrow. APPEND 'Length of Long-Label' TO lcl_it_headerrow. APPEND 'Short Text' TO lcl_it_headerrow. APPEND 'Heading Text' TO lcl_it_headerrow. APPEND 'Short Label Text' TO lcl_it_headerrow. APPEND 'Medium Label Text' TO lcl_it_headerrow. APPEND 'Long Label Text' TO lcl_it_headerrow. APPEND 'Active-Flag' TO lcl_it_headerrow. APPEND 'Search Help Name' TO lcl_it_headerrow. APPEND 'Search Help Parameter' TO lcl_it_headerrow.

* *

Umwandlung in HTML-Tabelle ******************************************************* PERFORM create_htmltab_header USING lcl_it_headerrow

lcl_header. LOOP AT it_dataelements INTO wa_dataelements. MOVE-CORRESPONDING wa_dataelements TO lcl_wa_idataelements. PERFORM create_htmltab_body USING lcl_wa_idataelements. ENDLOOP. * PERFORM create_html_tab_foot. ******************************************************** CONCATENATE 'Dataelements_' global_main_name INTO lcl_dataelements_name. CLEAR filename. CONCATENATE new_dir '\' lcl_dataelements_name '.xml' INTO filename. * begin of changes for partner namespace TRANSLATE filename USING '/_'. * end of changes for partner namespace PERFORM call_ws_download USING filename it_html "it_dataelements CHANGING lcl_subrc. IF lcl_subrc 0. *Protokollliste schreiben. PERFORM write_protocol USING 'E' text022 lcl_dataelements_name filename. ELSE. *Protokollliste schreiben. PERFORM write_protocol USING 'N' text022 lcl_dataelements_name filename. *Stueckliste schreiben PERFORM write_stueckliste USING 'Dataelements' 'Dataelements' global_main_name. ENDIF. ENDIF. "Tabelle it_dataelements gefuellt????? ENDFORM. " DATAELEMENTS_DOWNLOAD *&---------------------------------------------------------------------* *& Form CREATE_DIRECTORY *&---------------------------------------------------------------------* * Anlegen eines Verzeichnis aus dem Uebergabeparameter P_NAME und * dem Basisverzeichnis (DIR). Je nach Typ des anzulegenden * Verzeichnisses (Parameter P_TYPUS) wird vor P_NAME ein * entsprechendes Praefix angehaengt. * Die Methode zur Verzeichnisanlage wird je nach Implementierung im * System unterschiedlich aufgerufen. *----------------------------------------------------------------------* FORM create_directory USING p_name TYPE any p_typus TYPE c. *Sicherung des Verzeichniss bei Entwicklungsklasssenelementen * DATA: lcl_path TYPE rlgrap-filename. DATA: lcl_path TYPE string. *Bereich fuer Lesen der Parameter DATA: lcl_wa_vseoparam TYPE vseoparam.

*Variablen je nach Typisierung de DATA: lcl_char(128) TYPE c. DATA: lcl_string TYPE string. DATA: l_name(40) TYPE c. l_name = p_name. *** alle slashes im Filenamen entfernen TRANSLATE l_name USING '/_'. *Initialisieren des Flags zur Ueberpruefung, ob Verzeichnis schon *existiert. CLEAR direxists. *initialsieren des Verzeichnisnamens CLEAR new_dir. *Wenn Entwicklungsklassenselektion vorliegt Basisverzeichnis *setzen (nicht wenn Beasisvereichnis angelegt wird IF p_devc = 'X' AND p_typus 'Devc'. lcl_path = dir. dir = dc_path. ENDIF. *Wenn Transportauftrag vorliegt Basisverzeichnis *setzen (nicht wenn Beasisvereichnis angelegt wird) IF p_trkorr = 'X' AND p_typus 'T'. lcl_path = dir. dir = tr_path. ENDIF. *Pruefen wie der Parameter Directory der Methode typisiert ist SELECT SINGLE * FROM vseoparam INTO lcl_wa_vseoparam WHERE clsname = 'CL_GUI_FRONTEND_SERVICES' AND cmpname = 'DIRECTORY_CREATE'. IF lcl_wa_vseoparam-type = 'C'. "Typisierung mit Char *Zusammensetzen des Verzeichnisnamen aus root und Rahmenprogrammname *je nach Typ des Rahmenprogramms IF p_typus = 'R'. "Report/Modulpoole CONCATENATE dir '\RM_' l_name INTO new_dir. ASSIGN new_dir TO . ELSEIF p_typus = 'F'. "Funktionsgruppen CONCATENATE dir '\FG_' l_name INTO new_dir. ASSIGN new_dir TO . ELSEIF p_typus = 'C'. "Klassen OO CONCATENATE dir '\OC_' l_name INTO new_dir. ASSIGN new_dir TO . ELSEIF p_typus = 'I'. "Interface OO CONCATENATE dir '\OI_' l_name INTO new_dir. ASSIGN new_dir TO . ELSEIF p_typus = 'ORG'. "Basistype IDOC. CONCATENATE dir '\IB_' l_name INTO new_dir. ASSIGN new_dir TO . ELSEIF p_typus = 'EXT'. "IDOC-Enhancemenet CONCATENATE dir '\IE_' l_name INTO new_dir.

ASSIGN new_dir TO . ELSEIF p_typus = 'E'. "CMOD-Erweiterung CONCATENATE dir '\EP_' l_name INTO new_dir. ASSIGN new_dir TO . ELSEIF p_typus = 'S'. "IAC_Service CONCATENATE dir '\IAC_' l_name INTO new_dir. ASSIGN new_dir TO . ELSEIF p_typus = 'Devc'. "Entwicklungsklasse CONCATENATE dir '\DC_' l_name INTO new_dir. *Basisverzeichnis fuer Entwicklungsklasse schreiben dc_path = new_dir. ASSIGN new_dir TO . CLEAR dir. dir = new_dir. ELSEIF p_typus = 'B'. "Badiimplementierung CONCATENATE dir '\BI_' l_name INTO new_dir. ASSIGN new_dir TO . ELSEIF p_typus = 'T'. "Transportrequest CONCATENATE dir '\TR_' l_name INTO new_dir. *Basisverzeichnis fuer Tranportauftraege schreiben tr_path = new_dir. ASSIGN new_dir TO . CLEAR dir. dir = new_dir. ELSEIF p_typus = 'M'. "Modifikationen CONCATENATE dir '\Modifications' INTO new_dir. ASSIGN new_dir TO . ELSEIF p_typus = 'L'. "Logische Entwicklung CONCATENATE dir '\' l_name INTO new_dir. ASSIGN new_dir TO . ELSEIF p_typus = 'TA'. "Transaktionscode CONCATENATE dir '\TA_' l_name INTO new_dir. ASSIGN new_dir TO . ELSEIF p_typus = 'SUB'. "Unterobjekte in Klassen CONCATENATE dir '\S' INTO new_dir. ASSIGN new_dir TO . ENDIF. "Art des Verzeichnisses *Ueberpruefen, ob Verzeichnis bereits angelegt worden ist READ TABLE it_directory_list WITH KEY dir = TRANSPORTING NO FIELDS. IF sy-subrc 0. CALL METHOD cl_gui_frontend_services=>directory_create EXPORTING directory = CHANGING rc = rc EXCEPTIONS directory_create_failed = 1 cntl_error = 2 OTHERS = 3. IF sy-subrc 0. Im Feherfall; Verzeichnis existiert schon; Falscher root Information message wegen Popup-Verhalten MESSAGE i888(sabapdocu) WITH 'Error on creating directory:' new_dir

* *

*

'! The chosen root path must exist!' 'Please check your File System!'. Zur Aufrufstelle zurckspringen; Neuer Programmstart SET SCREEN 0. STOP. ENDIF. "Ergebnis der Verzeichnisanlage

*

* *

*

Absetzen der Verzeichnisanlage Queue CALL METHOD cl_gui_cfw=>flush EXCEPTIONS cntl_system_error = 1 cntl_error = 2 OTHERS = 3. IF sy-subrc 0. Im Feherfall; Verzeichnis existiert schon; Falscher root Information message wegen Popup-Verhalten MESSAGE i888(sabapdocu) WITH 'Error on creating directory:' new_dir '! The chosen root path must exist!' 'Please check your File System!'. Zur Aufrufstelle zurckspringen; Neuer Programmstart SET SCREEN 0. STOP. ENDIF. "Ergebnis der asynchronen Verarbeitung Ueberpruefung des Returncodes der Methode IF rc 0. Im Feherfall; Verzeichnis existiert schon; Falscher root Information message wegen Popup-Verhalten MESSAGE i888(sabapdocu) WITH 'Error on creating directory:' new_dir '! The chosen root path must exist!' 'Please check your File System!'. Zur Aufrufstelle zurckspringen; Neuer Programmstart SET SCREEN 0. STOP. ENDIF. "RC-Abfrage Erstelltes Verzeichnis an Verzeichnistabelle anhaengen MOVE TO wa_directory_list-dir. APPEND wa_directory_list TO it_directory_list. ELSE. direxists = 'X'. ENDIF. "Verzeichnis bereits erstellt ELSEIF lcl_wa_vseoparam-type = 'STRING'. "Typisierung mit String

* * *

*

*

*Zusammensetzen des Verzeichnisnamen aus root und Rahmenprogrammname *je nach Typ des Rahmenprogramms IF p_typus = 'R'. "Report/MOdulpoole CONCATENATE dir '\RM_' l_name INTO new_dir. lcl_string = new_dir. ASSIGN lcl_string TO . ELSEIF p_typus = 'F'. "Funktionsgruppe CONCATENATE dir '\FG_' l_name INTO new_dir.

lcl_string = new_dir. ASSIGN lcl_string TO . ELSEIF p_typus = 'C'. "OO Klassen CONCATENATE dir '\OC_' l_name INTO new_dir. lcl_string = new_dir. ASSIGN lcl_string TO . ELSEIF p_typus = 'I'. "OO Interface CONCATENATE dir '\OI_' l_name INTO new_dir. lcl_string = new_dir. ASSIGN lcl_string TO . ELSEIF p_typus = 'ORG'. "IDOC-Basis. CONCATENATE dir '\IB_' l_name INTO new_dir. lcl_string = new_dir. ASSIGN lcl_string TO . ELSEIF p_typus = 'EXT'. "IDOc-Erweiterung CONCATENATE dir '\IE_' l_name INTO new_dir. lcl_string = new_dir. ASSIGN lcl_string TO . ELSEIF p_typus = 'E'. "CMOD-Projekt CONCATENATE dir '\EP_' l_name INTO new_dir. lcl_string = new_dir. ASSIGN lcl_string TO . ELSEIF p_typus = 'S'. "IAC_Service CONCATENATE dir '\IAC_' l_name INTO new_dir. lcl_string = new_dir. ASSIGN lcl_string TO .. ELSEIF p_typus = 'Devc'. "Entwicklungsklasse CONCATENATE dir '\DC_' l_name INTO new_dir. *Basisverzeichnis fuer Entwicklungsklasse dc_path = new_dir. lcl_string = new_dir. ASSIGN lcl_string TO . CLEAR dir. dir = new_dir. ELSEIF p_typus = 'B'. "Badiimplementierung CONCATENATE dir '\BI_' l_name INTO new_dir. lcl_string = new_dir. ASSIGN lcl_string TO . ELSEIF p_typus = 'T'. "Transportauftrag CONCATENATE dir '\TR_' l_name INTO new_dir. *Basisverzeichnis fuer Tranportauftraege schreiben tr_path = new_dir. lcl_string = new_dir. ASSIGN lcl_string TO . CLEAR dir. dir = new_dir. ELSEIF p_typus = 'M'. "Modifikationen CONCATENATE dir '\Modifications' INTO new_dir. lcl_string = new_dir. ASSIGN lcl_string TO . ELSEIF p_typus = 'L'. "Logische Entwicklung CONCATENATE dir '\' l_name INTO new_dir. lcl_string = new_dir. ASSIGN lcl_string TO . ELSEIF p_typus = 'TA'. "Transaktionscode CONCATENATE dir '\TA_' l_name INTO new_dir. lcl_string = new_dir. ASSIGN lcl_string TO . ELSEIF p_typus = 'SUB'. "Unterobjekte von Klassen CONCATENATE dir '\S' INTO new_dir.

lcl_string = new_dir. ASSIGN lcl_string TO . ENDIF. "Art des Verzeichnisse *Ueberpruefen, ob Verzeichnis bereits angelegt worden ist READ TABLE it_directory_list WITH KEY dir = TRANSPORTING NO FIELDS. IF sy-subrc 0. CALL METHOD cl_gui_frontend_services=>directory_create EXPORTING directory = CHANGING rc = rc EXCEPTIONS directory_create_failed = 1 cntl_error = 2 ERROR_NO_GUI = 3 PATH_NOT_FOUND = 4 DIRECTORY_ACCESS_DENIED = 5 DIRECTORY_ALREADY_EXISTS = 6 UNKNOWN_ERROR = 7 OTHERS = 8 . IF sy-subrc 0. Information message wegen Popup-Verhalten MESSAGE i888(sabapdocu) WITH 'Error on creating directory:' new_dir '! The chosen root path must exist!' 'Please check your File System!'. Zur Aufrufstelle zurckspringen; Neuer Programmstart SET SCREEN 0. STOP. ENDIF. Erstelltes Verzeichnis an Verzeichnistabelle anhaengen MOVE TO wa_directory_list-dir. APPEND wa_directory_list TO it_directory_list. ELSE. direxists = 'X'. ENDIF. "Verzeichnis bereits angelegt ENDIF. "Art der Parametrisierung: Stirng oder Char UNASSIGN . *Ruecksichern des Verzeichnisses bei Entwicklungsklassen IF p_devc = 'X' AND p_typus 'Devc'. dir = lcl_path. ENDIF. *Ruecksichern des Verzeichnisses bei Transportauftraegen IF p_trkorr = 'X' AND p_typus 'T'. dir = lcl_path. ENDIF.

* * * * *

*

*

*

ENDFORM.

" CREATE_DIRECTORY

*&---------------------------------------------------------------------* *& Form INITIALIZE *&---------------------------------------------------------------------* * Initialisierung von globalen Tabellen. *----------------------------------------------------------------------* FORM initialize. REFRESH it_prog_stueckliste. "Stueckliste REFRESH it_dataelements. "Datenelemente REFRESH it_dd01v. "Domaenenheader REFRESH it_dd07v. "Festwertehilfen REFRESH it_tobj. "Berechtigungsobjekte REFRESH it_tactz. "Aktivitaeten von Berechtigungsobjekten REFRESH it_authx. "Tabelle der Berechtigungsfelder REFRESH it_tstc. "Tabelle mit zu einem Programm zugeordneten TA-Codes REFRESH it_collectmains. "externe Aufrufe in externen Aufrufen REFRESH it_d347t. "Titlebar REFRESH it_fkgrp_struktur. "Funtionsgruppenstruktur REFRESH it_tstcp. "TA-Codes einer Klasse. REFRESH it_tdct. "Dialogbausteinuebersicht REFRESH it_diapar. "Parameter fuer Dialogbaustein REFRESH it_tpara. "Tabelle der set/get-Parameter REFRESH it_classlist. "Klassenliste initialisieren ENDFORM. " INITIALIZE

*&---------------------------------------------------------------------* *& Form HANDLE_EXTPROG *&---------------------------------------------------------------------* * Lesen von aufgerufenen Objekten des im Parameter P_NAME * angegebenen Rahmenprogrammes. * Funktionsbausteine, Sperrobjekte, Meldungen, Programmaufrufen * Berechtigungsobjekten und Set/Get-Parametern *----------------------------------------------------------------------* FORM handle_extprog USING p_name LIKE wa_trdir-name. *Lokale Bereich zur Aufnahme der Fktbst-Rueckgabewerte *1.) Name der definierten Variablen (wird nicht verwendet DATA: lcl_it_compo TYPE STANDARD TABLE OF scompo, lcl_wa_compo LIKE LINE OF lcl_it_compo. *2.)aufgerufene Includes: bereits behandelt DATA: lcl_it_inc TYPE STANDARD TABLE OF d010inc, lcl_wa_inc LIKE LINE OF lcl_it_inc. *->Nur se Tabelle wird auch wirklich verwendet *3.)Referenzen: Funktionsbausteine, Messages, Externe Programme DATA: lcl_it_cross_ref TYPE STANDARD TABLE OF cross, lcl_wa_cross_ref LIKE LINE OF lcl_it_cross_ref. *4.)Sperrobjektname fr Patnernamensraum aufbereiten DATA: lcl_enqueue TYPE string, lcl_dequeue TYPE string, lcl_len TYPE i. *Hilfsarbeitsbereich um Festzustellen ob ein Funktionsbaustein *zu dieser Funktionsgruppe gehoert (nur bei funtkionsgruppen) DATA: lcl_wa_tfdir TYPE tfdir.

*Namen fr Sperrobjekte zusammenbauen IF p_nspace(1) = '/'. CONCATENATE 'ENQUEUE_' p_nspace 'E' INTO lcl_enqueue. CONCATENATE 'DEQUEUE_' p_nspace 'E' INTO lcl_dequeue. lcl_len = STRLEN( lcl_enqueue ). ELSE. lcl_len = 1. ENDIF. *Lesen der vom Include aufgerufenen Objekte * CALL FUNCTION 'RS_PROGRAM_INDEX' * EXPORTING * pg_name = p_name ** WITHOUT_TREE = ' ' ** IMPORTING ** MESSAGE_CLASS = * TABLES * compo = lcl_it_compo * cross_ref = lcl_it_cross_ref * inc = lcl_it_inc ** EXCEPTIONS ** SYNTAX_ERROR = 1 ** OTHERS = 2 * . PERFORM rs_program_index USING p_name CHANGING lcl_it_cross_ref. * IF sy-subrc = 0. "Es sind keine Fehler aufgetreten *Wenn vorhanden Verarbeitung der Objetkliste (Messages, Funktionen). IF NOT ( lcl_it_cross_ref IS INITIAL ). *Nur betrachten wo externe Verweise in Programmen *des Kundennamensraumes gemacht worden sind, bzw. Partnernamensraum. LOOP AT lcl_it_cross_ref INTO lcl_wa_cross_ref. IF NOT ( ( lcl_wa_cross_ref-include(1) = 'Z' ) "Includes OR ( lcl_wa_cross_ref-include(1) = 'Y' ) OR ( lcl_wa_cross_ref-include(2) = 'LZ' ) OR ( lcl_wa_cross_ref-include(2) = 'LY' ) OR ( lcl_wa_cross_ref-include(g_len_nspace) = p_nspace ) ). CONTINUE. ENDIF. *Behandlung je nach Typ CASE lcl_wa_cross_ref-type. WHEN 'N'. "Verarbeitung von messages PERFORM handle_message USING lcl_wa_cross_ref. WHEN 'F'. "Verarbeitung Funktionsbaustein *Behandlung von normalen Funktionsbausteinen in Kundennamensraum. *Ueberpruefen, ob der aufgerufene Funktionsbaustein im aufrufenden *Programm liegt (nur bei Funktionsgruppen der Fall )-->Zirkelbezug. SELECT SINGLE * FROM tfdir INTO lcl_wa_tfdir WHERE funcname = lcl_wa_cross_ref-name AND pname = p_name. IF sy-subrc 0. "Dies trifft nicht zu "Kundennamenraum ueberpruefen; auch Funktionsgruppe IF ( ( lcl_wa_cross_ref-name(1) = 'Z' ) OR ( lcl_wa_cross_ref-name(1) = 'Y' ) OR ( lcl_wa_cross_ref-name(g_len_nspace) = p_nspace ) ).

PERFORM handle_functionmodule USING lcl_wa_cross_ref. ENDIF. "Kundennamensraum ENDIF. "sy-subrc *Behandlung von Sperrobjekten im Kundennamensraum IF ( ( lcl_wa_cross_ref-name(10) = 'ENQUEUE_EZ' ) OR ( lcl_wa_cross_ref-name(10) = 'ENQUEUE_EY' ) OR ( lcl_wa_cross_ref-name(lcl_len) = lcl_enqueue ) OR ( lcl_wa_cross_ref-name(10) = 'DEQUEUE_EZ' ) OR ( lcl_wa_cross_ref-name(10) = 'DEQUEUE_EY' ) OR ( lcl_wa_cross_ref-name(lcl_len) = lcl_dequeue ) ). PERFORM handle_lockobject USING lcl_wa_cross_ref 'F'. "Name ist ein Funktionsbausteinname ENDIF. WHEN 'R'. "Aufruf eines anderen Reports (submit program) IF ( ( lcl_wa_cross_ref-name(1) = 'Z' ) OR ( lcl_wa_cross_ref-name(1) = 'Y' ) OR ( lcl_wa_cross_ref-name(g_len_nspace) = p_nspace ) ). PERFORM handle_submits USING lcl_wa_cross_ref. ENDIF. WHEN 'U'. "Aufruf einer Form in einem anderen Programm IF ( ( lcl_wa_cross_ref-prog(1) = 'Z' ) OR ( lcl_wa_cross_ref-prog(1) = 'Y' ) OR ( lcl_wa_cross_ref-prog(g_len_nspace) = p_nspace ) ). PERFORM handle_performextern USING lcl_wa_cross_ref. ENDIF. WHEN 'T'. "Behandlung von Transaktionen (call transaction) IF ( ( lcl_wa_cross_ref-name(1) = 'Z' ) OR ( lcl_wa_cross_ref-name(1) = 'Y' ) OR ( lcl_wa_cross_ref-name(g_len_nspace) = p_nspace ) ). PERFORM handle_transaction USING lcl_wa_cross_ref. ENDIF. WHEN 'A'. "Behandlung von Berechtigungsobjekten IF ( ( lcl_wa_cross_ref-name(1) = 'Z' ) OR ( lcl_wa_cross_ref-name(1) = 'Y' ) OR ( lcl_wa_cross_ref-name(g_len_nspace) = p_nspace ) ). PERFORM handle_authorityobject USING lcl_wa_cross_ref. ENDIF. WHEN 'D'. "Dialogbaustein IF ( ( lcl_wa_cross_ref-name(1) = 'Z' ) OR ( lcl_wa_cross_ref-name(1) = 'Y' ) OR ( lcl_wa_cross_ref-name(g_len_nspace) = p_nspace ) ). PERFORM handle_dialogmodule USING lcl_wa_cross_ref. ENDIF. WHEN 'P'. "set/get Parameterpaar IF ( ( lcl_wa_cross_ref-name(1) = 'Z' ) OR ( lcl_wa_cross_ref-name(1) = 'Y' ) OR ( lcl_wa_cross_ref-name(g_len_nspace) = p_nspace ) ) . PERFORM handle_setgetparamss USING lcl_wa_cross_ref. ENDIF. WHEN 'G'. "Typgruppe IF ( ( lcl_wa_cross_ref-name(1) = 'Z' ) OR ( lcl_wa_cross_ref-name(1) = 'Y' ) OR ( lcl_wa_cross_ref-name(g_len_nspace) = p_nspace ) ). PERFORM handle_typgroups USING lcl_wa_cross_ref. ENDIF. ENDCASE. ENDLOOP. ENDIF.

* ENDIF. ENDFORM. " HANDLE_EXTPROG

*&---------------------------------------------------------------------* *& Form HANDLE_MESSAGE *&---------------------------------------------------------------------* * Lesen der Meldungsinformationen, die in Uebergabestruktur * angegeben ist. Anhaengen an Gesmttabelle fuer Meldungen. *----------------------------------------------------------------------* FORM handle_message USING p_wa_cross_ref TYPE cross. *Lokale Variablen zum zerlegen der messagevariable in *Klasse und Nummer. DATA: lcl_message_class TYPE t100-arbgb, lcl_message_nr TYPE t100-msgnr. *Feld um den Namen der Message (Klasse/Name) in Stckliste aufnehmen zu *knnen. DATA: lcl_message_name TYPE trdir-name. *Db-Feld auseinandernehmen lcl_message_class = p_wa_cross_ref-name(20). lcl_message_nr = p_wa_cross_ref-name+20(3). *Nur Behandeln, wenn Messageclass/arbeitsbereich im Kundennamensraum *liegt IF ( ( lcl_message_class(1) = 'Z' ) OR ( lcl_message_class(1) = 'Y' ) OR ( lcl_message_class(g_len_nspace) = p_nspace ) ). LOOP AT it_lan INTO wa_lan. *Name fr Stckliste zusammensetzen CONCATENATE lcl_message_class '/' lcl_message_nr '/' wa_lan INTO lcl_message_name. CLEAR wa_messages. *Messagetabelle lesen mit Schlssel nur bei Fehler nichts tun SELECT SINGLE * FROM t100 INTO wa_messages WHERE arbgb = lcl_message_class AND msgnr = lcl_message_nr AND sprsl = wa_lan. IF sy-subrc = 0. *berprfen ob diese Meldung schon in Messagetabelle enthalten ist. *Wenn enthalten nur noch in Stckliste aufnehmen und nicht mehr in *Messagetabelle. READ TABLE it_messages WITH TABLE KEY arbgb = lcl_message_class msgnr = lcl_message_nr sprsl = wa_lan TRANSPORTING NO FIELDS. IF sy-subrc 0. *Schreiben der Gesamt-Messagetabellle APPEND wa_messages TO it_messages. ENDIF. *Schreiben der Stckliste, nicht lnderspezifisch nur einmal PERFORM write_stueckliste USING 'MSG' lcl_message_name p_wa_cross_ref-include. ENDIF. ENDLOOP. "Sprachentabelle.

ENDIF. "Ueberpruefung Kundennamensraum ENDFORM. " HANDLE_MESSAGE

*&---------------------------------------------------------------------* *& Form DOWNLOAD_MESSAGES *&---------------------------------------------------------------------* * Sicherung der globalen Nachrichtentabelle ins lokale Dateisystem. * Generierung der Tabelle in HTML-Format. *----------------------------------------------------------------------* FORM download_messages. * subrc fr Downloadform-routine DATA: lcl_subrc TYPE sy-subrc. *Name fuer die Gesamtmessagetabelle des Rahmenprogramms DATA: lcl_messagetab_name TYPE string. *Variable fuer Kopfzeile DATA: lcl_header TYPE string. *Headertabelle fuer HTML-Tabelle DATA: lcl_it_headerrow TYPE STANDARD TABLE OF string. *Nur Download durchfhren wenn Messgetabelle nicht leer ist. IF NOT ( it_messages IS INITIAL ). CONCATENATE 'Messagetable_' global_main_name INTO lcl_messagetab_name. *Umwandlung in HTML-Tabelle ******************************************************** *Ueberschrift zusammenbauen CONCATENATE 'Messages in Customer Name Space of Object' global_main_name INTO lcl_header SEPARATED BY space. *Headertabelle zusammenbauen APPEND 'Language' TO lcl_it_headerrow. APPEND 'Working Area' TO lcl_it_headerrow. APPEND 'Message Number' TO lcl_it_headerrow. APPEND 'Message Text' TO lcl_it_headerrow. PERFORM create_htmltab_header USING lcl_it_headerrow lcl_header. LOOP AT it_messages INTO wa_messages. PERFORM create_htmltab_body USING wa_messages. ENDLOOP. PERFORM create_html_tab_foot. ********************************************************* CLEAR filename. CONCATENATE new_dir '\' lcl_messagetab_name '.xml' INTO filename. * * begin of changes for partner namespace TRANSLATE filename USING '/_'. end of changes for partner namespace PERFORM call_ws_download USING filename it_html "it_messages CHANGING lcl_subrc. IF lcl_subrc 0.

*Protokollliste schreiben. PERFORM write_protocol USING 'E' text020 lcl_messagetab_name filename. ELSE. *Protokollliste schreiben. PERFORM write_protocol USING 'N' text020 lcl_messagetab_name filename. ENDIF. ENDIF. "Download nur wen Messagetabelle nicht leer ist ENDFORM. " DOWNLOAD_MESSAGES

*&---------------------------------------------------------------------* *& Form HANDLE_FUNCTIONMODULE *&---------------------------------------------------------------------* * Verarbeitung des in der Uebergabestruktur angegebenen * Funktionsbausteins. Zugehoerig Funktionsgruppe wird an * Tabelle zur spteren Verarbeitung von Rahmenprogrammen * angehaengt. *----------------------------------------------------------------------* FORM handle_functionmodule USING p_wa_cross_ref TYPE cross. *Lokale Defintion des Funktionsgruppennamens DATA: lcl_fktgroup_name LIKE wa_trdir-name. DATA: lcl_devc_name LIKE wa_trdir-name. *Sicherung des globalen Namens DATA: lcl_name LIKE wa_trdir-name. * Area for devclass. DATA: lcl_devc TYPE tadir-devclass. * Variables for dividing in partner namespace DATA: lcl_include TYPE rs38l-include. DATA: lcl_namespace TYPE rs38l-namespace. DATA: lcl_without TYPE rs38l-include. *Funktionsbaustein verarbeiten; Herunterladen der gesamten *Funktionsgruppe wegen eventueller Beziehungen *Suche der Funktionsgruppe ber den Fktbausteinname in tfdir SELECT SINGLE pname FROM tfdir INTO lcl_fktgroup_name WHERE funcname = p_wa_cross_ref-name. IF sy-subrc = 0. "Der Funktionsbaustein existiert * * Check whether this object belongs to the selected dev-class IF NOT p_devc IS INITIAL. Get name without namespace IF lcl_fktgroup_name(1) = '/'. lcl_include = lcl_fktgroup_name. CALL FUNCTION 'RS_PROGNAME_SPLIT' EXPORTING progname_with_namespace = lcl_include IMPORTING namespace = lcl_namespace progname_without_namespace = lcl_without. IF sy-subrc 0. EXIT. ELSE. CONCATENATE lcl_namespace lcl_without+4 INTO lcl_devc_name . ENDIF.

ELSE. "normal name space lcl_devc_name = lcl_fktgroup_name+4. ENDIF. SELECT SINGLE devclass FROM tadir INTO lcl_devc WHERE pgmid = 'R3TR' AND object = 'FUGR' AND obj_name = lcl_devc_name. CHECK lcl_devc IN o_devcl. ENDIF. *berpruefen, ob Funktionsgruppe runtergeladen worden ist. READ TABLE it_prog_stueckliste WITH KEY name = lcl_fktgroup_name TRANSPORTING NO FIELDS.