Form-routine dynamisch aufrufen

Getting started ... Alles für einen gelungenen Start.
6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

Form-routine dynamisch aufrufen

Beitrag von Pyro (Specialist / 121 / 14 / 18 ) »
Hallo,

ich hätte da mal eine Frage:

Ist es möglich eine perform mit einem dynamisch/variablen formnamen zu erstellen?

Also ich habe dann mehrere forms mit verschiedenen Namen aber den gleichen übergabeparametern.
Hier will ich, je nachdem, was gewählt wurde (vorher mit switch geprüft) das richtige form aufrufen, ohne tausende male das perform mit allen übergabeparametern zu schreiben (da es einerseits nervig und andererseits extrem unübersichtlich ist, da es viele parameter sind).

Also ist das irgendwie möglich?
Ich hab es bis jetzt über feldsymbole versuche: Perfom <fs>. -->Fehler: "Die FORM "<fs>" existiert nicht."
und ich habe es einfach über eine variable versucht: Perform (variable). -->Fehler: "Es ist kein Routinenname angegeben"

Wüsstet ihr eine Möglichkeit bzw ist das überhaupt allgemein möglich formroutinen dynamisch aufzurufen?

mfg
Pyro

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Form-routine dynamisch aufrufen

Beitrag von Ratazong (Specialist / 144 / 1 / 14 ) »
Ja, ist möglich:

Code: Alles auswählen.

REPORT  ZZAWTEST16.

data: gv_form(30) value 'TEST'.

perform (gv_form) in PROGRAM ZZAWTEST16.

form test.
endform.
Grüße

Re: Form-routine dynamisch aufrufen

Beitrag von Pyro (Specialist / 121 / 14 / 18 ) »
danke für die antwort,

aber diese lösung hatte ich schonmal versucht und 1. geht diese lösung nur in verbindung mit "IN PROGRAM".
Dieses "IN PROGRAM" geht bei mir allerdings nicht, da die form in einer smartform ist^^

das 2. problem heir bei ist, dass ich keine parameter mitgeben kann, swoeit ich das bis jetzt verstanden habe...

//EDIT:
Oh, das geht ja doch mit using... ok, also 2. kann man ignorieren...
Aber wie rufe ich die form in einem smartform auf? Also was muss dann hinter "IN PROGRAM"?... der smartformname?

Danke schonmal

Re: Form-routine dynamisch aufrufen

Beitrag von mcdelta0six (ForumUser / 8 / 0 / 2 ) »
Hallo Pyro,


Der Name des Function-pool (include) in der deine Form-routine beim Aktivieren der Smartform generiert wird ist dynamisch.
Somit muss dieser ermittelt werden.

Klicke auf den Testbutton in deiner Smartform (F8) dann wird die Transaktion SE37 mit dem generierten Funktionsbaustein aufgerufen.
Nun gehe im Menü auf Springen->Rahmenprogramm und du gelangst in das generierte Include. Dort müsste deine Form-Routine zu finden sein (im Include User-defined unter Form-Routines).

Nun gilt es aber das ganze dynamisch zu ermitteln. Zuerst brauchen wir den Funktionsbaustein deines Smartform Formulars

Code: Alles auswählen.


DATA: gv_form(30) VALUE 'TEST'. "Name der Form-Routine im Smartform

DATA: p_object_name TYPE seu_objkey.
DATA: p_request TYPE REF TO cl_wb_request.

DATA fm_name TYPE rs38l_fnam.
DATA pg_name TYPE rs38l_fnam.

*Ermitteln des FBs zum Smartform
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
  EXPORTING
    formname           = 'Z_TEST'  "Smartform Name
  IMPORTING
    fm_name            = fm_name
  EXCEPTIONS
    no_form            = 1
    no_function_module = 2
    OTHERS             = 3.

IF sy-subrc <> 0.
ENDIF.

*Ermitteln des Rahmenprogramms
SELECT SINGLE pname FROM tfdir INTO pg_name
                          WHERE funcname = fm_name.
IF sy-subrc = 0.
  CLEAR p_object_name.
  p_object_name = pg_name.
  CREATE OBJECT p_request
    EXPORTING
      p_object_type = swbm_c_type_prg_source
      p_object_name = p_object_name
      p_operation   = swbm_c_op_disp_or_edit.

pg_name = p_object_name.
ENDIF.

*Aufruf der Routine
PERFORM (gv_form) IN PROGRAMM (pg_name).

Folgende Benutzer bedankten sich beim Autor mcdelta0six für den Beitrag:
Pyro


Re: Form-routine dynamisch aufrufen

Beitrag von Pyro (Specialist / 121 / 14 / 18 ) »
absolut genial, funktioniert,

DANKE:)

//EDIT:
Hätte zu den Formroutinen in Smartforms aber noch eine Frage:
Gibt es irgend einen Trick von der Form aus auf Variablen,
welche in den Globalen Daten definiert sind, zuzugreifen,
ohne dass diese über ein changing an die Form übergeben
werdeN?

mfg

Re: Form-routine dynamisch aufrufen

Beitrag von mcdelta0six (ForumUser / 8 / 0 / 2 ) »
ja, auch diese Möglichkeit gibt es.
Dazu musst du das Programm, in dem die Variablen definiert sind in Klammern angeben.

(REPORT)Variable

Das funktioniert allerdings nur, wenn du die Zuweisung über ein feld-symbol machst.
siehe Code.

Code: Alles auswählen.

*Dies ist die Form "TEST", die innerhalb des Smartforms steht
FORM test.
  
DATA: variable(30). "Variable gleich definiert wie im Aufrufenden Programm
DATA: report_und_variable TYPE string VALUE '(Z_FORMS_TEST)GV_FORM'.

FIELD-SYMBOLS: <rep_und_var> TYPE char30. "Das Feldsymbol, also der Zeiger auf die Variable

ASSIGN (report_und_variable) TO <rep_und_var>.  "Feldsymbol zuweisen. Die Variable in Klammern bedeutet, dass nicht die Variable selber, sondern der Text, der in der Variablen steht selber als Variable interpretiert und zugeordnet wird.

variable = <rep_und_var>.

ENDFORM. 
 

Zur Vollständigkeit anbei nochmals mein Aufrufendes Programm. (Das Smartform hat den Namen Z_TEST )

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Report  Z_FORMS_TEST
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  z_forms_test.


DATA: gv_form(30) VALUE 'TEST'. "Name der Form-Routine im Smartform

DATA: p_object_name TYPE seu_objkey.
DATA: p_request TYPE REF TO cl_wb_request.

DATA fm_name TYPE rs38l_fnam.
DATA pg_name TYPE rs38l_fnam.

*Ermitteln des FBs zum Smartform
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
  EXPORTING
    formname           = 'Z_TEST'  "Smartform Name
  IMPORTING
    fm_name            = fm_name
  EXCEPTIONS
    no_form            = 1
    no_function_module = 2
    OTHERS             = 3.

IF sy-subrc <> 0.
ENDIF.

*Ermitteln des Rahmenprogramms
SELECT SINGLE pname FROM tfdir INTO pg_name
                          WHERE funcname = fm_name.
IF sy-subrc = 0.
  CLEAR p_object_name.
  p_object_name = pg_name.
  CREATE OBJECT p_request
    EXPORTING
      p_object_type = swbm_c_type_prg_source
      p_object_name = p_object_name
      p_operation   = swbm_c_op_disp_or_edit.

  pg_name = p_object_name.
ENDIF.

*aufruf der routine
PERFORM (gv_form) IN PROGRAM (pg_name).

Seite 1 von 1

Vergleichbare Themen

2
Antw.
1729
Views
Änderung per Form Routine
von thr74 » 23.07.2011 00:48 • Verfasst in ABAP® für Anfänger
3
Antw.
3935
Views
Selektionstabelle als Parameter an Form Routine übergeben
von ronin » 01.08.2008 17:00 • Verfasst in ABAP® für Anfänger
4
Antw.
4129
Views
dynamische Maßnahme in externe Form-Routine
von donny » 06.04.2006 17:38 • Verfasst in Human Resources
3
Antw.
6741
Views
Übergabe einer SELECT-OPTIONS Tabelle an FORM Routine
von m4rkusr » 20.09.2006 09:04 • Verfasst in ABAP® Core
6
Antw.
7783
Views
form aufrufen aus include
von azubi » 11.02.2005 13:15 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Wissensdatenbank
vor 19 Minuten von ewx 15 / 1896
Get und Set
vor 4 Stunden von msfox 17 / 3189
Neue Themen als SAP Entwickler
vor 18 Stunden von ralf.wenzel 138 / 18634

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Wissensdatenbank
vor 19 Minuten von ewx 15 / 1896
Get und Set
vor 4 Stunden von msfox 17 / 3189
Neue Themen als SAP Entwickler
vor 18 Stunden von ralf.wenzel 138 / 18634