ALV-LVC-FuBau: Dropdown-Listbox bedienen

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
11 Beiträge • Seite 1 von 1
11 Beiträge Seite 1 von 1

ALV-LVC-FuBau: Dropdown-Listbox bedienen

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

gegeben sei eine Liste, die per ALV-LVC-Funktionsbaustein erzeugt wird. Bestandteil ist eine eingabebereite Dropdown-Liste, die hervorragend funktioniert. Einziger Haken: Ich muss immer ENTER drücken, damit der geänderte Wert auch wirklich in der Datentabelle landet.

Frage: Kann man irgendwie erreichen, dass das ENTER nicht mehr notwendig ist? Ich stelle mir vor: Irgendwie das Event "Dropdown-Änderung" abfangen und dort den Funktionscode für ENTER setzen. Ich finde aber keinerlei Möglichkeit, ein solches Event abzufangen.

Ich bin für jeden Tipp dankbar...


Gruß

Ralf
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: ALV-LVC-FuBau: Dropdown-Listbox bedienen

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

Das funktioniert beim ALV normalerweise über den Event CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.
Diesen Event muss man als sog. Edit-Event registieren.
Sobald der registriert ist und man ein Drop-Down-Feld ändert, wird beim Verlassen(!) des Feldes (Cursor auf ein anderes Feld usw.) die Edit-Verarbeitung des ALVs (Event-Handler usw.) angestoßen und die Daten landen bei Erfolg in der Datentabelle.

Problem 1:
Ich weiß nicht ob das im LVC möglich ist.

Problem 2:
Das Grid "flakert" kurz und das neue Feld "verliert" uU auch den (Eingabe-)Focus. ==> z.B. Blinkender Cursor in Text-Feld.
Ist daher nicht sehr "Benutzerfreundlich".

Ich würde das aber in der Form sowieso nicht empfehlen. Wenn eh schon der LVC zum Einsatz kommt gibts ja auch ein Rahmenprogramm und da muss man nicht jedesmal auf den ENTER reagieren sondern nur beim Verlassen der Anzeige EINMAL die Methode CHECK_CHANGED_DATA vom Grid aufrufen und die Daten sind komplett da. Für alle anderen "Spezialtäten" wie z.B. Auswahl eines Wertes X und das Feld Y ändert sich auch mit, würde ich persönlich NIE den LVC verwenden, sondern direkt das ALV, denn das ganze "Hintendrumherum"-Programmieren mit Callback-Routine ist mir viel zu unflexibel.

Anm.
Ich verwende den MC_EVT_MODIFIED immer in Kombination mit MC_EVT_ENTER.

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: ALV-LVC-FuBau: Dropdown-Listbox bedienen

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
a-dead-trousers hat geschrieben:Ich würde das aber in der Form sowieso nicht empfehlen. Wenn eh schon der LVC zum Einsatz kommt gibts ja auch ein Rahmenprogramm und da muss man nicht jedesmal auf den ENTER reagieren sondern nur beim Verlassen der Anzeige EINMAL die Methode CHECK_CHANGED_DATA vom Grid aufrufen und die Daten sind komplett da.
Nein, wenn ich zum Beispiel drei Dropdowns (das sind die einzigen editierbaren Felder) ändere und dann einen Button drücke, habe ich die ersten zwei Änderungen in der itab hinter dem ALV drin, die dritte aber nicht - weil ich das Feld nicht verlassen habe, bevor ich den Button geklickt habe. Diesen Fall muss ich irgendwie abfangen. Und ja: Das "Flackern" des Feldes ist doof.

Es handelt sich dabei um ein Statusflag, das fünf Zustände haben kann - ich finde keine bessere Möglichkeit, als das per Dropdown zu ändern. Alles andere führt zu Klickorgien (z. B. Satz auswählen, Button "Status ändern" klicken (Popup mit Werteliste erscheint), Status aus Liste auswählen - das sind vier Klicks (oder zwei Klicks und ein Doppelklick) im Vergleich zu einem Klick bei der Auswahl aus der Listbox).

Ich habe aber die Anweisung, KEINE OO-Variante des ALV zu verwenden.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: ALV-LVC-FuBau: Dropdown-Listbox bedienen

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
Hallo Ralf,

"keine OO-Variante" ist schwer, da hinter dem REUSE...LVC doch die OO-Klasse liegt. Aber da der Kunde bekanntlich König ist hier noch 1,5 Möglichkeiten, die ohne die MC_... Events des OO auskommen

0,5: Kannst du ein Kontextmenü aufpoppen lassen, wo deine 5 Status angeboten werden und dann via "normalem" Callback weitermachen? Da ich mir hier sehr unsicher bin ob das ohne OO geht nur 0,5 Antwort.
1: Da du nur von 5 verschiedenen Status sprichst könntest du statt einem Statusfeld welches 5 Status aufnehmen kann 5 Statusfelder anbieten, die entweder belegt sind oder nicht. Wenn dann 5 Iconspalten nebeneinander liegen hat halt immer eine der 5 Spalten ein Icon, die anderen sind leer. Sieht sogar ganz schick aus - zur Not kannst du ja sogar die Vertikalen Trennlinien der Spalten entfernen und damit noch mehr den Zusammenhalt der Felder bemerkbar machen . Und du könntest es bestimmt als besonderes Feature denn als Workaround anpreisen. Wenn du nun diese 5 Icons gleichzeitig noch als Hotspot definierst solltest du auch immer mit einem Klick auf eine der Iconspalten in deine Callbackroutine kommen, wo du dann die Icons in der geklickten Zeile anpasst.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: ALV-LVC-FuBau: Dropdown-Listbox bedienen

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Richtig, das geht. Ich könnte auch checkboxen hinlegen und das Angekreuzte ist aktiv. Nicht so schön wie das Dropdown, aber funktioniert und ist transparent für den Anwender.


Danke für die gute Idee!
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: ALV-LVC-FuBau: Dropdown-Listbox bedienen

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Außerdem erspart man sich so den Klick zum Aufpopen des Dropdownfeldes.
Hab ich auch schon sehr of so umgesetzt.
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: ALV-LVC-FuBau: Dropdown-Listbox bedienen

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
ralf.wenze hat geschrieben:lNein, wenn ich zum Beispiel drei Dropdowns (das sind die einzigen editierbaren Felder) ändere und dann einen Button drücke, habe ich die ersten zwei Änderungen in der itab hinter dem ALV drin, die dritte aber nicht - weil ich das Feld nicht verlassen habe, bevor ich den Button geklickt habe. Diesen Fall muss ich irgendwie abfangen.
Reicht es nicht aus im CALLBACK_USER_COMMAND die geänderten Werte mittels:

Code: Alles auswählen.

DATA: l_ref_alv TYPE REF TO cl_gui_alv_grid,
      l_valid   TYPE        char01.

CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
  IMPORTING
    e_grid = l_ref_alv.
 
CALL METHOD l_ref_alv->check_changed_data
   IMPORTING
     e_valid = l_valid.

IF l_valid IS INITAL.
  EXIT. "Eingabefehler wurde festestellt -> ALV sendet Fehlerprotokoll an User -> keine weitere Verarbeitung
ENDIF.
vom FrontEnd zum BackEnd zu übertragen. Ist zwar ein leichter OO-Ansatz enthalten, aber der ALV basiert ja nunmal auf OO.
Gruß Hendrik

Re: ALV-LVC-FuBau: Dropdown-Listbox bedienen

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Ja, aber der CALLBACK wird nur ausgelöst, wenn der Benutzer z.B. eine Taste gedrückt hat (Eben das erwähnte ENTER)
Mann kann das Callback, wie ich auch schon erwähnt hab, mit den MC_EVT_ENTER bzw. MC_EVT_CHANGED Events direkt bei der Änderung eines Feldes anstoßen nur dann flackert das ALV und der Cursor "springt" uU zwischen den Feldern hin und her.

Die Variante mit den Hotspots bzw. mit den Checkboxen finde ich in diesem Fall einen guten Kompromis:
1. Wird der CALLBACK wie gewohnt aufgerufen
2. Kein "flackern" des ALV-Cursors
3. Nur noch 1 Klick notwendig um den Status zu wecheseln
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: ALV-LVC-FuBau: Dropdown-Listbox bedienen

Beitrag von ewx (Top Expert / 4846 / 311 / 642 ) »
ralf.wenzel hat geschrieben:Alles andere führt zu Klickorgien (z. B. Satz auswählen, Button "Status ändern" klicken (Popup mit Werteliste erscheint), Status aus Liste auswählen - das sind vier Klicks (oder zwei Klicks und ein Doppelklick) im Vergleich zu einem Klick bei der Auswahl aus der Listbox).
Bei der Listbox muss man auch zwei mal klicken!

Wenn du das Feld als Hotspot definierst und dann ein Popup mit ALV-Grid anzeigst, in dem die auswählbaren Status ebenfalls als Hotspot definiert sind, sind es ebenfalls nur zwei Klicks!
Zudem kann man auch ordentlich filtern und es ist einfach um zusätzliche Status erweiterbar.
Bei der Je-Status-eine-Icon-Spalte musst du zum Filtern eines anderen Status erst den Filter auf die zuvor gefilterte Statusspalte löschen.

Re: ALV-LVC-FuBau: Dropdown-Listbox bedienen

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Vielen Dank für die vielen Ideen - ich werde mir genau überlegen, welche ich davon umsetze.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: ALV-LVC-FuBau: Dropdown-Listbox bedienen

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
a-dead-trousers hat geschrieben:Ja, aber der CALLBACK wird nur ausgelöst, wenn der Benutzer z.B. eine Taste gedrückt hat (Eben das erwähnte ENTER)
Mann kann das Callback, wie ich auch schon erwähnt hab, mit den MC_EVT_ENTER bzw. MC_EVT_CHANGED Events direkt bei der Änderung eines Feldes anstoßen nur dann flackert das ALV und der Cursor "springt" uU zwischen den Feldern hin und her.
Wobei man das doch nur braucht, wenn die Änderung in Spalte1 direkt die Eingabe in Spalte2 beinflussen soll (z.B.: nur bei Status Error wird Splate2 für den Fehlertext zur Eingabe freigeschaltet).

Ansonsten brauch ich die geänderten Daten doch nur bei einem UserCommand (Button wird gedrückt) und dann kann ich mir die geänderten Daten wie oben gezeigt direkt am FrontEnd abhohlen. Das heißt nur ein Datentransport, anstatt je Änderung ein Datentransport vom FrontEnd zum BackEnd.

Aber wie Ralf schon schrieb, es gibt mehrere Wege zur Lösung, man muss den für sich richtigen Finden.
Gruß Hendrik

Seite 1 von 1

Vergleichbare Themen

1
Antw.
3717
Views
Dropdown Listbox
von Malaqi » 08.02.2009 03:07 • Verfasst in ABAP® für Anfänger
2
Antw.
1679
Views
FuBau DSVAS_SERV_FILENAME_GET
von BUDNI-Sandra » 16.12.2004 13:52 • Verfasst in ABAP® Core
1
Antw.
1359
Views
FuBau bapi_incominginvoice_park
von BUDNI-Sandra » 11.07.2005 12:49 • Verfasst in ABAP® Core
8
Antw.
9532
Views
FuBau 'ARCHIVOBJECT_DISPLAY'
von ralf.wenzel » 02.07.2012 13:01 • Verfasst in ABAP® Core
15
Antw.
8209
Views
Ikonen im ALV-FuBau
von ralf.wenzel » 07.09.2006 09:27 • Verfasst in ABAP® Core

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 10 Stunden von DeathAndPain gelöst 22 / 3007
Daten an Tabelle binden
vor 15 Stunden von Lukas Sanders 2 / 978
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 543

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

Dialog-Container mit Toolbar/Status
vor 10 Stunden von DeathAndPain gelöst 22 / 3007
Daten an Tabelle binden
vor 15 Stunden von Lukas Sanders 2 / 978
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 543

Unbeantwortete Forenbeiträge

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