CL_SALV_TABLE - Zeilenbestimmung Markierung

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).
10 Beiträge • Seite 1 von 1
10 Beiträge Seite 1 von 1

CL_SALV_TABLE - Zeilenbestimmung Markierung

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Moin,

gegeben sei ein CL_SALV_TABLE. Wenn ich diesen sortiere, eine Zeile markiere und ein Benuterkommando auslöse, kann ich in der on_user_command-Methode mit GET_SELECTED_ROWS auslesen, dass das (zum Beispiel) die 11. Zeile ist.

Leider ist es die 11. Zeile von VOR der Sortierung, die Sortierung ist zwar im ALV dargestellt worden, wirkt sich aber scheinbar nicht auf die interne Darstellung der Tabelle aus.

Erwartungshaltung wäre, dass die Tabelle im Hintergrund mitsortiert wird und der 11. Eintrag nach der Sortierung ein anderer ist als der 11. Eintrag vor der Sortierung.

get_metadata und cl_gui_cfw=>flush habe ich schon probiert.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

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


Re: CL_SALV_TABLE - Zeilenbestimmung Markierung

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Schau mal ob bzw. wann die Methode CHECK_CHANGED_DATA vom ALV-Grid ausgelöst wird.
Nachdem diese aufgerufen wurde, sollte die Sortierung in der Datentabelle die beim Factory des SALV als CHANGING übergeben wurde, gleich sein wie am Grid. Dann passt auch der Index wieder zur Tabellenzeile.

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

Re: CL_SALV_TABLE - Zeilenbestimmung Markierung

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
check_changed_data ist doch vom cl_gui_alv_grid - ich verwende ein cl_salv_table.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: CL_SALV_TABLE - Zeilenbestimmung Markierung

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Ja, aber der SALV verwendet für die Anzeige intern ein CL_GUI_ALV_GRID.
Du sollst (per Debugger) prüfen ob die besagte Methode aufgerufen wird oder nicht. Da steckt nämlich das Umsetzen der internen auf die externen Indizes drinnen.
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: CL_SALV_TABLE - Zeilenbestimmung Markierung

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
a-dead-trousers hat geschrieben:Ja, aber der SALV verwendet für die Anzeige intern ein CL_GUI_ALV_GRID.
Du sollst (per Debugger) prüfen ob die besagte Methode aufgerufen wird oder nicht. Da steckt nämlich das Umsetzen der internen auf die externen Indizes drinnen.
Ergebnis: Sie wird nicht gerufen. Wie gehe ich (in Kurzform) vor?

Das hier (zu Beginn von on_user_command) hat die Sortierung nicht geändert:

Code: Alles auswählen.

  DATA: h_grid TYPE REF TO cl_gui_alv_grid.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
       IMPORTING
         e_grid = h_grid.

  h_grid->check_changed_data( ).
Die Methode wird aber durchlaufen....
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: CL_SALV_TABLE - Zeilenbestimmung Markierung

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Ich habs gerade mit einer Trivialanwendung ausprobiert. (SALV auf Dynpro im Container mit Benutzerfunktionstaste)
Bei mir funktionierts.
Sobald man sich im Eventhandler befindet (cl_salv_events_table=>added_function) und von dort aus die Datentabelle anschaut, stimmt diese Sortierungstechnisch mit dem Frontend überein.

Code: Alles auswählen.

REPORT  z_test_salv.
*----------------------------------------------------------------------*
*       CLASS lcl_event DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_handler DEFINITION.
  PUBLIC SECTION.
    METHODS on_event FOR EVENT added_function OF cl_salv_events_table
      IMPORTING e_salv_function.
ENDCLASS.                    "lcl_event DEFINITION

DATA:
  ok_code       TYPE syucomm,
  lr_table      TYPE REF TO cl_salv_table,
  lr_handler    TYPE REF TO lcl_handler,
  lr_event      TYPE REF TO cl_salv_events_table,
  lr_container  TYPE REF TO cl_gui_custom_container,
  lt_data       TYPE flighttab.

SELECT *
  FROM sflight
  INTO TABLE lt_data.

CALL SCREEN 9000.

*----------------------------------------------------------------------*
*       CLASS lcl_event IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_handler IMPLEMENTATION.
  METHOD on_event.

    DATA:
      lt_selected       TYPE salv_t_row,
      ld_selected       TYPE i,
      lr_selection      TYPE REF TO cl_salv_selections.

    lr_selection = lr_table->get_selections( ).

    lt_selected = lr_selection->get_selected_rows( ).
*    ld_selected = lr_selection->get_selected_row( ).

    BREAK-POINT.
  ENDMETHOD.                    "on_event
ENDCLASS.                    "lcl_event IMPLEMENTATION

*&---------------------------------------------------------------------*
*&      Module  STATUS_9000  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
  SET PF-STATUS 'TEST'.
  SET TITLEBAR 'TEST'.

  IF lr_table IS NOT BOUND.
    CREATE OBJECT lr_container
      EXPORTING
        container_name              = 'CC_GRID'
      EXCEPTIONS
        cntl_error                  = 1
        cntl_system_error           = 2
        create_error                = 3
        lifetime_error              = 4
        lifetime_dynpro_dynpro_link = 5
        OTHERS                      = 6.

    cl_salv_table=>factory( EXPORTING r_container  = lr_container
                            IMPORTING r_salv_table = lr_table
                            CHANGING  t_table      = lt_data ).

    lr_table->get_functions( )->set_default( ).
    lr_table->get_functions( )->set_detail( ).
    lr_table->get_functions( )->add_function( name = 'TEST' text = 'Test' tooltip = 'Testfunktion' position = 1 ).

    lr_event = lr_table->get_event( ).

    CREATE OBJECT lr_handler.

    SET HANDLER lr_handler->on_event FOR lr_event.

    lr_table->display( ).
  ENDIF.

ENDMODULE.                 " STATUS_9000  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9000  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT.

  CASE ok_code.
    WHEN 'CANC'.
      LEAVE PROGRAM.
  ENDCASE.

ENDMODULE.                 " USER_COMMAND_9000  INPUT
Es fehlt nur noch ein Dynpro 9000 mit einem Custom-Container 'CC_GRID'
Wenn man beim Break-Point im Debugger stehenbleibt, entspricht die Sortierung von LT_DATA der auf dem GRID.

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

Re: CL_SALV_TABLE - Zeilenbestimmung Markierung

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Verdammte Hacke - dass ich das Ganze im Fullscreen betreibe, kann doch nicht der Grund sein. Ich habe eine Behandlermethode für das Event, da bleibt das Programm auch stehen wenn ich auf den Button klicke - aber die Sortierung ändert sich nicht.

Muss ich das Event irgendwie speziell aussteuern? So, dass es ein PAI auslöst oder so?

Nachtrag: In einem CL_GUI_ALV_GRID-Programm von mir funktioniert es. Im CL_SALV_TABLE nicht. *rätsel
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: CL_SALV_TABLE - Zeilenbestimmung Markierung

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
Fullscreen! Das nervige Feature am CL_SALV_TABLE, weil der sich in zig Sachen anders verhält als im Container.

Aber ok - da du den Fullscreen verwendest - wie hast du denn da die Extrabuttons hinzugefügt? ADTs Methode sollte da gar nicht untertützt werden.
Grundsätzlich - wenn die Funktionen nicht vom SALV selber getriggert werden ( wie die durch ADD_FUNCTION hinzugefügten Teile ) muss man sich beim SALV um vieles selber kümmern.
Das "GET_METADATA" hast du ja schon gefunden.

Was mir momentan einfällt woran es liegen könnte ist, dass du den Sync intern/extern noch mit dem SALV->REFRESH durchführen solltest. Und beim "Refresh" mal die "Full"-Variante verwenden statt der (Default) "Soft"-Variante
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: CL_SALV_TABLE - Zeilenbestimmung Markierung

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
black_adept hat geschrieben:Fullscreen! Das nervige Feature am CL_SALV_TABLE, weil der sich in zig Sachen anders verhält als im Container.

Aber ok - da du den Fullscreen verwendest - wie hast du denn da die Extrabuttons hinzugefügt? ADTs Methode sollte da gar nicht untertützt werden.
Grundsätzlich - wenn die Funktionen nicht vom SALV selber getriggert werden ( wie die durch ADD_FUNCTION hinzugefügten Teile ) muss man sich beim SALV um vieles selber kümmern.
Das "GET_METADATA" hast du ja schon gefunden.

Was mir momentan einfällt woran es liegen könnte ist, dass du den Sync intern/extern noch mit dem SALV->REFRESH durchführen solltest. Und beim "Refresh" mal die "Full"-Variante verwenden statt der (Default) "Soft"-Variante
Ich habe einen eigenen Status definiert, der bei der ALV-Anzeige aktiv ist (mit set_screen_status). Der Button, den ich verwende, ist der Sichern-Button. Den REFRESH mit FULL habe ich .uch gerade probiert, der hilft auch nicht. get_metadata auch nicht. Ich bin ziemlich ratlos, was ich sonst noch versuchen könnte.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: CL_SALV_TABLE - Zeilenbestimmung Markierung

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Das Problem ist gelöst. Hintergrund: Ich arbeite mit einer sortierten Tabelle wegen der optimierten Zugriffe. Unmittelbar vor dem Aufruf kopiere ich in eine Standardtabelle, weil ich dem SALV nur die übergeben kann.

Und ich ($&§/$&§$ habe natürlich immer in die sortierte Tabelle geguckt und auch die immer ausgewertet. Es musste so eine blöde Kleinigkeit sein, das haben Stefan und ich gestern am Telefon schon festgestellt.... Heute morgen kam dann die "Eingebung", was wieder mal zeigt, dass es manchmal was bringt, ein Problem zu überschlafen....
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Seite 1 von 1

Vergleichbare Themen

2
Antw.
4955
Views
Salv Table - Layouts speichern
von JohnLocklay » 14.06.2019 11:33 • Verfasst in ABAP Objects®
3
Antw.
2769
Views
GUI Status verhindert on click Event des SALV Table
von Pinguincommander » 05.02.2019 09:51 • Verfasst in ABAP® Core
0
Antw.
1149
Views
cl_gui_alv_tree- gestrichelte Markierung
von Frank59 » 03.05.2007 14:39 • Verfasst in ABAP Objects®
0
Antw.
2178
Views
DateNavigator Verwendung von 'Legend und Markierung''
von Luty » 28.03.2008 14:58 • Verfasst in Web Application Server
2
Antw.
2374
Views
Custom Control - Markierung beibehalten
von swonny » 08.10.2018 16:38 • 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

Daten an Tabelle binden
vor einer Stunde von Lukas Sanders 2 / 785
Dialog-Container mit Toolbar/Status
vor 14 Stunden von black_adept gelöst 21 / 2616

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

Daten an Tabelle binden
vor einer Stunde von Lukas Sanders 2 / 785
Dialog-Container mit Toolbar/Status
vor 14 Stunden von black_adept gelöst 21 / 2616

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2402
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 8985