Redefinition eines Events

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
4 Beiträge • Seite 1 von 1
4 Beiträge Seite 1 von 1

Redefinition eines Events

Beitrag von ABAP_User (Specialist / 146 / 20 / 0 ) »
Hallo!

Ich versuche mich gerade an einem Tutorial: http://scn.sap.com/people/thomas.jung/b ... rogramming
Dort steht folgendes geschrieben:

Next we have the ON_CALL_SCREEN method. This is the event handler that is called by the Screen Framework whenever a Call Screen event is raised. By redefining this event we can hook into our Function Module from earlier thereby controlling which screens we call.

Code: Alles auswählen.

    method on_call_screen.   
    call function 'Z_DYNPRO_CALL_SCREEN'   
    exporting i_dynnr = dynnr i_popup = popup i_starting_x = starting_x i_ending_x = ending_x i_starting_y = starting_y i_ending_y = ending_y.   
    endmethod.  
Mir ist nun nicht ganz klar, wie ich diesen Event der Klasse cl_ctrler_screen_window redefiniere.
"Mein" bisheriger Code ist unten mal beigefügt. Könnt ihr mir vielleicht weiterhelfen?

Code: Alles auswählen.

CLASS lcl_dynpro_9000 DEFINITION INHERITING FROM cl_ctrler_screen_window.

  PUBLIC SECTION.
    METHODS: constructor.

  PROTECTED SECTION.
    METHODS: navigate,
             on_call_screen FOR EVENT handle_fcode OF cl_ctrler_screen_window,    " eigentlich on_call_screen REDEFINITION, aber wie definiere ich dann den EH neu??
             on_process_fcode REDEFINITION.


  PRIVATE SECTION.
    CLASS-DATA c_pfstatus_popup TYPE sypfkey.

    DATA: c_titlebar TYPE gui_title,
          c_repid    TYPE syrepid,
          c_pfstatus_window TYPE sypfkey.

ENDCLASS.

CLASS lcl_dynpro_9000 IMPLEMENTATION.

  METHOD constructor.

    DATA: l_pfstatus TYPE sypfkey.

    super->constructor( ).
    repid = c_repid.
    dynnr = '9000'.

    CASE popup.
      WHEN space.
        l_pfstatus = c_pfstatus_window.
      WHEN OTHERS.
        l_pfstatus = c_pfstatus_popup.
    ENDCASE.

    r_status->set_pfstatus( pfstatus = l_pfstatus pfstatus_repid = me->c_repid ).

    "SET HANDLER navigate FOR me.

  ENDMETHOD.

  METHOD on_call_screen.
    CALL FUNCTION 'Z_DYNPRO_CALL_SCREEN'
      EXPORTING
        i_dynnr      = dynnr
        i_popup      = popup
        i_starting_x = starting_x
        i_ending_x   = ending_x
        i_starting_y = starting_y
        i_ending_y   = ending_y.
  ENDMETHOD.

  METHOD on_process_fcode.
*@78QImporting@ VALUE( FCODE ) TYPE SYUCOMM

    super->on_process_fcode( fcode ).
    IF r_status->pfstatus_repid EQ c_repid AND ( r_status->pfstatus EQ c_pfstatus_window OR r_status->pfstatus EQ c_pfstatus_popup ).
      CASE fcode.
        WHEN 'BACK' OR 'CANC' OR 'OK'.
          SET SCREEN 0.
          LEAVE SCREEN.
          set_fcode_handled( ).
        WHEN 'EXIT'.
          LEAVE PROGRAM.
    when 'PRESS_ME'.
      raise event navigation_requested.
    when 'HI'.
      message 'OO Event Handler! Yay!' type 'I'.
      set_fcode_handled( ).
        WHEN OTHERS.
          RAISE EVENT handle_fcode
          EXPORTING fcode = fcode.
      ENDCASE.
    ENDIF.
  ENDMETHOD.

  METHOD navigate .
    IF dynnr = '9000'.
      dynnr = '9100'.
    ELSE.
      dynnr = '9000'.
    ENDIF.
    CLEAR r_screen.
    me->display( ).
    me->set_fcode_handled( ).
  ENDMETHOD.

ENDCLASS.
Viele Grüße,
abap_user
Zuletzt geändert von ABAP_User am 12.10.2012 13:16, insgesamt 1-mal geändert.

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


Re: Redefinition eines Event Handlers

Beitrag von ABAP_User (Specialist / 146 / 20 / 0 ) »
Kann ignoriert werden, hab meinen Fehler gefunden.

Re: Redefinition eines Events

Beitrag von ABAP_User (Specialist / 146 / 20 / 0 ) »
Jetzt muss ich euch leider doch um Rat fragen. Das Programm läuft einfach nicht.
Ich hab nochmals den aktuellen Code beigefügt. Bei den Stellen, bei denen mir Dinge unklar sind, habe ich einen Kommentar hinterlassen.
Wäre super, wenn ihr mir helfen könntet.

Code: Alles auswählen.

CLASS lcl_test_proc DEFINITION INHERITING FROM cl_ctrler_screen_window.

  PUBLIC SECTION.
    METHODS: constructor.

  PROTECTED SECTION.
    METHODS: navigate FOR EVENT handle_fcode of cl_ctrler_screen_window,
             on_call_screen REDEFINITION,
             on_process_fcode REDEFINITION.

  PRIVATE SECTION.
  
    DATA: c_titlebar        TYPE gui_title VALUE 'TITLE',
          c_repid           TYPE syrepid VALUE 'CH_KOMM_TEST',
          c_pfstatus_window TYPE sypfkey VALUE 'WINDOW',
          c_pfstatus_popup  TYPE sypfkey VALUE 'POPUP',
          lvc_fieldcat      TYPE lvc_t_fcat,
          layout            TYPE lvc_s_layo,
          container         TYPE REF TO cl_gui_custom_container,
          alv               TYPE REF TO cl_gui_alv_grid.

ENDCLASS.

CLASS lcl_test_proc IMPLEMENTATION.

  METHOD constructor.
    DATA: l_pfstatus TYPE sypfkey.

    super->constructor( ).
    repid = c_repid.
    dynnr = '9000'.

    CASE popup.
      WHEN space.
        l_pfstatus = c_pfstatus_window.
      WHEN OTHERS.
        l_pfstatus = c_pfstatus_popup.
    ENDCASE.

* Weder der Status noch der Titel wird gesetzt beim Aufruf der unteren Methoden, dabei sind die übergebenen Parameter korrekt. Wenn ich SET PF-STATUS und 
* SET TITLEBAR setze, dann werden diese auch gesetzt.
*    SET PF-STATUS 'WINDOW'.
*    SET TITLEBAR 'TITLE'.
    r_status->set_pfstatus( pfstatus = l_pfstatus pfstatus_repid = me->c_repid ).
    r_status->set_titlebar( titlebar = me->c_titlebar  titlebar_repid = me->c_repid ).

* Bin mir immer noch nicht sicher ob das stimmt. Muss ich mir hierfür einen eigenen Event Handler schreiben?
    SET HANDLER navigate FOR me.
  ENDMETHOD.

  METHOD on_call_screen.

    CALL SCREEN dynnr.

  ENDMETHOD.

* Mir ist die Verwendung unklar von on_process_code. Es handelt sich hierbei um ein Event, der geerbt wird. Wie muss ich ihn korrekt setzen?
  METHOD on_process_fcode.
    super->on_process_fcode( fcode ).

    IF r_status->pfstatus_repid EQ c_repid AND ( r_status->pfstatus EQ c_pfstatus_window OR r_status->pfstatus EQ c_pfstatus_popup ).
      CASE fcode.
        WHEN 'BACK' OR 'CANC' OR 'OK'.
          SET SCREEN 0.
          LEAVE SCREEN.
          set_fcode_handled( ).
        WHEN 'EXIT'.
          LEAVE PROGRAM.
        WHEN 'EXEC'.
          set_fcode_handled( ).
        WHEN OTHERS.
          RAISE EVENT handle_fcode EXPORTING fcode = fcode.
      ENDCASE.
    ENDIF.
  ENDMETHOD.

  METHOD navigate .
    IF dynnr = '9000'.
      dynnr = '9100'.
    ELSEIF dynnr = '9100'.
      dynnr = '9200'.
    ELSE.
      dynnr = '9300'.
    ENDIF.
    CLEAR r_screen.
    me->display( ).
    me->set_fcode_handled( ).
  ENDMETHOD.
ENDCLASS.

***********************************************************************
** PROGRAM EVENTS
***********************************************************************
INITIALIZATION.

  DATA screen TYPE REF TO lcl_test_proc.

  CREATE OBJECT screen.
  screen->display( ).
Danke!

Re: Redefinition eines Events

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
Hi!

Ist ein zeiterl her, dass ich mich mit dem Framework beschäftigt hab.

Nachdem ich es kurz ausprobiert hab, war es mir zu unflexibel, weil es nur einen geringen Anteil der umfangreichen Dynpro-Operationen unterstützt (POV und POH fehlen völlig). Ich hab aber die Erkenntnisse die daraus gewonnen hab in eigenes Dynpro Framework gesteckt, dass inzwischen sehr stabil läuft und auch die mehrfache Verwendung von Dynpros in ein und demselben Progamm, sowie die Erkennung von Feldern am Dynpro und deren Feldtransport sowohl bei PAI/PBO als auch bei POV und POH unterstützt.
Damit hab ich eine komplette Abstraktionsebene zwischen den "alten" Dynpros und ABAP-OO geschaffen. Leider ist nachwievor ein Programm notwendig, welches die Dynpros beheimatet, aber das Coding das ich dort einbinden muss ist auf wenige Zeilen beschränkt und liegt in wiederverwendbaren Includes vor.

So, das war genug Werbung ;)
Jetzt zu deinem Problem.
Nachdem was ich von dem Framework noch weiß, sind ziemlich viele Methoden usw. nur "Skelette" welche lediglich die Schnittstellen umfassen. Man muss also erst die Klassen ableiten und die entsprechenden Methoden ausprogrammieren. Das war auch einer der Gründe warum ich es dann doch nicht eingesetzt habe. Es wirkt irgendwie (wie auch der Autor von dem Artikel bemerkt hat) wie ein Versuch der dann nicht konsequent weiterverfolgt wurde. Aber mir hat die Idee trotzdem gefallen, daher hab ich das Konzept aufgegriffen und weiterentwickelt (Schon wieder Werbung ... ).

Das Beste wird sein, du debuggst dich durch die einzelnen Methoden des Frameworks und schaust dir an was sie im Endeffekt bewirken. Du solltest auch ein gewisses Grundverständniss haben, wie Dynpros funktionieren. Wann und wie der Feldtransport abläuft und zu welchen Zeitpunkten man Toolbar und Titelzeile setzt (PBO)
Aber was ich von dem Artikel noch weiß, sollte das Beispiel daraus eigentlich funktionieren. Hast du in den Dynpros die du aufrufst in der Ablauflogik die Module richtig eingetragen? Das ist nämlich die Grundvoraussetzung, damit die Klassen angesprochen werden.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Seite 1 von 1

Vergleichbare Themen

5
Antw.
3484
Views
Frage zur Redefinition
von kaim77 » 03.04.2014 13:45 • Verfasst in ABAP Objects®
4
Antw.
3000
Views
TYPE-POOL und Redefinition
von uh » 08.10.2008 17:31 • Verfasst in ABAP® Core
4
Antw.
3095
Views
Superklasse / Redefinition / Refactoring
von ST22 » 24.09.2015 17:02 • Verfasst in ABAP Objects®
2
Antw.
2182
Views
Redefinition von Methoden in einer Unterklasse
von Dolph » 23.11.2005 14:12 • Verfasst in ABAP Objects®
8
Antw.
6009
Views
Redefinition Methode in lokaler Klasse
von olli-x » 30.01.2007 14:11 • Verfasst in ABAP Objects®

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Regex in where
vor 24 Minuten von tar 6 / 82
Programm anlegen mit Vorlage
vor 15 Stunden von DeathAndPain 2 / 116
IT0024 Qualifikationen CP-ID
vor 15 Stunden von DeathAndPain 2 / 352
BUSOBJEKT zu CMIS PHIO ermitteln
vor 17 Stunden von snooga87 1 / 84

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

Regex in where
vor 24 Minuten von tar 6 / 82
Programm anlegen mit Vorlage
vor 15 Stunden von DeathAndPain 2 / 116
IT0024 Qualifikationen CP-ID
vor 15 Stunden von DeathAndPain 2 / 352
BUSOBJEKT zu CMIS PHIO ermitteln
vor 17 Stunden von snooga87 1 / 84

Unbeantwortete Forenbeiträge

BUSOBJEKT zu CMIS PHIO ermitteln
vor 17 Stunden von snooga87 1 / 84
aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9821