Poproszę o nakierowanie mnie na poprawną ścieżkę, bo chyba trochę pobłądziłem.
Wrzucam sobie dane z it_alv do cl_salv_table (działam na szablonach stworzonych w oparciu o zevolvingowego bloga).
Jedna z kolumn ma pola z hotspotem, który wywołuje jakieś działanie (odpala fiorkę, na której są modyfikowane dane - zmieniają się wartości widoczne w GUIowej alv`ce).
Wymyśliłem, że fajnie by było zrobi przycisk odświeżania, by bez konieczności wracania do ekranu selekcji można było zobaczyć zmiany w danych.
Przygotowałem sobie zetowy status gui (zstandard), do którego dorzuciłem ładny przycisk REFRESH.
Bez problemu przechwytuję kliknięcie w utworzony przycisk i po message`ach widzę, że program przechodzi przez metodę, natomiast nie wykonuje się refresh alv`ki.
METHOD on_user_command.
CASE e_salv_function.
WHEN 'REFRESH'.
MESSAGE 'refr 1/2' type 'I' DISPLAY LIKE 'E'.
lo_report->o_alv->refresh( refresh_mode = if_salv_c_refresh=>full ).
CALL METHOD cl_gui_cfw=>flush( ).
MESSAGE 'refr 2/2' type 'I' DISPLAY LIKE 'E'.
ENDCASE.
ENDMETHOD.
...czyli np: wyświetlam dane w raporcie, cały czas mam wyświetloną alv, i:
scenariusz 1) dodaję w db nowy rekord, który załapałby się do alv gdyby wrócić do ekranu selekcji i jeszcze raz uruchomić raport
scenariusz 2) w db zmieniam którąś z wartości wyświetlanych na alv
...a następnie klikam w swojego refresha. Poprawnie wyświetlają mi się dwa komunikaty, ale odświeżenia brak.
Wydaje mi się, że deklaracje są ok
DATA: o_alv TYPE REF TO cl_salv_table.
(...)
START-OF-SELECTION.
INITIALIZATION.
DATA: lo_report TYPE REF TO lcl_report.
CREATE OBJECT lo_report.
CLASS lcl_report DEFINITION.
...itd.
Szperam po necie i nie mogę namierzyć rozwiązania albo przykładu dla salv table. Oczywście, jak na złość, dla REUSE_ALV_GRID_DISPLAY mamy pełno działających przykładów.
Mogę prosić o pokierowanie na właściwe tory?
refresh dla cl_salv_table
-
- Posty: 69
- Rejestracja: czw lis 04, 2010 10:49 pm
- Has thanked: 1 time
- Been thanked: 71 times
- Kontakt:
Re: refresh dla cl_salv_table
Przed metodą refresh( ) chyba trzeba zrobić ponownie SELECT'a z bazy danych, nie?
Pozdrawiam,
Krzysiek
Krzysiek
Re: refresh dla cl_salv_table
<facepalm>
Chyba błędnie założyłem, że mechanizm odświeżenie salva ogarnie także przygotowanie danych. Idiotyzm, przecież salv_table jedynie wyświetla podanego itaba, nie ingerując w to, jak został przygotowany.
Kod: Zaznacz cały
METHOD on_user_command.
CASE e_salv_function.
WHEN 'REFRESH'.
MESSAGE 'refr 1/2' TYPE 'I' DISPLAY LIKE 'E'.
lo_report->get_data( ). "pytanie o dane podstawowe
lo_report->get_data_details( ). "doprecyzowanie danych
lo_report->o_alv->refresh( refresh_mode = if_salv_c_refresh=>full ).
CALL METHOD cl_gui_cfw=>flush( ).
MESSAGE 'refr 2/2' TYPE 'I' DISPLAY LIKE 'E'.
ENDCASE.
ENDMETHOD.
Czyli jeśli zmieniłem w db jakieś informacje z ręki - refresh pokazuje zmiany.
Jeśli zostało coś dodane (nowy rekord) - pojawia się dopiero od ponownego uruchomienia z ekranem selekcji.
-
- Posty: 69
- Rejestracja: czw lis 04, 2010 10:49 pm
- Has thanked: 1 time
- Been thanked: 71 times
- Kontakt:
Re: refresh dla cl_salv_table
Po INSERT / MODIFY / UPDATE / DELETE trzeba wykonać jawny bądź niejawny COMMIT lub zmian dokonywać równolegle w bazie danych i w tabeli wewnętrznej, wtedy nie będzie potrzebny nawet SELECT.
Pozdrawiam,
Krzysiek
Krzysiek