Doppelklick funktioniert nur einmal... :(

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Doppelklick funktioniert nur einmal... :(

Beitrag von ewx (Top Expert / 4913 / 332 / 653 ) »
Hallo zusammen!
Ich habe grad ein Problem...
Folgendes übersichtliche Programm erzeugt einen Docking Container mit einem Tree und zwei Knoten.
Per Doppelklick soll der Text des gewählten Knotens in das Feld P_NKEY übernommen werden.

beim ersten mal funktioniert das.
Ab dann nicht mehr...

Setzt man das Feld auf "nicht eingabebereit", dann funktioniert es auch mit der Wertübernahme.

Ich raff es nicht. Was mache ich falsch??

Hilfe.

Gruß Enno

Code: Alles auswählen.

REPORT z.

DATA gr_dock TYPE REF TO cl_gui_docking_container.
DATA gr_tree TYPE REF TO cl_list_tree_model.

PARAMETERS p_disp AS CHECKBOX USER-COMMAND x.
PARAMETERS p_nkey TYPE tv_nodekey MODIF ID x.


*----------------------------------------------------------------------*
*       CLASS lcl_appl DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_appl DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS double_click FOR EVENT item_double_click OF cl_item_tree_model IMPORTING node_key.
ENDCLASS.                    "lcl_appl DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_appl IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_appl IMPLEMENTATION.
  METHOD double_click.
    p_nkey = node_key.
    MESSAGE s000(oo) WITH 'Wert gewählt:' node_key.
    cl_gui_cfw=>set_new_ok_code( 'X' ).
  ENDMETHOD.                    "double_click
ENDCLASS.                    "lcl_appl IMPLEMENTATION


INITIALIZATION.
  PERFORM init.

AT SELECTION-SCREEN OUTPUT.
  IF p_disp IS NOT INITIAL.
    LOOP AT SCREEN.
      IF screen-group1 = 'X'.
        screen-input = '0'.
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.
  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  init
*&---------------------------------------------------------------------*
FORM init.

  IF gr_dock IS INITIAL.
    CREATE OBJECT gr_dock
      EXPORTING
        side      = gr_dock->dock_at_left
        extension = 250.
  ENDIF.

  IF gr_tree IS INITIAL.

    DATA lt_events   TYPE cntl_simple_events.
    DATA ls_events   LIKE LINE OF lt_events.
    DATA ls_item     TYPE treemlitem.
    DATA lt_items    TYPE STANDARD TABLE OF treemlitem.

    CREATE OBJECT gr_tree
      EXPORTING
        node_selection_mode = cl_list_tree_model=>node_sel_mode_single
        item_selection      = 'X' "braucht man für item double click
        with_headers        = ' '.

    CALL METHOD gr_tree->create_tree_control
      EXPORTING
        parent = gr_dock.

    ls_item-item_name = '1'.
    ls_item-class     = gr_tree->item_class_text.
    ls_item-alignment = gr_tree->align_auto.
    ls_item-font      = gr_tree->item_font_prop.
    ls_item-text      = 'Eins'.
    APPEND ls_item TO lt_items.


    CALL METHOD gr_tree->add_node
      EXPORTING
        node_key          = 'EINS'
        relative_node_key = space
        relationship      = gr_tree->relat_last_child
        isfolder          = space
        item_table        = lt_items.
    CLEAR lt_items.

    ls_item-item_name = '1'.
    ls_item-class     = gr_tree->item_class_text.
    ls_item-alignment = gr_tree->align_auto.
    ls_item-font      = gr_tree->item_font_prop.
    ls_item-text      = 'Zwei'.
    APPEND ls_item TO lt_items.

    CALL METHOD gr_tree->add_node
      EXPORTING
        node_key          = 'ZWEI'
        relative_node_key = space
        relationship      = gr_tree->relat_last_child
        isfolder          = space
        item_table        = lt_items.

    ls_events-eventid = gr_tree->eventid_item_double_click.
    APPEND ls_events TO lt_events.

    CALL METHOD gr_tree->set_registered_events
      EXPORTING
        events = lt_events.

    SET HANDLER lcl_appl=>double_click FOR gr_tree.

  ENDIF.

ENDFORM.                    "init

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


Re: Doppelklick funktioniert nur einmal... :(

Beitrag von a-dead-trousers (Top Expert / 4481 / 231 / 1205 ) »
hi!

Es fehlt PAI/PBO:

Code: Alles auswählen.

ls_events-appl_event = abap_true.
Das CFW löst bei Events die normale Dynpro-Aktualisierung nämlich (wegen Performancegründen?) nicht automatisch aus.

lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
ewx

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

Re: Doppelklick funktioniert nur einmal... :(

Beitrag von ewx (Top Expert / 4913 / 332 / 653 ) »
Danke!! Aber: Dafür habe ich doch den SET_NEW_OK_CODE aufgerufen, doch im Grunde das gleiche macht?!
Und warum funktioniert es beim ersten Mal?

Re: Doppelklick funktioniert nur einmal... :(

Beitrag von black_adept (Top Expert / 4157 / 136 / 959 ) »
Siehe Doku:
http://help.sap.com/abapdocu_702/de/abendynp_field_data_transport.htm hat geschrieben: Datentransport zum Zeitpunkt PAI

Wenn die Anweisung FIELD im Ereignisblock zu PAI verwendet wird, steuert sie den Datentransport für das angegebene Dynpro-Feld. Standardmäßig werden alle Dynpro-Felder direkt beim Ereignis PAI und vor der Verarbeitung des zugehörigen Ereignisblocks an das ABAP-Programm transportiert. Bei Verwendung einer oder mehrerer FIELD-Anweisungen werden nur solche Dynpro-Felder, die nicht hinter einer FIELD-Anweisung aufgeführt sind, direkt beim Ereignis PAI transportiert.

Der Transport des Inhalts eines hinter FIELD angegebenen Dynpro-Felds dynp_field in das gleichnamige globale ABAP-Datenobjekt findet bei Ausführung der entsprechenden FIELD-Anweisung statt. Wenn ein Dynpro-Feld in mehr als einer FIELD-Anweisung aufgeführt wird, wird sein Wert bei Ausführung der ersten entsprechenden FIELD-Anweisung übergeben. Es gelten folgende Ausnahmen:

Die Anweisung FIELD hat für das OK-Feld keine Wirkung. Das OK-Feld wird immer direkt beim Ereignis PAI transportiert.

Ein Feld, dessen Inhalt zu PBO initial ist und vom Benutzer nicht geändert wird, wird von der FIELD-Anweisung nicht transportiert. Wenn dieses Feld in einem PAI-Modul vor Ausführung der FIELD-Anweisung mit einem Wert gefüllt wird, wird dieser von der FIELD-Anweisung also nicht mit dem Initialwert überschrieben.

Hinweise

Die Wirkung der Anweisung FIELD auf den Datentransport zum Ereignis PAI ist unabhängig von der Verknüpfung mit einer MODULE-Anweisung.

Ein Dynpro-Feld sollte in einem PAI-Modul nicht benutzt werden, bevor es vom Dynpro übergeben wurde. Ansonsten enthält das ABAP-Feld den gleichen Wert wie am Ende des vorhergehenden Dialogschritts.

Wenn Dynpro-Felder mit Bezug auf flache Strukturen im ABAP Dictionary definiert sind, müssen die gleichnamigen globalen Datenobjekte des ABAP-Programms mit der Anweisung TABLES als Schnittstellen-Arbeitsbereich deklariert worden sein. Ansonsten findet kein Datentransport statt, weder mit noch ohne FIELD.

Wenn ein Dynpro-Feld mit Bezug auf ein Datenelement im ABAP Dictionary definiert ist, dem in einem Kundensystem noch ein obsoleter Feld-Exit zugeordnet ist, kann während des Transports der Funktionsbaustein des Feld-Exits ausgeführt werden, wodurch in der Regel der Wert des Dynpro-Felds geändert wird.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Seite 1 von 1

Vergleichbare Themen

1
Antw.
3119
Views
Table View Spalten einmal editierbar einmal nicht
von Aggressor » 08.06.2006 08:39 • Verfasst in Web-Dynpro, BSP + BHTML
4
Antw.
3377
Views
Singleton einmal anders
von ralf.wenzel » 31.12.2018 10:23 • Verfasst in ABAP Objects®
2
Antw.
3421
Views
ABAVN mit mehr als 8 Positionen auf einmal
von Skydizer » 27.12.2007 15:04 • Verfasst in Financials
2
Antw.
2115
Views
Ermitteln ob SD Dokument schon einmal gedruckt wurde?
von Troilus » 12.09.2007 10:36 • Verfasst in ABAP® für Anfänger
1
Antw.
2571
Views
Doppelklick und CL_SALV_HIERSEQ_TABLE
von Moonraker » 18.01.2011 12:28 • Verfasst in Dialogprogrammierung

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Aktuelle Forenbeiträge

Pflegeview zeigt nicht alle Daten an
vor 2 Tagen von sapdepp gelöst 7 / 514
ALV Grid und Dynprofeld
vor 3 Tagen von PeterPaletti 5 / 535

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

Pflegeview zeigt nicht alle Daten an
vor 2 Tagen von sapdepp gelöst 7 / 514
ALV Grid und Dynprofeld
vor 3 Tagen von PeterPaletti 5 / 535

Unbeantwortete Forenbeiträge

Benutzerdefinierte Felder PSP
letzen Monat von Rabea1103 1 / 50856
Spool vereinen OTF und PDF
letzen Monat von anna2205 1 / 67104
XSLT und Loipro05 Transformation
December 2025 von Torsten1965 1 / 78857