refresh dla cl_salv_table

Jeśli programujesz, administrujesz, integrujesz i masz wątpliwość lub obawę, to właśnie najlepsze miejsce dla Ciebie. Pisz śmiało...
emil
Posty: 82
Rejestracja: pt gru 27, 2019 11:02 am
Has thanked: 19 times
Been thanked: 25 times

refresh dla cl_salv_table

Post autor: emil »

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?
ZETKA
Posty: 68
Rejestracja: czw lis 04, 2010 10:49 pm
Has thanked: 1 time
Been thanked: 66 times

Re: refresh dla cl_salv_table

Post autor: ZETKA »

Przed metodą refresh( ) chyba trzeba zrobić ponownie SELECT'a z bazy danych, nie? :wink:
Pozdrawiam,
Krzysiek
emil
Posty: 82
Rejestracja: pt gru 27, 2019 11:02 am
Has thanked: 19 times
Been thanked: 25 times

Re: refresh dla cl_salv_table

Post autor: emil »

ZETKA pisze: pn sie 29, 2022 9:16 am Przed metodą refresh( ) chyba trzeba zrobić ponownie SELECT'a z bazy danych, nie? :wink:
<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.
Faktycznie, po dorzuceniu wcześniej wykorzystywanych metod get_data i get_data_details, dane zaczęły się odświeżać, ale... tylko dla już istniejących wpisów.
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.
ZETKA
Posty: 68
Rejestracja: czw lis 04, 2010 10:49 pm
Has thanked: 1 time
Been thanked: 66 times

Re: refresh dla cl_salv_table

Post autor: ZETKA »

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
emil
Posty: 82
Rejestracja: pt gru 27, 2019 11:02 am
Has thanked: 19 times
Been thanked: 25 times

Re: refresh dla cl_salv_table

Post autor: emil »

I wszystko jasne, a nawet działające ;> dziękuję za pomoc :)