PAI dla SELECTION SCREEN - lista el. zależna od warunku

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

PAI dla SELECTION SCREEN - lista el. zależna od warunku

Post autor: emil »

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ł?
dominik.tylczynski
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

Post autor: dominik.tylczynski »

emil pisze: śr mar 11, 2020 9:40 am 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.
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.
dominik.tylczynski
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

Post autor: dominik.tylczynski »

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).
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.

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.
ZETKA
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

Post autor: ZETKA »

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.
Pozdrawiam,
Krzysiek
emil
Posty: 133
Rejestracja: pt gru 27, 2019 11:02 am
Has thanked: 29 times
Been thanked: 42 times

Re: PAI dla SELECTION SCREEN - lista el. zależna od warunku

Post autor: emil »

@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).

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.
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:
AT SELECTION SCREEN OUTPUT to PBO, nie PAI - bardzo dobre miejsce na dynamiczną modyfikację ekranu selekcji.
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.html
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.
ZETKA
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

Post autor: ZETKA »

Proszę spróbować 'CZE' nie 'cze'.
Pozdrawiam,
Krzysiek
dominik.tylczynski
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

Post autor: dominik.tylczynski »

Wszystkie literały, których używasz w implementacji AT SELECTION-SCREEN OUTPUT muszą być wielkimi literami, czyli

Kod: Zaznacz cały

IF sy-tcode = 'Z_KC26_WN_BIZ_AKC' AND SCREEN-NAME = 'CZE'.
a nie

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'.
a nie

Kod: Zaznacz cały

IF sy-tcode = 'Z_KC26_WN_BIZ_AKC' AND SCREEN-NAME = 'cze'.
Ponownie zwróć uwagę na wielkość liter.
emil
Posty: 133
Rejestracja: pt gru 27, 2019 11:02 am
Has thanked: 29 times
Been thanked: 42 times

Re: PAI dla SELECTION SCREEN - lista el. zależna od warunku

Post autor: emil »

ZETKA pisze: śr mar 11, 2020 12:09 pm Proszę spróbować 'CZE' nie 'cze'.
Sprawdzałem, też nie tędy droga. :cry:
dominik.tylczynski
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

Post autor: dominik.tylczynski »

emil pisze: śr mar 11, 2020 12:16 pm
ZETKA pisze: śr mar 11, 2020 12:09 pm Proszę spróbować 'CZE' nie 'cze'.
Sprawdzałem, też nie tędy droga. :cry:
Tędy, tędy - choć nie wprost i nie do końca...
emil
Posty: 133
Rejestracja: pt gru 27, 2019 11:02 am
Has thanked: 29 times
Been thanked: 42 times

Re: PAI dla SELECTION SCREEN - lista el. zależna od warunku

Post autor: emil »

dominik.tylczynski pisze: śr mar 11, 2020 12:17 pm
emil pisze: śr mar 11, 2020 12:16 pm
ZETKA pisze: śr mar 11, 2020 12:09 pm Proszę spróbować 'CZE' nie 'cze'.
Sprawdzałem, też nie tędy droga. :cry:
Tędy, tędy - choć nie wprost i nie do końca...
Więc jeden z kroków stawiam nie tam, gdzie powinienem.
Obecnie jestem na etapie:
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.
Zgodnie z przewidywaniami - nie działa. Message`m sprawdzam sobie po drodze, czy wszedłem w program na pewno odpowiednią transakcją.
emil
Posty: 133
Rejestracja: pt gru 27, 2019 11:02 am
Has thanked: 29 times
Been thanked: 42 times

Re: PAI dla SELECTION SCREEN - lista el. zależna od warunku

Post autor: emil »

Rozgryzłem... zaraz opiszę co i jak...
dominik.tylczynski
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

Post autor: dominik.tylczynski »

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.
emil
Posty: 133
Rejestracja: pt gru 27, 2019 11:02 am
Has thanked: 29 times
Been thanked: 42 times

Re: PAI dla SELECTION SCREEN - lista el. zależna od warunku

Post autor: emil »

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.
Jest dokładnie tak, jak napisałeś.
Nie wiem jakim sposobem umknął mi cudzysłów. Solidnie się zamotałem.

Bardzo dziękuję za pomoc.
dominik.tylczynski
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

Post autor: dominik.tylczynski »

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.
ODPOWIEDZ