Hallo miteinander,
ich schreibe aktuell ein Programm für HR, mit dem sie dynamisch E-Mail Benachrichtigungen einstellen können. Und wenn dann eine bestimmte Maßnahme eintritt, wird die E-Mail versendet. Hierfür habe ich ein Dynpro ( keinen Selection-Screen! ) gebaut. Dann habe ich ein Dynpro welches über einen FuBa gesteuert wird. Dieser FuBa soll mir mehr oder weniger "Varianten anzeigen" und dann auch liefern.
Das Mache ich über ein ALV ( mit CL_GUI_ALV_GRID ).
Nun möchte ich, dass der User eine Zeile auswählt und dann Enter klickt ( Grüner Hacken oder einfach die Enter taste ). Somit bekommt er seine Variante. Das funktioniert auch, aber nur ein Mal. Heißt während einer laufenden Programmsitzung ( oder wenn ich den FuBa über die SAP GUI teste ), funktioniert das nur ein Mal...
Heißt, User startet Transaktion. User holt sich über FuBa Benachrichtigung ( Variante ) eins. User macht seine Änderungen und speichert dies ab. User will sich über FuBa die 2. "Variante" ( Benachrichtigung ) holen. Und hier läuft es dann schief. Der User wählt aus und drückt auf Enter, aber die Methode "get_selected_rows" liefert nichts zurück. Es ist egal, welche Variante ich auswähle, beim 2. Aufruf wird nie etwas zurückgeliefert.
Coding:
Erste und Zweite Verwendung ( initialisierung des Grids )
PBO:
Code: Alles auswählen.
METHOD pbo.
container = NEW cl_gui_custom_container( container_name = 'CC_HELP' ).
help_alv = NEW cl_gui_alv_grid( container ).
" selecting Data usw.
DATA(fc) = build_fc( ).
help_alv->set_table_for_first_display(
EXPORTING
is_layout = build_layout( ) " layout
CHANGING
it_outtab = notifications " email notifications
it_fieldcatalog = fc " field catalog
).
ENDMETHOD.
3. Verwendung
Modul PAI ruft Methode PAI der lokalen klasse auf. Die Methode PAI ruft dann die Methode "get_rows" auf, bei entsprechendem SY-UCOMM:
Code: Alles auswählen.
METHOD get_rows.
help_alv->get_selected_rows(
IMPORTING
et_index_rows = DATA(index_rows) " Indizes der selektierten Zeilen
).
TRY.
" denkt euch hier bitte die eckigen klammern... Das Forum kann es leider nicht ordentlich darstellen [ ist offen und ] ist geschlossen
massn = notifications[ index_rows[ 1 ]-index ]-massn.
massg = notifications[ index_rows[ 1 ]-index ]-massg.
detail_1 = notifications[ index_rows[ 1 ]-index ]-detail_1.
detail_2 = notifications[ index_rows[ 1 ]-index ]-detail_2.
reason = SWITCH i(
notifications[ index_rows[ 1 ]-index ]-scenario
WHEN 'Infotyp' THEN '1'
WHEN 'Rollen' THEN '2'
).
CATCH cx_sy_itab_line_not_found.
ENDTRY.
ENDMETHOD.
Immer beim 2. Aufruf der Methode ( also innerhalb einer Programmsitzung ) wird mir beim Methodenaufruf "get_selected_rows", nichts mehr zurückgeliefert.
Mein letzter Aufruf:
Im Funktionsbaustein, wenn das Dynpro soweit fertig ist und geschlossen wurde wird die Methode clear aufgerufen ( weil ich dachte, dass das Problem durch eventuelle fehlende clears auftritt, wobei das nicht geholfen hat ):
Code: Alles auswählen.
METHOD clear.
CLEAR: reason, detail_1, detail_2, massn,massg,notifications, help_alv,container.
ENDMETHOD.
Nun dachte ich mir, dass es damit doch funktionieren müsste. Ich mache zum Schluss im FuBa sogar noch einen Clear auf das Objekt, der lokalen klasse. Heißt es existiert schlichtweg keinerlei Möglichkeit mehr auf irgend ein Objekt oder so zuzugreifen. Es wird immer ein neues Objekt erstellt bei jedem Aufruf des FuBas ... daher bin ich extrem verwirrt, wieso es nicht funktioniert. Habe dann auch noch alles in der lokalen Klasse statisch gemacht, hat auch nichts funktioniert... so langsam weiß ich nicht mehr weiter und mache mir gedanken um einen echt miesen Workaround ..