Button in ALV Zelle

WAS, Netweaver, Fiori

Button in ALV Zelle

Postby Harald2058 » Tue Mar 22, 2011 11:22 am

Hallo Gemeinde,

als Frischling in der ABAP und vor allem OO Welt stehe ich vor einem Problem.

Ich muss im WebDynpro ALV in Zellen einen Button setzen, abhängig von einem Wert im entsprechendem Datensatz.

Im Moment sieht es so aus:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1.   DATA lt_output2 TYPE wd_this->elements_output.
  2.  
  3.   lt_output2[] = lt_output[].
  4.   CLEAR lt_output.
  5.  
  6.   LOOP AT lt_output2 INTO ls_output.
  7.  
  8.     CREATE OBJECT lr_button.
  9.     lr_button->set_text_fieldname( 'CHECKER' ).
  10.  
  11.     IF ls_output-checkedin = 'X'.
  12.       lr_button->set_image_source( '@06@' ).
  13.           lr_column_checker->set_cell_editor( lr_button ).
  14.     ELSE.
  15.       lr_button->set_image_source( '@07@' ).
  16.           lr_column_checker->set_cell_editor( lr_button ).
  17.     ENDIF.
  18.  
  19.     lr_column_checker->set_cell_editor( lr_button ).
  20.  
  21.     APPEND ls_output TO lt_output.
  22.     CLEAR ls_output.
  23.  
  24.   CLEAR lt_output2.
GeSHi ©


Leider wird generell nur ein Button ( @06@) gesetzt, und nicht in Abhängigkeit.

Kann mich bitte jemand erleuchten?

Vielen Dank im voraus

PS: zur Übersicht ist der komplette Code im Anhang.
Harald2058
.
.
 
Posts: 8
Joined: Tue Mar 22, 2011 11:22 am

Postby Jonny2227 » Tue Mar 22, 2011 4:57 pm

Sali,

das Problem ist - du erzeugst nur eine Button Instanz mit dem Icon locked
ich meine damit gehts->

REPORT z_test.
TYPE-POOLS: icon.
FIELD-SYMBOLS <fs_any> TYPE ANY.
TYPES: BEGIN OF ty_table,
field_01 TYPE REF TO cl_salv_wd_uie_button,
END OF ty_table.
DATA it_button_table TYPE STANDARD TABLE OF ty_table.
DATA ref_button_table TYPE REF TO ty_table.
data lr_button type ref to cl_salv_wd_uie_button.

DATA dref TYPE REF TO data.
DATA icon TYPE string.

icon = icon_locked.
DO 2 TIMES.

CREATE DATA dref TYPE REF TO cl_salv_wd_uie_button.
ASSIGN dref->* TO <fs_any>.
CREATE OBJECT <fs_any> TYPE cl_salv_wd_uie_button.
APPEND INITIAL LINE TO it_button_table REFERENCE INTO ref_button_table.
ref_button_table->field_01 = <fs_any>.

ref_button_table->field_01->set_image_source( icon ).
ref_button_table->field_01->set_text_fieldname( 'CHECKER' ).

icon = icon_unlocked.

ENDDO.

LOOP AT lt_output2 INTO ls_output.
IF ls_output-checkedin = 'X'.
read table it_button_table REFERENCE INTO ref_button_table index 1.
check ref_button_table is bound.
lr_button = ref_button_table->field_01.
* lr_button->set_image_source( '@06@' ).
lr_column_checker->set_cell_editor( lr_button ).
ELSE.
READ TABLE it_button_table REFERENCE INTO ref_button_table INDEX 2.
CHECK ref_button_table IS BOUND.
lr_button = ref_button_table->field_01.
* lr_button->set_image_source( '@07@' ).
lr_column_checker->set_cell_editor( lr_button ).
ENDIF.

lr_column_checker->set_cell_editor( lr_button ).

APPEND ls_output TO lt_output.
CLEAR ls_output.

ENDLOOP.
1. 2 verschiedene Button Instanzen erzeugen -> Ablage in Tabelle
2. in Abhängigkeit von Feld ls_output-checkedin -> entweder Eintrag 1 oder 2 aus der Tabelle benutzen

Gruss Jens
Jonny2227
....
....
 
Posts: 605
Joined: Wed Mar 01, 2006 3:16 pm

Postby Harald2058 » Tue Mar 22, 2011 6:01 pm

Hallo Jens,

ach, in der mangelnden 2.Instanz liegt der Fehler. Da bin ich im OO noch nicht richtig drin.
Vielen Dank.......ich versuche das mal umzusetzen und gebe dann laut. :)
Harald2058
.
.
 
Posts: 8
Joined: Tue Mar 22, 2011 11:22 am

Postby Jonny2227 » Tue Mar 22, 2011 6:06 pm

Sali,

wofür ist denn der Button ? Wird damit im Weiteren Verlauf eine Aktion ausgeführt etc. ?

Gruss Jens
Jonny2227
....
....
 
Posts: 605
Joined: Wed Mar 01, 2006 3:16 pm

Postby Harald2058 » Tue Mar 22, 2011 6:41 pm

ja, damit sollen dann die Originale zu Dokumenten ein- oder ausgecheckt werden.
Harald2058
.
.
 
Posts: 8
Joined: Tue Mar 22, 2011 11:22 am

Postby Jonny2227 » Wed Mar 23, 2011 9:42 am

Sali,

könnte sein - das du dann sogar die Anzahl Instanzen erweitern musst - soviele Zellen wie du hast - damit du dann auf den entsprechenden Button Klick reagieren kannst. Aber da müsstest du schauen ob nicht die Kombination aus ausgewählter Zelle und Button Klick ausreichend ist. Wenn das nicht ausreicht - dann würde ich den Fieldname Text zu jeden Button den du instanziierst nummerieren - damit wäre eine Unterscheidung gegeben.

Gruss Jens
Jonny2227
....
....
 
Posts: 605
Joined: Wed Mar 01, 2006 3:16 pm

Re: Button in ALV Zelle

Postby Harald2058 » Mon Mar 28, 2011 4:24 pm

Das ist mir noch zu kompliziert.........und fällt erstmal unter den Tisch :)
Harald2058
.
.
 
Posts: 8
Joined: Tue Mar 22, 2011 11:22 am

Re: Button in ALV Zelle

Postby August142 » Wed Apr 20, 2011 3:17 pm

Ich habe eigentlich was ähnliches vor. Bin dann aber zu der erwähnten einfacheren Lösung mit Auswahl der Zeile und Buttondruck gekommen.
Jedoch bekomme ich es nicht hin. Um grundlegend mit dem Eventmodell klarzukommen wollte ich ersteinmal die Behandlung des Clicks auf eine Tabellenzeile definieren.
Ich erkläre also im Viewcontroller des Views in dem das SALV_WD_TABLE als VCE eingebunden ist die Verwendung diesens und des zugehörigen Interfacecontrollers. In der Methode WDDOINIT rufe ich WD_COMP_CONTROLLER->alv_init( ). auf.
Meine alv_init instanziert das Objekt und deaktiviert das cell_action event, womit das on_click event aktiv sein dürfte.

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. method ALV_INIT .
  2.       DATA: lv_scrollable_col_count   TYPE i,
  3.         lr_cmp_usage              TYPE REF TO if_wd_component_usage,
  4.         lr_if_controller          TYPE REF TO iwci_salv_wd_table,
  5.         lv_alv_id                 TYPE zmp_alv_id,
  6.         L_API_INTERFACECONTROLLER type ref to IF_WD_CONTROLLER,
  7.         lr_model type ref to cl_salv_wd_config_table.
  8.  
  9. * Objekt instanzieren
  10.   lr_cmp_usage = wd_this->wd_cpuse_SALV_FLIGHTS( ).
  11.   if lr_cmp_usage->has_active_component( ) is initial.
  12.     lr_cmp_usage->create_component( ).
  13.   endif.
  14.  
  15. * --- get reference to model
  16.   lr_if_controller = wd_this->wd_cpifc_salv_flights( ).
  17.  
  18. * get model and disable cell_action
  19.   lr_model = lr_if_controller->get_model( ).
  20.     lr_model->if_salv_wd_table_settings~set_cell_action_event_enabled(' ').
GeSHi ©


Anschließend registriere ich auf eine neue Ereignis-Methode ON_CLICK das Event ON_CLICK vom Interfacecontroller der SALV_FLIGHTS Komponente. In dieser setze ich einen Breakpoint.
Wenn ich nun das Web Dynpro Programm ausführe und in der Tabelle eine Zelle anklicke passiert aber leider nichts.
Was müßte ich also machen um eine Zeile auswählen zu können und nach einem Klick auf einen Button mit den Daten aus dieser Zeile weiterarbeiten zu können?
August142
.
.
 
Posts: 1
Joined: Wed Apr 20, 2011 3:17 pm


Return to Web Application Server

Who is online

Users browsing this forum: No registered users and 1 guest