Smart Forms Generierter Funktionsbaustein

Aus SAP-Wiki
Zur Navigation springenZur Suche springen

Siehe Smart Forms.

Bei der Aktivierung eines Smart Forms wird vom Formulargenerator ein Funktionsbaustein erzeugt, der im Druckrahmenprogramm aufgerufen wird zur Formularausgabe.

Aufruf Generierter Funktionsbaustein im Druckprogramm

Data: fm_name type rs38l_fnam.

call function fm_name
   exporting
      customer             = customer
      bookings             = bookings
      connections          = connections
    exceptions 
       formatting_error    = 1
       internal_error      = 2
       send_error          = 3
       user_canceled       = 4
       others              = 5.

Ermittlung Funktionsbaustein zum Formular (Funktionsbaustein SSF_FUNCTION_MODULE_NAME)

  • Der generierte Funktionsbaustein ist in jedem System (Entwicklungs-, Qualitäts-, Produktivsystem) identisch vom Coding, aber hat unterschiedliche Namen und daher wird der Name des Funktionsbausteins in der Variablen FM_NAME dynamisch bestimmt vom Funktionsbaustein SSF_FUNCTION_MODULE_NAME.
  • Die Generierung des Funktionsbausteins geschieht beim ersten Aufruf des Formulars im Zielsystem. Daher braucht der erste Aufruf eines Formulars im Qualitäts-/Produktivsystem auch deutlich länger als jede weitere Formularausgabe.
call function 'SSF_FUNCTION_MODULE_NAME'
     exporting  formname           = p_form    "ZSF_EXAMPLE_01_BEOSIT
     importing  fm_name            = fm_name
     exceptions no_form            = 1
                no_function_module = 2
                others             = 3.

Identifikation Smart Forms-Formular bei der Druckausgabe

  • Manchmal wird ein Smart Forms auf den Bildschirm ausgegeben, aber es ist nicht der Name des Smart Forms bekannt
  • Hier kann man im Funktionsbaustein SSF_FUNCTION_MODULE_NAME einen Breakpoint setzen und bei Ausführen der Anwendung wird der Funktionsbaustein angesprungen, sofern es ein Smart Forms-Formular ist
  • Im Importparameter FORMNAME ist der generierte Funktionsbausteinname zu sehen. Hier ZSF_EXAMPLE_01_BEOSIT
  • Wird bei der Ausgabe der Breakpoint nicht im Debugger angesprungen, so kann man recht sicher sein, dass das ausgegebene Formular kein Smart Forms ist, da der Funktionsbaustein SSF_FUNCTION_MODULE_NAME bei jedem Smart Forms-Aufruf durchlaufen wird.
  • Siehe Identifikation Formulartechnologien (auch für SAPscript und Adobe Forms).

SmartFormsName1.jpg

Identifikation generierter Funktionsbaustein zu einem Smart Forms

  • Es ist sehr oft nützlich sein den generierten Funktionsbaustein zu identifizieren und Formularfunktionalität in ihm debuggen zu können.
  • Es gibt eine Reihe von Möglichkeiten den Namen des Funktionsbausteins zu finden


Transaktion SMARTFORMS aus dem Einstiegsbildschirm

  1. Transaktion SMARTFORMS aufrufen
  2. Formular eingeben
  3. F8 oder auf die Schaltfläche SmartFormsFormular7.jpg drücken

SmartFormsFormular1.jpg


Das SAP-System springt in den Function Builder SE37 und zeigt den Funktionsbausteinnamen an

SmartFormsFormular2.jpg


Menü "Umfeld - Name des Funktionsbausteins" in Transaktion SMARTFORMS

  • Über das Menü "Umfeld - Name des Funktionsbausteins"

SmartFormsFormular3.jpg


Im Dialogfenster ist der Name des Funktionsbausteins abzulesen

SmartFormsFormular4.jpg

Im Druckprogramm mit Funktionsbaustein SSF_FUNCTION_MODULE_NAME

  1. Druckprogramm aufrufen in der Transaktion SE80 oder SE38
  2. Breakpoint setzen im Aufruf des Funktionsbausteins SSF_FUNCTION_MODULE_NAME, bzw Im Funktionsbaustein SSF_FUNCTION_MODULE_NAME
  3. Programm/Anwendung ausführen
  • In der Variablen P_FORM steht der Name des Smart Forms-Formulars ZREB_SF_EXAMPLE_01
  • In der Variablen FM_NAME steht der Name des generierten Funktionsbausteins /1BCDWB/SF00000054

SmartFormsFormular6.jpg

Repräsentation Objekte aus Form Builder im Funktionsbaustein

SFFuba1.jpg

  • Das Feld "Kurzbeschreibung" (hier "beim Faxen!") bei Knotenelementen ist nur im Form Builder sichtbar und wird nicht in den generierten Funktionsbaustein geschrieben.
  • Der technische Name der Knotens im Form Builder ist allerdings in aller Regel im generierten Funktionsbaustein zu finden
  • Daher empfiehlt es sich zur guten Orientierung im Form Builder UND im generierten Funktionsbaustein den technischen Namen eines Knotens sprechend zu vergeben. Oft kann dann die Kurzbeschreibung eines Knotens im Form Builder leer bleiben.

Suchen lässt sich nach den technischen Knotennamen der Knotenarten

  • Adresse
  • Fenster
  • Ordner
  • Grafik
  • Loop
  • Programmzeilen
  • Schablone
  • Tabelle
  • Textknoten

Fenster

Nebenfenster

In diesem Beispiel heißt das Fenster "FAX".

SFFuba1.jpg


In der Layoutansicht vom Form Builder werden die Fenster grafisch in der Übersicht dargestellt.

SFFuba2.jpg


Sucht man nach "fax"

SFFuba3.jpg


So werden mehrere Fundstellen aufgelistet, aber nur eine Fundstelle mit "NODE FAX".

SFFuba4.jpg

Ein Fenster erkennt man im generierten Funktionsbaustein an dem Kommentar "NODE <fenstername", hier "NODE FAX".

SFFuba5.jpg


Die Suche nach "node fax" ergibt somit auch nur eine Fundstelle.

SFFuba6.jpg


SFFuba7.jpg

Hauptfenster (MAIN)

Das Hauptfenster vom Formular unterscheidet sich prinzipiell nicht von den Nebenfenstern bezüglich der Suche im generierten Funktionsbaustein.

MAIN1.jpg


MAIN2.jpg


Die Suche nach "node main" ergibt nur eine Fundstelle.

MAIN3.jpg

Adresse

In diesem Beispiel gibt es 2 Adressknoten. Einmal mit Namen "VARI_ADDRESS" und mit "VARI_ADRESSE".

SFFuba9.jpg

Die Suche nach "vari_address" findet beide Adressknoten.

SFFuba8.jpg

Beim Coding mit dem Adressknoten im Funktionsbaustein sieht man auch die Parameter vom Adressknoten, z. B. die Adressnummer &IS_PICK_LIST_HEAD-ZSD_ADRESSE-ADRNR&.

SFFuba10.jpg

Alternative

Die Suche nach dem Namen des Alternativknotens ergibt leider keine Fundstelle, wie hier die Suche nach "ADRNR_LEER_ODER_GEFUELLT".

Alternative1.jpg


Man kann sich behelfen, indem man nach den Variablen im Reiter "Allgemeine Eigenschaften" sucht, die die Unterscheidung zwischen TRUE und FALSE bewirken.

Alternative2.jpg


Alternative3.jpg


Alternative5.jpg


Genauso kann man nach dem ersten Objekt unter dem TRUE-Knoten suchen, hier nach "ALTE_ADRESSDARSTELLUNG".

Alternative4.jpg


Alternative6.jpg


Alternative7.jpg

Im generierten Funktionsbaustein erkennt man Alternativen an dem "if - else - endif"-Coding.

Grafik

Im Beispiel heißt die Grafik LOGO_SF_LMC.

SFFuba11.jpg


SFFuba12.jpg


Bei der Suche nach "logo_sf_lmc"

SFFuba13.jpg


gibt es eine Fundstelle.

SFFuba14.jpg


Man sieht auch die Parameter vom Grafikknoten und die Bedingung (IS_ORDER_HEAD-VBDKA-VKORG EQ '8200'), unter der in diesem Fall das Logo ausgegeben wird.

SFFuba15.jpg

Kommando

Ein Kommandoknoten löst einen expliziten Übergang auf eine neue Formularseite aus.

SFFuba16.jpg


Hier wird die "PAGE3" angesprungen.

SFFuba17.jpg


Die Suche nach UEBERGANG_PAGE3 gibt keine Fundstelle im generierten Funktionsbaustein aus. Aber man kann sich behelfen mit der Suche nach der Seite "PAGE3", die angesprungen werden soll.

SFFuba18.jpg


Man könnte auch nach dem String "SSFCOMP_SET_NEXT_PAGE" suchen, um Kommandoknoten in einem Formular zu identifizieren.

SFFuba19.jpg

Loop

Eine Schleife kann auch über den technischen Namen gefunden werden.

Loop1.jpg


Die Schleife loopt über GT_LINES into GS_LINES.

Loop2.jpg


Die Suche nach "%LOOP19" findet die Zeile 15631. Ab Zeile 15639 beginnt der Loop und schließt in Zeile 15646.

Loop3.jpg

Programmzeilen

Beim Knotentyp "Programmzeilen" kann nach dem Namen des Knotens gesucht werden oder auch nach dem Coding in den Programmzeilen.

Programmzeilen3.jpg


Programmzeilen4.jpg


Die Suche nach "%code3" führt das Programmzeilencoding auf.

Programmzeilen5.jpg

Schablone

Die Schablone hat hier den (wenig sprechenden) Namen "%SECTION1".

SFFuba20.jpg


SFFuba21.jpg


Die Suche nach "%SECTION1" gibt eine Fundstelle im Funktionsbaustein.

SFFuba22.jpg


SFFuba23.jpg

Tabelle

Tabellenknoten4.jpg


Tabellenknoten3.jpg


Tabellenknoten5.jpg


Tabellenknoten6.jpg

Textknoten

Der Textknoten heißt hier FIRMA_ABSENDERS_1101 und wird unter einer Bedingung ausgeben.

SFFuba24.jpg


SFFuba25.jpg


SFFuba26.jpg


Die Suche nach "FIRMA_ABSENDERS_1101" gibt eine Fundstelle.

SFFuba27.jpg


In Zeile 1097 über dem Textknoten ist auch die Bedingung für die Ausgabe des Textknotens im Coding zu sehen.

SFFuba28.jpg

Repräsentation Codingzeile im Funktionsbaustein mit Objekte aus Form Builder

Man kann sich auf der ersten Seite recht gut orientieren anhand der Codingzeile im generierten Funktionsbaustein. Der Baum im Form Builder wird von oben nach unten abgearbeitet und entsprechend erhöht sich auch die Zeilenzahl.

Hier ist die Zeilenzahl von einigen Fenstern und sonstigen Knoten auf der Seite "PAGE1" protokolliert.

SFKnotenorientierung2.jpg

Auf der nächsten Seite "NEXTPAGE" kann man sich so nicht mehr orientieren, da die meisten Fenster auch auf der Seite PAGE1 auftauchen und im Coding nur einmal erstellt werden. So hat z. B. das Fenster KOMMIAUFTRAG_LIEFERUNG auf NEXTPAGE die Zeilenzahl 861. Das ist identisch mit der Zeilenzahl des Fensters KOMMIAUFTRAG_LIEFERUNG auf PAGE1.

Wenn man nun den Fall hat, das man im Debugger im generierten Funktionsbaustein eine problemrelevante Codingstelle gefunden hat, kann man sich über die Zeilenzahl und Vergleich zur Zeilenzahl von anderen Knoten (die man im Form Builder sieht) der problemrelevanten Stelle im Form Builder schnell annähern.

Web-Links

Literatur