Drop-Down-Listen mit abhängigen Werten

Benutzeroberflächen in SAP®-Systemen.
18 Beiträge • Seite 1 von 2 (current) Nächste
18 Beiträge Seite 1 von 2 (current) Nächste

Drop-Down-Listen mit abhängigen Werten

Beitrag von steffi_ma (ForumUser / 55 / 0 / 0 ) »
Hallo,
ich habe zwei Drop-Down-Listen, die jeweils auf Tabellenfelder zeigen. Wenn ich in der ersten Liste A anklicke, sollen im zweiten Drop-Down nur 1,2,3 erscheinen. Wenn B ausgesucht wird, dann nur 3,4 etc.
Wie kann ich denn das realisieren?
Für beide Felder habe ich Festwerte in der Domäne hinterlegt.
Ideen?
steffi

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


Beitrag von ewx (Top Expert / 4918 / 332 / 655 ) »
Hi Steffi,

die Festwerte helfen dir in dem Fall ja nicht weiter, da sie ja abhängig von dem anderen Feld sein sollen.

Du musst die Drop-down-listen manuell mit Funktionsbaustein VRM_SET_VALUES füllen.
Hinter das erste Feld musst du einen OK-Code legen, den du dann abfragst und entsprechend mit VRM_SET_VALUES das zweite Feld füllst.

Gruß,
Enno.

Beitrag von steffi_ma (ForumUser / 55 / 0 / 0 ) »
:oops: ich bin da, glaube ich, noch nicht weit genug in ABAP.
Hast du zufällig ein "sprechendes" Beispiel?

steffi

Beitrag von ewx (Top Expert / 4918 / 332 / 655 ) »
Hi Steffi,

schau mal hier:
http://www.tricktresor.de/content/index ... =47&aID=45

Gruß, Enno

Beitrag von steffi_ma (ForumUser / 55 / 0 / 0 ) »
Hallo Enno,
okay, das gröbste habe ich hinbekommen. Aber es funktioniert nicht alles. Wenn ich die obere Liste auswähle, werden die richtigen Daten in der unteren Listbox angezeigt. Ändere ich nun in der oberen den Wert, werden die richtigen unten wieder angezeigt, aber die alten werte bleiben erhalten!! Ich habe schon versucht, die Werte zu leeren, aber dann gibt es andere Fehler! ("Wert zu lang zum einfügen")

Code: Alles auswählen.

TYPE-POOLS vrm.
DATA:
  lt_values  TYPE vrm_values,
  lv_value   TYPE vrm_value,
  lv_key(40) TYPE n.

DATA: ok_code TYPE sy-ucomm.

START-OF-SELECTION.
  CALL SCREEN 100.

MODULE user_command_100.

  IF ok_code = 'X'.
    IF dynprofeld = 'A'.
      PERFORM clear.
      PERFORM add_value USING: 'aa','ab','ac'.
    ELSEIF dynprofeld = 'B'.
      PERFORM clear.
      PERFORM add_value USING: 'ba','bb'.
    ELSEIF dynprofeld = 'C'.
      PERFORM clear.
      PERFORM add_value USING: 'c'.
    ENDIF.

    CALL FUNCTION 'VRM_SET_VALUES'
         EXPORTING
              id     = 'dynprofeld'
              values = lt_values.
  ENDIF.
ENDMODULE.
*---------------------------------------------------------------------*
*       FORM clear                                                   
*---------------------------------------------------------------------*
FORM clear.
  lv_key = 0.
  CLEAR lv_value.
  CLEAR lt_values.
ENDFORM.

*---------------------------------------------------------------------*
*       FORM add_value                                                *---------------------------------------------------------------------*
FORM add_value USING f_text.
  STATICS lv_key.
  ADD 1 TO lv_key.
  lv_value-key = lv_key.
  lv_value-text = f_text.
  APPEND lv_value TO lt_values.
ENDFORM.
Wie kann ich denn die Liste leeren??
steffi

Beitrag von ewx (Top Expert / 4918 / 332 / 655 ) »
HI Steffi,

FB VRM_DELETE_VALUES.

Gruß,
Enno

Beitrag von steffi_ma (ForumUser / 55 / 0 / 0 ) »
ist "ENTRYFIELD" das dynprofeld? Ich bekomme immer ein "id not found".

Code: Alles auswählen.

DATA: possible_values_id TYPE vrm_id VALUE 'ENTRYFIELD'.

  CALL FUNCTION 'VRM_DELETE_VALUES'
       EXPORTING
            id           = possible_values_id
       EXCEPTIONS
            id_not_found = 1
            OTHERS       = 2.
steffi

Beitrag von ewx (Top Expert / 4918 / 332 / 655 ) »
Hi Setffi,

du musst anscheinend mit VRM_GET_VALUES abfragen, ob überhaupt werte da sind und nur dann VRM_DELETE_VALUES aufrufen.
Ausserdem musst du noch das Feld selbst löschen, da es sonst noch in der Liste auftaucht, auch wenn es eigentlich nicht vorgesehen ist.

Gruß,
Enno.

Beitrag von Gast ( / / 0 / 3 ) »
Hallo Enno,
dieser Fktbaustein macht mich noch irre!

ich bekomme die Werte der DropDownListe zwar gelöscht, aber der keywert bleibt bestehen. Sobald ich auf 10 gehen würde, wird ein * verwendet und es kommt zum Abbruch. Ein clear klappt nicht, da statics.
Hast du einen weiteren Tipp für mich?
Steffi

Code: Alles auswählen.

DATA:
lt_values  TYPE vrm_values,
lv_value   TYPE vrm_value,
lv_key(40) TYPE n.

DATA: name_id TYPE vrm_id VALUE 'meinFeld'.

FORM clear.
  CALL FUNCTION 'VRM_GET_VALUES'
       EXPORTING
            id           = name_id
       EXCEPTIONS
            id_not_found = 1
            OTHERS       = 2.
  IF sy-subrc = 1.
*    MESSAGE i888(sabapdocu) WITH 'id_not_found'.
  ELSEIF sy-subrc = 2.
*    MESSAGE i888(sabapdocu) WITH 'OTHERS'.
  ELSE.
    CALL FUNCTION 'VRM_DELETE_VALUES'
         EXPORTING
              id           = name_id
         EXCEPTIONS
              id_not_found = 1
              OTHERS       = 2.
    IF sy-subrc = 1.
      MESSAGE i888(sabapdocu) WITH 'id_not_found'.
    ELSEIF sy-subrc = 2.
      MESSAGE i888(sabapdocu) WITH 'OTHERS'.
    ELSE.
    ENDIF.
  ENDIF.
clear meinFeld.
clear lt_values.
clear lv_key.
ENDFORM.

FORM add_value USING f_text.
  STATICS lv_key.
  ADD 1 TO lv_key.
  lv_value-key = lv_key.
  lv_value-text = f_text.
  APPEND lv_value TO lt_values.
ENDFORM.

Beitrag von ewx (Top Expert / 4918 / 332 / 655 ) »
Hi Steffi,

das hat aber nix mit den Funktionsbausteinen zu tun!
Du hast in der STATICS-Anweisung die Variable LV_KEY als einstelliges Character-Feld definiert. Da wirst du so schnell keine "10" reinbekommen... :wink:

Besser wäre es m. E. auch, wenn du als Schlüssel den Domänenfestwert verwendest. Weil wenn du denn Schlüssel bei jeder Wertänderung um einen hoch zählst, dann nützt es dir wenig, wenn hinterher im Feld "324" steht.

Gruß,
Enno.

Beitrag von Gast ( / / 0 / 3 ) »
ich habe das jetzt anders gemacht und es klappt, was ja die Hauptsache ist :D
Vielen Dank für deine Tipps!!
steffi

Code: Alles auswählen.

...
clear liste.
clear value-key.
...
FORM add_value USING f_text.
  value-key  = value-key + 1.
  value-text = f_text.
  APPEND value TO liste.
ENDFORM.

Beitrag von ewx (Top Expert / 4918 / 332 / 655 ) »
Gern geschehen!

Beitrag von Gast ( / / 0 / 3 ) »
mist, zu früh gefreut. *grummel*
ich bekomme einfach nicht heraus, welches Listenelement ausgewählt wurde. Wenn ich was auswähle, wird der Funktionscode richtig gesetzt, die liste ist gefüllt, aber das Dynprofeld ist immer leer.

steffi

Beitrag von Gast ( / / 0 / 3 ) »
Hi Steffi,

kann es sein,

dass dein Dynprofeld kleiner als 40 Zeichen ist du jedoch durch den ADD 1 TO LV_KEY einen Schlüssel erzeugst, der ungefähr so aussieht: " 12"??

Gruß, Enno

Beitrag von Gast ( / / 0 / 3 ) »
Anonymous hat geschrieben:Hi Steffi,

kann es sein,

dass dein Dynprofeld kleiner als 40 Zeichen ist du jedoch durch den ADD 1 TO LV_KEY einen Schlüssel erzeugst, der ungefähr so aussieht: "__________________12"??

Gruß, Enno

Vergleichbare Themen

10
Antw.
3215
Views
ABAP Listen
von CTom » 11.04.2008 08:21 • Verfasst in ABAP® für Anfänger
16
Antw.
5503
Views
Listen-Ausgabe
von christof » 21.08.2014 18:30 • Verfasst in ABAP® für Anfänger
0
Antw.
1564
Views
ALV-Listen im Hintergrund downloaden
von schuessler » 11.09.2007 15:05 • Verfasst in ABAP® Core
0
Antw.
1020
Views
Gesicherte Listen bei Recherchen
von airwaver » 21.02.2008 07:50 • Verfasst in ABAP® Core
4
Antw.
4413
Views
Write und Fettdruck in Listen
von Matthias.Selle » 19.08.2008 11:18 • Verfasst in ABAP® Core

Über diesen Beitrag


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

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.