Floorplan Manager (ABAP)

Aus MattWiki

Relevante Klassen

Alle Feeder-Interfaces beinhalten das Interface IF_FPM_GUIBB, das die beiden Methoden INITIALIZE und GET_PARAMETER_LIST umfasst. Beide Methoden werden nur während der Initialisierungsphase des GUIBBs aufgerufen.

Übersicht Feeder-Klassen

Feeder-Klassen bilden die Schnittstelle zwischen der Anwendungslogik und den GUIBB zur Darstellung derUI-Informationen innerhalb der Floorplan-Manager-Anwendung.

Jeder GUIBB benötigt für die Bereitschellung von Daten eine Feeder-Klasse.

Alle Feeder-Interfaces beinhalten das Interface IF_FPM_GUIBB, das die beiden Methoden GET_PARAMETER_LIST und INITIALIZE umfasst. Beide Methoden werden nur während der Initialisierungsphase des GUIBBs aufgerufen.

 GET_PARAMETER_LIST: Eigene Konfigurationsparameter verarbeiten ( z.B. read only )
 INITIALIZE: Wird nach GET_PARAMETER_LIST aufgerufen. Nutzung z.B. zum Laden von Anwendungsobjekten (von der DB) / Sperren setzen etc.


Methoden mit lediglich unterschiedlicher Signatur:

CHECK_CONFIG
   i.d.R. irrelevant
GET_DEFAULT_CONFIG
   i.d.R. irrelevant
GET_DEFINITION
   Wird nach INITIALIZE aufgerufen
   Bestimmt Aufbau Baustein (z.B. welche Eingabefelder hat das Form ) 
GET_DATA
   Bestimmt Inhalt der Oberfläche ( z.B. Text in Textfeld eines Forms )

PROCESS_EVENT
   Verarbeitung von Benutzereingabe (z.B. Suchknopf wurde gedrückt)
   ( evtl. auch Ereignisse von anderen FPM Komponenten z.B. Refresh)
FLUSH
   Benutzereingaben von der Oberfläche in die Anwendung                    übernehmen

Standard-Interface IF_FPM_GUIBB

Feederklassen Programmstart

  1. GET_PARAMETER_LIST: Eigene Konfigurationsparameter verarbeiten ( z.B. read only )
  2. INITIALIZE: Wird nach GET_PARAMETER_LIST aufgerufen. Nutzung z.B. zum Laden von Anwendungsobjekten (von der DB) / Sperren setzen etc.

Feederklassen Programmablauf / Event-Loop

  1. FLUSH -> Daten von Oberfläche an Anwendung übertragen
  2. PROCESS_EVENT -> Besondere Ereignisse ( z.B. Knopfdruck ) verarbeiten
  3. GET_DATA -> Oberfläche mit aktuellen Daten aus Anwendung versorgen; Entspricht PROCESS_BEFORE_OUTPUT

Event-Loop mit mehreren GUIBBs und EV_RESULT = FAILED

Wenn ein Floorplan allerdings drei GUIBBs enthält, dann wird jeder der drei Schritte oben für jeden der drei Events nacheinander durchgelaufen, also folgendermaßen:

  1. FLUSH GUIBB 1
  2. FLUSH GUIBB 2
  3. FLUSH GUIBB 3
  4. PROCESS_EVENT GUIBB 1
  5. PROCESS_EVENT GUIBB 2
  6. PROCESS_EVENT GUIBB 3
  7. GET_DATA GUIBB 1
  8. GET_DATA GUIBB 2
  9. GET_DATA GUIBB 3

Nun sollte man wissen, dass wenn man z.B. den PROCESS_EVENT von GUIBB 1 (in der o.g. Auflistung in 4. Zeile) abbricht mit EV_RESULT = FAILED, dass dann die PROCESS-EVENTs für GUIBB 2 und GUIBB 3 (Zeilen 5 und 6) nicht mehr durchlaufen werden.

Kann man wollen, aber evtl. will man es auch nicht.

Unabhängig, ob PROCESS_EVENT abgebrochen wurde, oder nicht, wird GET_DATA für alle GUIBBs wieder durchlaufen.

Beispielimplementierungen

IF_FPM_GUIBB_LIST->GET_DEFINITION

Signatur der Methode:

EO_FIELD_CATALOG - Enthält Feldkatalog in Form eines Strukturtyps, der alle Komponenten umfasst, die als Felder im Formular verwendet werden können
ET_FIELD_DESCRIPTION - Liste mit Feldbeschreibungen und beschreibenden Informationen zu den einzelnen Feldern
ET_ACTION_DEFINITION - Liste mit möglichen Aktionen


  method IF_FPM_GUIBB_LIST~GET_DEFINITION.

    DATA: lt_field_cat   TYPE ztt_list,
          ls_field_descr TYPE LINE OF fpmgb_t_listfield_descr,
          ls_action_def  type line of fpmgb_t_actiondef.

    eo_field_catalog ?= cl_abap_tabledescr=>describe_by_data( lt_field_cat ).

    ls_field_descr-name = 'LFDNR'.
    ls_field_descr-read_only = abap_true.
    ls_field_descr-condense = 'X'.
    APPEND ls_field_descr TO et_field_description.

    ls_action_def-id = 'SAVEBUTTON'.
    ls_action_def-text = text-001.
    ls_action_def-tooltip = text-001.
    ls_action_def-imagesrc = 'ICON_SYSTEM_SAVE'.
    ls_action_def-enabled = abap_true.
    APPEND ls_action_def TO et_action_definition.
  endmethod.

Anwendungsdaten in Model-Klasse

Empfehlung: Singleton (andere möglich, aber meist umständlich).

UIBB / User Interface Building Blocks

GUIBB / Generische UI Building Blocks

GUIBB-Komponenten inkl. zugehöriger Feeder-Interfaces

  • FPM_FORM_UIBB --> IF_FPM_GUIBB_FORM
  • FPM_LIST_UIBB --> IF_FPM_GUIBB_LIST
  • FPM_SEARCH_UIBB --> IF_FPM_GUIBB_SEARCH

Nur in den seltensten Fällen muss eine eigene Komponente angelegt werden.

Übersetzungen

Texte übersetzen

Nachrichtenklassen und Texte in Klassen werden direkt an den Stellen übersetzt, wo sie eingegeben werden.

Texte für FPM Konfigurationen können für die Anmeldesprache direkt in den UIBBs / Komponenten hinterlegt werden.

Für die Übersetzungen solcher Texte muss aus dem zugehörigen Objekt der Objektkatalogeintrag (FPM-Konfigurationen sowie FPM-Komponenten) rausgesucht werden. Danach:

  • SE63 → Übersetzung → ABAP-Objekte → Transportobjekt → Dort das Transportobjekt aus dem Objektkatalogeintrag eintragen.

Wichtig: Bei Übersetzungen von FPM-Konfigurationen mit Vorwärtsnavigation / Doppelklick in die einzelnen Konfigurationskomponenten rein gehen.

Wichtig 2: Falls nach Übersetzung der Floorplan-Konfiguration mit SE63 die Übersetzungen noch nicht korrekt angezeigt werden, nochmal die Konfiguration des Floorplan öffnen, und diese im Konfigurator erneut speichern (Es muss nichts geändert werden).

Transportauftrag für Texte erstellen

Transaktion: SLXT:

  1. Exportmodus auswählen: Einzelne Sprache + Sprachtransport erzeugen
  2. Entweder Haken "Neuen Auftrag anlegen" anklicken (Beschreibungstext für Transportauftrag eingeben) oder bestehenden (Nixht-SLXT-Auftrag) auswählen
  3. Als Filter verwenden: Bearbeitungsdatum und Objektbearbeiter

WebServices pflegen und aktivieren

WebServices können mit der Transaktion SICF gepflegt und auch dort aktiviert werden.

Für ein WebDynpro / FPM kann über die SE80 die FPM-/WebDynpro-Anwendung geöffnet werden und dann über Springen -> HTTP-Service-Pflege in die SICF bis zum richtigen Service springen.

Aktivieren per Funktionsbaustein

Falls keine Zugriffsrechte vorliegen, kann ein Webservice vielleicht mit einem RFC-fähigen Funktionsbaustein auf dem Zielsystem aktiviert werden, indem der verwendete User auf dem Zielsystem ausreichend Zugriffsrechte hat.

Funktionsgruppe HTTPTREE
Funktionsbaustein HTTP_ACTIVATE_NODE

Als RFC-Zielsystem das Zielsystem auswählen unter Berücksichtigung des Users mit ausreichenden Rechten.

Bedeutung der Parameter des Funktionsbausteins:

Parameter Inhalt / Bedeutung
URL Service-Pfad aus SICF verwenden (siehe oben)
HOSTNAME DEFAULT_HOST (aus SICF verwenden)
EXPAND X

Fehlerbehandlung

Protokolle

Standard-Protokolle von SAP nutzen:

Transaktion Beschreibung Anmerkungen
ST22 Laufzeitfehler
SM21 Systemlog
SLG1 Anwendungslog Für Floorplan Manager filtern nach:

Objekt = FLOORPLAN_MANAGER

Unterobjekt = Runtime

ST11 Fehlerprotokolldatei

Pakete

Paket APB_FPM
Kurzbeschr. Floorplan Manager
Anwendungskomponente BC-WD-CMP-FPM Floorplanmanager Web Dynpro ABAP
Oberpaket SWDP
Softwarekomp. SAP_UI Release 740, SP 20

Unterpakete mit Test-Daten und Demo-Applikationen:

  • APB_FPM_TEST
  • APB_FPM_DEMO

Die den FPM-Anwendungen zugehörigen Webservices (Vgl. Feld URL in der WDP-Anwendung) müssen ggf. erst mit Transaktion SICF aktiviert werden.

Quellen und Tutorials

https://blogs.sap.com/2017/05/04/getting-started-with-the-floorplan-manager/

https://blogs.sap.com/2012/12/02/a-step-by-step-guide-to-create-a-simple-fpm-application-using-feeder-class-for-form-guibb/

https://blogs.sap.com/2017/11/14/the-fpm-event-phase-model-easy-going-or-already-lost/

Developer Guides: https://archive.sap.com/documents/docs/DOC-61783

Floorplan Manager for Web Dynpro ABAP: https://help.sap.com/viewer/7bd8201a728810148a4b1a83b0e91070/7.5.9/en-US/9f95467bbefc4a808fffeba4c5177258.html

Floorplan Manager for WebDynpro ABAP 7.4 SP08 https://archive.sap.com/documents/docs/DOC-59244

Floorplan mit Search-UIBB und Listen-UIBB: https://archive.sap.com/documents/docs/DOC-71083