[63090] in SAPr3-news

home help back first fref pref prev next nref lref last post

=?ISO-8859-1?Q?Re=3A_ALV_mit_selbst_erstellter_Dropdow?=

daemon@ATHENA.MIT.EDU (Thomas Lichtenstein)
Wed Oct 26 03:39:27 2011

To: sapr3-news@MIT.EDU
Date: Wed, 26 Oct 2011 09:39:24 +0200
From: Thomas Lichtenstein <thomas.lichtenstein@ufz.de>
Message-ID: <9gprpcF44pU1@mid.dfncis.de>

Am 25.10.2011 20:05, schrieb whg@t-link.de:
> On 18 Okt., 10:36, Thomas Lichtenstein<thomas.lichtenst...@ufz.de>
> wrote:
>> Am 17.10.2011 16:07, schrieb w...@t-link.de:
>>
>>
>>
>>> On 17 Okt., 15:50, w...@t-link.de wrote:
>>>> Hallo NG,
>>
>>>> es gibt hier zwar etliche Freds, aber offensichtlich keinen der mein
>>>> Problem löst:
>>
>>>> Ich muss für ein editierbares Feld im ALV eine Dropdown-Liste
>>>> erstellen. Die Dropdown-Liste selbst ist ein Datenextrakt aus einer
>>>> Customizing-Tabelle, deshalb scheidet die "Standard-F4-Hilfe" aus. Das
>>>> Feld selbst ist zweistellig, ich möchte es aber gerne mit den
>>>> dazugehörenden Kurztexten anzeigen, z,B.:
>>
>>>> 01 Rot
>>>> 02 Gelb
>>>> 03 Blau
>>
>>>> usw.
>>
>>>> Die Anzeige dieser Dropdown-Liste funktioniert auch, aber ich habe ein
>>>> Folgeproblem: die Mehtode  "handle_data_changed" erkennt nicht, dass
>>>> ein Wert aus der Dropdown-Liste in das Zielfeld des ALV gestellt
>>>> wurde. Dadurch läuft meine Folgeverarbeitung in's Leere.
>>
>>>> Hat jemand eine Idee?
>>
>>> Hallo NG,
>>
>>> ich bin einen Schritt weiter:
>>
>>> Das Zielfeld im ALV ist zweistellig, akzeptiert also nur die Werte 01,
>>> 02, 03 usw. Wenn ich die Dropdown-Liste entsprechend aufbaue, wird die
>>> Übernahme in das Zielfeld korrekt erkannt (Methode
>>> "handle_data_changed". Allerdings ist diese Dropdown-Liste nicht das
>>> was ich will:
>>
>>> 01
>>> 02
>>> 03
>>
>>> usw.
>>
>>> Kennt jemand von euch einen Weg, wie ich diese Liste mit erweiterter
>>> Info aufbauen und verarbeiten kann:
>>
>>>    01 Rot
>>>    02 Gelb
>>>    03 Blau
>>
>>> usw.?
>>
>>> Danke für jeden Tipp
>>
>>> Wolfgang
>>
>> Hallo Wofgang,
>>
>> in Deinem Feldkatalog
>>
>> DATA: lt_fcat TYPE lvc_t_fcat,
>>         ls_fcat TYPE lvc_s_fcat.
>>
>> musst Du diesen für [dein Feld] auf drdn_* erweitern.
>>
>>       ls_fcat-fieldname = [dein Feld].
>>       ls_fcat-ref_table = '[deine DD-Tabelle]'.
>>       ls_fcat-drdn_alias = abap_true.
>>       ls_fcat-drdn_hndl = 1.     " erstes Drop-Down
>>
>> Daten nach lt_fcat übertragen oder updaten.
>>
>> Danach einen Drop-Down Dialog bauen:
>>
>> DATA: lt_dral TYPE lvc_t_dral,
>>         ls_dral TYPE lvc_s_dral.
>>
>> ls_dral-handle    = '1'.
>> ls_dral-value     = '[dein Text 1]'.
>> ls_dral-int_value = [dein key 1].
>> APPEND ls_dral TO lt_dral.
>>
>> ls_dral-value     = '[dein Text 2]'.
>> ls_dral-int_value = [dein key 2].
>> APPEND ls_dral TO lt_dral.
>>
>> ...
>>
>> Dropdown an Grid anhängen:
>>
>>     r_grid->set_drop_down_table(
>>       EXPORTING
>>         "it_drop_down = lt_drop
>>         it_drop_down_alias = lt_dral ).
>>
>> Grid mit geänderten Feldkatalog prozessieren:
>>
>>     r_grid->set_table_for_first_display(
>>     EXPORTING
>>       CHANGING
>>         it_outtab                     = [deine interne Tabelle mit Daten]
>>         it_fieldcatalog               = lt_fcat.
>>
>> Viele Grüße
>> Thomas- Zitierten Text ausblenden -
>>
>> - Zitierten Text anzeigen -
>
> Hallo Thomas,
>
> erstmal vielen Dank für Deine Hilfe. Leider komme ich wegen anderer  -
> noch wichtigerer 8-)) - Aufgaben erst heute dazu, Deinen Tipp
> auszuprobieren.
>
> Mein "ganz großes" Problem besteht immer noch: ein aus der Dropdown-
> Tabelle übernommener Wert wird nicht erkannt (Methode "data_changed")
> und deshalb nicht in das Zielfeld übernommen. Hast Du noch einen Tipp
> für mich wo ich hier ansetzen kann bzw. was ich falsch mache?
>
> Danke,
> Wolfgang
>
Hallo Wolfgang

wenn ich mir die Namen Deiner genannten Methoden anschaue, denke ich, 
dass dies eine Event-Handler Methode und ein Event ist. Die werden 
jedoch erst ausgeführt, wenn Du das Event-Handling für das Grid 
definiert, implementiert und registriert hast.

Wenn Du die Daten einfach in die interne Tabelle zurückstellen willst, 
dann musst Du einfach im PAI Deines Dynpros die Methode:


DATA: lv_valid TYPE char01.

r_grid->check_changed_data(
   IMPORTING
     e_valid = lv_valid ).


ausführen. Diese Methode feuert übrigens das Event "data_changed". Hier 
könntest Du bei einem programmierten Event-Handling die eingegebenen 
Daten überprüfen.

Wie Du das Event-Handling programmierst, ist hier

<http://www.saptechies.com/an-easy-reference-for-alv-grid-control/>

ganz gut beschrieben.


Viele Grüße
Thomas


home help back first fref pref prev next nref lref last post