PAI dla SELECTION SCREEN - lista el. zależna od warunku
PAI dla SELECTION SCREEN - lista el. zależna od warunku
I znów potrzebuję Waszego pokierowanie.
Zamysł mam taki:
- mam przygotowany selection screen składający się z 4 radiobuttonów
- sprawdzam jaką transakcją uruchomiony był program
- jeśli jest to transakcja Z_A ukrywam radiobuttony 1-2
- jeśli jest to transakcja Z_B ukrywam radiobuttony 3-4
- dalej po uruchomieniu raportu zbieram dane i wyświetlam je za pomocą alv (salv).
Znalazłem masę rozwiązań dot. ukrywania/pokazywania elementów selection screena w momencie, gdy User wykonał na nim jakąś akcję (czyli w zasadzie praca w momencie PAI -> AT SELECTION-SCREEN OUTPUT). Nie udało mi się niestety znaleźć rozwiązania, które pozwoliłoby wykonać na ekranie 1000 jakąś akcję (ukrycie/wyłączenie radiobuttona) przed wyświetleniem ekranu userowi (czyli PBO).
Zerknąłem w log. przepł. dla ekranu 1000 w programie, ale chyba jestem za cienki w uszach by oszacować, czy mogę z tego poziomu mieć wpływ na wyświetlane elementy selection screena.
Mogę prosić o pokierowanie, jak zrealizować swój zamysł?
Zamysł mam taki:
- mam przygotowany selection screen składający się z 4 radiobuttonów
- sprawdzam jaką transakcją uruchomiony był program
- jeśli jest to transakcja Z_A ukrywam radiobuttony 1-2
- jeśli jest to transakcja Z_B ukrywam radiobuttony 3-4
- dalej po uruchomieniu raportu zbieram dane i wyświetlam je za pomocą alv (salv).
Znalazłem masę rozwiązań dot. ukrywania/pokazywania elementów selection screena w momencie, gdy User wykonał na nim jakąś akcję (czyli w zasadzie praca w momencie PAI -> AT SELECTION-SCREEN OUTPUT). Nie udało mi się niestety znaleźć rozwiązania, które pozwoliłoby wykonać na ekranie 1000 jakąś akcję (ukrycie/wyłączenie radiobuttona) przed wyświetleniem ekranu userowi (czyli PBO).
Zerknąłem w log. przepł. dla ekranu 1000 w programie, ale chyba jestem za cienki w uszach by oszacować, czy mogę z tego poziomu mieć wpływ na wyświetlane elementy selection screena.
Mogę prosić o pokierowanie, jak zrealizować swój zamysł?
-
- Posty: 8350
- Rejestracja: wt kwie 03, 2007 4:05 pm
- Has thanked: 1921 times
- Been thanked: 1476 times
- Kontakt:
Re: PAI dla SELECTION SCREEN - lista el. zależna od warunku
Przede wszystkim nigdy nie grzebiemy bezpośrednio w implementacji selection screen, w tym w jego logice przepływu. Selection screen jest generowany na bieżąco na podstawie kodu raportu (te wszystkie komendy z SELECTION-SCREEN definiują własnie ekran selekcji). Zatem cokolwiek byś zmienił i tak zostanie nadpisane podczas kolejnego generowania.
-
- Posty: 8350
- Rejestracja: wt kwie 03, 2007 4:05 pm
- Has thanked: 1921 times
- Been thanked: 1476 times
- Kontakt:
Re: PAI dla SELECTION SCREEN - lista el. zależna od warunku
AT SELECTION-SCREEN OUTPUT działa w PBO ekranu selekcji, czyli zanim użytkownik zobaczy ten ekran. To jest właściwe miejsce do ukrycia elementów ekranu.emil pisze: ↑śr mar 11, 2020 9:40 am Znalazłem masę rozwiązań dot. ukrywania/pokazywania elementów selection screena w momencie, gdy User wykonał na nim jakąś akcję (czyli w zasadzie praca w momencie PAI -> AT SELECTION-SCREEN OUTPUT). Nie udało mi się niestety znaleźć rozwiązania, które pozwoliłoby wykonać na ekranie 1000 jakąś akcję (ukrycie/wyłączenie radiobuttona) przed wyświetleniem ekranu userowi (czyli PBO).
Ukrywanie Twoich przycisków zrobiłbym +/- następująco:
Kod: Zaznacz cały
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF sy-tcode = 'Z_A' AND SCREEN-NAME = <radiobutton 1>.
SCREEN-INPUT = 0.
SCREEN-INVISIBLE = 1.
ENDIF.
IF sy-tcode = 'Z_A' AND SCREEN-NAME = <radiobutton 2>.
SCREEN-INPUT = 0.
SCREEN-INVISIBLE = 1.
ENDIF.
IF sy-tcode = 'Z_B' AND SCREEN-NAME = <radiobutton 3>.
SCREEN-INPUT = 0.
SCREEN-INVISIBLE = 1.
ENDIF.
IF sy-tcode = 'Z_B' AND SCREEN-NAME = <radiobutton 4>.
SCREEN-INPUT = 0.
SCREEN-INVISIBLE = 1.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
-
- Posty: 69
- Rejestracja: czw lis 04, 2010 10:49 pm
- Has thanked: 1 time
- Been thanked: 71 times
- Kontakt:
Re: PAI dla SELECTION SCREEN - lista el. zależna od warunku
AT SELECTION SCREEN OUTPUT to PBO, nie PAI - bardzo dobre miejsce na dynamiczną modyfikację ekranu selekcji.
Oczywiście, jak wspomniał Dominik, nie modyfikujemy nigdy ekranu selekcji za pomocą edytora ekranów.
Oczywiście, jak wspomniał Dominik, nie modyfikujemy nigdy ekranu selekcji za pomocą edytora ekranów.
Pozdrawiam,
Krzysiek
Krzysiek
Re: PAI dla SELECTION SCREEN - lista el. zależna od warunku
@dominik.tylczynski próbowałem już działać w sugerowany przez Ciebie sposób, ale nie zadziałało to.
W miejscu wskazanym przez Ciebie jako nazwa elementu, wrzucałem zarówno identyfikator modif radiobuttona, jak i samą nazwę elementu (radio1, radio2..., radio 6).
Wg powyższego kodu, po odpaleniu programu przez transakcję Z_KC26_WN_BIZ_AKC nie powinien pojawić się pierwszy radiobutton. Niestety - cały czas się pojawia. Jak już wcześniej wspominałem, dokładnie ta sama sytuacja jest wtedy, gdy w SCREEN-NAME zamiast 'cze' użyję:
IF sy-tcode = 'Z_KC26_WN_BIZ_AKC' AND SCREEN-NAME = 'radio1'.
albo:
IF sy-tcode = 'Z_KC26_WN_BIZ_AKC' AND SCREEN-NAME = radio1.
@ZETKA:
Stąd właśnie moje upieranie się przy tym, że AT SELECTION-SCREEN OUTPUT powiązane jest PAI (w końcu coś musiało się wydarzyć - User coś zaznaczył).
Dziękuję za wyjaśnienie tej kwestii.
W miejscu wskazanym przez Ciebie jako nazwa elementu, wrzucałem zarówno identyfikator modif radiobuttona, jak i samą nazwę elementu (radio1, radio2..., radio 6).
Kod: Zaznacz cały
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECTION-SCREEN SKIP 1.
PARAMETERS: radio1 RADIOBUTTON GROUP gr1 MODIF ID cze. "czyli czeka na akcpeptacja it/biznes
PARAMETERS: radio2 RADIOBUTTON GROUP gr1 MODIF ID obs. "historia dla it/biznes
PARAMETERS: radio3 RADIOBUTTON GROUP gr1 MODIF ID now. "utworzenie nowego wniosku
PARAMETERS: radio4 RADIOBUTTON GROUP gr1 MODIF ID rea. "w trakcie realizacji - wn. tylko wnioskujacego
PARAMETERS: radio5 RADIOBUTTON GROUP gr1 MODIF ID zre. "zrealizowane zakonczone
PARAMETERS: radio6 RADIOBUTTON GROUP gr1 MODIF ID anu. "anulowane i odrzucone
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN END OF BLOCK b1.
AT SELECTION-SCREEN OUTPUT.
MESSAGE sy-tcode type 'I'.
LOOP AT SCREEN.
IF sy-tcode = 'Z_KC26_WN_BIZ_AKC' AND SCREEN-NAME = 'cze'.
SCREEN-INPUT = 0.
SCREEN-INVISIBLE = 1.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
IF sy-tcode = 'Z_KC26_WN_BIZ_AKC' AND SCREEN-NAME = 'radio1'.
albo:
IF sy-tcode = 'Z_KC26_WN_BIZ_AKC' AND SCREEN-NAME = radio1.
@ZETKA:
Moje błędne pojmowanie PBO/PAI wynika z faktu, że w większości przypadków, na forach SAPowych omawiane są przypadki, gdy należy coś zmienić/schować na selection screenie w reakcji na działanie usera. Np: https://answers.sap.com/questions/68611 ... creen.htmlAT SELECTION SCREEN OUTPUT to PBO, nie PAI - bardzo dobre miejsce na dynamiczną modyfikację ekranu selekcji.
Stąd właśnie moje upieranie się przy tym, że AT SELECTION-SCREEN OUTPUT powiązane jest PAI (w końcu coś musiało się wydarzyć - User coś zaznaczył).
Dziękuję za wyjaśnienie tej kwestii.
-
- Posty: 69
- Rejestracja: czw lis 04, 2010 10:49 pm
- Has thanked: 1 time
- Been thanked: 71 times
- Kontakt:
Re: PAI dla SELECTION SCREEN - lista el. zależna od warunku
Proszę spróbować 'CZE' nie 'cze'.
Pozdrawiam,
Krzysiek
Krzysiek
-
- Posty: 8350
- Rejestracja: wt kwie 03, 2007 4:05 pm
- Has thanked: 1921 times
- Been thanked: 1476 times
- Kontakt:
Re: PAI dla SELECTION SCREEN - lista el. zależna od warunku
Wszystkie literały, których używasz w implementacji AT SELECTION-SCREEN OUTPUT muszą być wielkimi literami, czyli
a nie
Ponadto w SCREEN-NAME jest nazwa pola z ekranu, czyli w Twoim przypadku 'RADIO1', 'RADIO2', itd.
Wartości CZE, OBS, NOW itd. są w SCREEN-GROUP1 - zobacz SAP Help: SELECTION-SCREEN - MODIF ID
Zatem jeśli chcesz ukrywanie radiobuttonów uzależnić od MODIF ID to powinieneś użyć: a nie Ponownie zwróć uwagę na wielkość liter.
Kod: Zaznacz cały
IF sy-tcode = 'Z_KC26_WN_BIZ_AKC' AND SCREEN-NAME = 'CZE'.
Kod: Zaznacz cały
IF sy-tcode = 'Z_KC26_WN_BIZ_AKC' AND SCREEN-NAME = 'cze'.
Ponadto w SCREEN-NAME jest nazwa pola z ekranu, czyli w Twoim przypadku 'RADIO1', 'RADIO2', itd.
Wartości CZE, OBS, NOW itd. są w SCREEN-GROUP1 - zobacz SAP Help: SELECTION-SCREEN - MODIF ID
Zatem jeśli chcesz ukrywanie radiobuttonów uzależnić od MODIF ID to powinieneś użyć:
Kod: Zaznacz cały
IF sy-tcode = 'Z_KC26_WN_BIZ_AKC' AND SCREEN-GROUP1 = 'CZE'.
Kod: Zaznacz cały
IF sy-tcode = 'Z_KC26_WN_BIZ_AKC' AND SCREEN-NAME = 'cze'.
-
- Posty: 8350
- Rejestracja: wt kwie 03, 2007 4:05 pm
- Has thanked: 1921 times
- Been thanked: 1476 times
- Kontakt:
Re: PAI dla SELECTION SCREEN - lista el. zależna od warunku
Tędy, tędy - choć nie wprost i nie do końca...
Re: PAI dla SELECTION SCREEN - lista el. zależna od warunku
Więc jeden z kroków stawiam nie tam, gdzie powinienem.
Obecnie jestem na etapie:
Zgodnie z przewidywaniami - nie działa. Message`m sprawdzam sobie po drodze, czy wszedłem w program na pewno odpowiednią transakcją.SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECTION-SCREEN SKIP 1.
PARAMETERS: RADIO1 RADIOBUTTON GROUP GR1 MODIF ID CZE. "czyli czeka na akcpeptacja it/biznes
PARAMETERS: RADIO2 RADIOBUTTON GROUP GR1 MODIF ID OBS. "historia dla it/biznes
PARAMETERS: RADIO3 RADIOBUTTON GROUP GR1 MODIF ID NOW. "utworzenie nowego wniosku
PARAMETERS: RADIO4 RADIOBUTTON GROUP GR1 MODIF ID REA. "w trakcei realizacji - wn. tylko wnioskujacego
PARAMETERS: RADIO5 RADIOBUTTON GROUP GR1 MODIF ID ZRE. "zrealizowane zakonczone
PARAMETERS: RADIO6 RADIOBUTTON GROUP GR1 MODIF ID ANU. "anulowane i odrzucone
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN END OF BLOCK b1.
AT SELECTION-SCREEN OUTPUT.
MESSAGE sy-tcode type 'I'.
LOOP AT SCREEN.
IF sy-tcode = 'Z_KC26_WN_BIZ_AKC' AND SCREEN-NAME = RADIO1.
SCREEN-INPUT = 0.
SCREEN-INVISIBLE = 1.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
-
- Posty: 8350
- Rejestracja: wt kwie 03, 2007 4:05 pm
- Has thanked: 1921 times
- Been thanked: 1476 times
- Kontakt:
Re: PAI dla SELECTION SCREEN - lista el. zależna od warunku
Brakuje cudzysłowu wokół RADIO1 - powinno być 'RADIO1' a nie RADIO1. W IF chcesz się odnieść do nazwy pola, a nie do jego zawartości - RADIO1 to odniesienie do wartości zmiennej RADIO1.
Przeczytaj uważnie mają poprzednią odpowiedź, gdzie pokazałem błędy jakie robisz.
Dobrze byłoby również skorzystać z debuggera - wszystko zobaczy jak na dłoni, a teraz błądzisz po omacku.
Przeczytaj uważnie mają poprzednią odpowiedź, gdzie pokazałem błędy jakie robisz.
Dobrze byłoby również skorzystać z debuggera - wszystko zobaczy jak na dłoni, a teraz błądzisz po omacku.
Re: PAI dla SELECTION SCREEN - lista el. zależna od warunku
Jest dokładnie tak, jak napisałeś.dominik.tylczynski pisze: ↑śr mar 11, 2020 12:31 pm Brakuje cudzysłowu wokół RADIO1 - powinno być 'RADIO1' a nie RADIO1. W IF chcesz się odnieść do nazwy pola, a nie do jego zawartości - RADIO1 to odniesienie do wartości zmiennej RADIO1.
Przeczytaj uważnie mają poprzednią odpowiedź, gdzie pokazałem błędy jakie robisz.
Dobrze byłoby również skorzystać z debuggera - wszystko zobaczy jak na dłoni, a teraz błądzisz po omacku.
Nie wiem jakim sposobem umknął mi cudzysłów. Solidnie się zamotałem.
Bardzo dziękuję za pomoc.
-
- Posty: 8350
- Rejestracja: wt kwie 03, 2007 4:05 pm
- Has thanked: 1921 times
- Been thanked: 1476 times
- Kontakt:
Re: PAI dla SELECTION SCREEN - lista el. zależna od warunku
Tak przy okazji, to dobrą praktyką jest korzystanie z MOD ID, a nie bezpośrednio z nazwy pola w tego typu modyfikacjach.
Kod jest wtedy bardziej przejrzysty i łatwiejszy do utrzymania.
Kod jest wtedy bardziej przejrzysty i łatwiejszy do utrzymania.