Przekazanie wartości zmiennej: program->transakcja (M)

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

Przekazanie wartości zmiennej: program->transakcja (M)

Post autor: emil »

Kolejny raz poproszę o wskazanie, z której strony mogę ugryźć problem.

Zamysł mam taki:
Raport wyświetla mi ładną ALV (CL_SALV_TABLE), w której jedna z komórek jest klikalna.
Po kliknięciu ma mi się uruchomić nowa transakcja typu M, która przyjmie wartość przechwyconą z klikniętego w ALV pola.

Co mam na teraz zrobione:
- jest alv,
- jest "klikalna",
- jest uruchomiona nowa transakcja.

Zrealizowałem to w następujący sposób:

Kod: Zaznacz cały

"bdcdata do przakazania wartości pomiędzy transakcjami:
DATA: it_bdcdata TYPE TABLE OF bdcdata,
      wa_it_bdcdata LIKE LINE OF it_bdcdata.
(...) - wyciąganie danych, budowa alv, itd itd

Kod: Zaznacz cały


  METHOD on_link_click.

    "pobranie numeru wniosku z tabeli:
    READ TABLE lo_report->it_ZKC26_T_WN_HEAD INTO wa_ZKC26_T_WN_HEAD INDEX row.
    IF wa_ZKC26_T_WN_HEAD-NR_WN_BIZ IS NOT INITIAL.

      "przypisujemy wartość do przekazania do kolejnej transakcji
      CLEAR wa_it_bdcdata.
        wa_it_bdcdata-fnam = 'NR_WN_BIZ'.
        wa_it_bdcdata-fval = wa_ZKC26_T_WN_HEAD-NR_WN_BIZ.
        APPEND wa_it_bdcdata TO it_bdcdata.

        "uruchomienie kolejnej transakcji z przekazaniem wartości numeru ewid wniosku
        CALL TRANSACTION 'Z_KC26_WN_SZCZ' USING it_bdcdata."
    ENDIF.
  ENDMETHOD.     
Pobranie numeru na którym mi zależy działa poprawnie, do tabeli it_bdcdata poprawnie przypisują mi się dane, więc jest wypełniona (używam tylko jednego zestawu nazwa_zmiennej (fnam) + wartość_zmiennej (fval), co potwierdziłem w debuggerze.

Uruchamia mi się także transakcja wskazana w call transaction, jednak tu pojawiają się problemy:

- nie wiem jak "przechwycić" w nowej transakcji wartość zmiennej podanej w it_bdcdata,
- zapewne zaraz nie będę wiedział, jak przypisać wartość zmiennej jako wartość pola we/wy na ekranie (ale do tego jeszcze nie doszedłem).

Niewiele mówi mi komunikat SAPa w chwili, gdy próbuję "kliknąć" w alv i uruchamia się nowa transakcja: "Ekran startowy nie występuje w danych wprowadzania wsadowego".

Reasumując: jak mogę przechwycić dane z it_bdcdata, by na tych danych dalej pracować w kolejnej transakcji (opracowywać kolejne dane zależne od przekazanej zmiennej na ekranie 0100)?

****
Odnosząc się do uwagi jednego z Was, zamieszczonej pod moim poprzednim postem: niestety nie mam "pod ręką" nikogo mądrzejszego, by go podpytać. Leżę sobie na dłuuuuuuuuuuugim L4 i umilam sobie czas próbując zrobić projekt zaliczeniowy na uczelnię ;>
ZETKA
Posty: 69
Rejestracja: czw lis 04, 2010 10:49 pm
Has thanked: 1 time
Been thanked: 71 times
Kontakt:

Re: Przekazanie wartości zmiennej: program->transakcja (M)

Post autor: ZETKA »

W tabeli it_bdcdata muszą być przynajmniej 3 rekordy:
1. program/ekran
2. nazwa pola/wartość pola
3. BDC_OKCODE

Proszę zarejestrować transakcję Z_KC26_WN_SZCZ za pomocą transakcji SHDB - wszystko się wyjaśni.
Pozdrawiam,
Krzysiek
ZETKA
Posty: 69
Rejestracja: czw lis 04, 2010 10:49 pm
Has thanked: 1 time
Been thanked: 71 times
Kontakt:

Re: Przekazanie wartości zmiennej: program->transakcja (M)

Post autor: ZETKA »

I jeszcze jedno - tryb przetwarzania (MODE) w poleceniu CALL TRANSACTION. Jeżeli docelowa transakcja ma się "zatrzymać" w celu dalszego ręcznego przetwarzania tryb powinien być ustawiony na "E".
Pozdrawiam,
Krzysiek
emil
Posty: 133
Rejestracja: pt gru 27, 2019 11:02 am
Has thanked: 29 times
Been thanked: 42 times

Re: Przekazanie wartości zmiennej: program->transakcja (M)

Post autor: emil »

Jest ciut lepiej, ale jeszcze nie idealnie.

Doczytałem odrobinę w temacie zasilenia tabeli bdcdata, uzupełniłem wymagane, ładnie uruchamia mi się transakcja wg poniższych zaleceń:

Kod: Zaznacz cały

CLEAR WA_BDCDATA.
WA_BDCDATA-PROGRAM  = 'zy_kc26_wn_szcz'.
WA_BDCDATA-DYNPRO   = '0100'.
WA_BDCDATA-DYNBEGIN = 'X'.
WA_BDCDATA-FNAM     = 'NR_WN_BIZ'.
WA_BDCDATA-FVAL     = wa_ZKC26_T_WN_HEAD-NR_WN_BIZ.
APPEND WA_BDCDATA TO BDCDATA.

CALL TRANSACTION 'Z_KC26_WN_SZCZ'  USING BDCDATA  MODE 'E' .
Niestety nie jestem w stanie przechwycić w PBO ekranu żadnej wartości z BDCDATA. Ogólnie, w wywołanej transakcji nie potrafię namierzyć danych do niej przekazanych. Jakaś sugestia?
ZETKA
Posty: 69
Rejestracja: czw lis 04, 2010 10:49 pm
Has thanked: 1 time
Been thanked: 71 times
Kontakt:

Re: Przekazanie wartości zmiennej: program->transakcja (M)

Post autor: ZETKA »

Brakuje polecenia APPEND po trzech pierwszych wartościach. Program/ekran musi byc w oddzielnym wierszu.
Pozdrawiam,
Krzysiek
emil
Posty: 133
Rejestracja: pt gru 27, 2019 11:02 am
Has thanked: 29 times
Been thanked: 42 times

Re: Przekazanie wartości zmiennej: program->transakcja (M)

Post autor: emil »

ZETKA pisze: śr mar 04, 2020 4:42 pm Brakuje polecenia APPEND po trzech pierwszych wartościach. Program/ekran musi byc w oddzielnym wierszu.
A specjalnie to poprawiłem do 1 linii, zinterpretowałem (oddzielny wiersz) to jako błąd.
Poprawiłem wg Twoich sugestii.

Co ciekawe, nie widzę w tej strukturze miejsca na ok_code..
okcode2.png
okcode2.png (13.29 KiB) Przejrzano 2709 razy
dominik.tylczynski
Posty: 8355
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1924 times
Been thanked: 1477 times
Kontakt:

Re: Przekazanie wartości zmiennej: program->transakcja (M)

Post autor: dominik.tylczynski »

W strukturze BDCDATA okcode wchodzi w pola FNAM i FVAL, FNAM=BDC_OKCODE, FVAL=<okcode>
emil
Posty: 133
Rejestracja: pt gru 27, 2019 11:02 am
Has thanked: 29 times
Been thanked: 42 times

Re: Przekazanie wartości zmiennej: program->transakcja (M)

Post autor: emil »

Przyznam się Wam, że ciut się zagalopowałem i próbowałem strzelać do wróbla z armaty.
Wygląda na to, że na moje potrzeby wystarczające jest użycie import/export from memory...

No chyba, że idąc w stronę powyższego skręcę w ślepą uliczkę i za dwa dni obudzę się zapłakany z ręką w nocniku.

Plan na najbliższe godziny: dorzucić do PBO import wartości zmiennej i na poziomie PBO w oparciu o zaimportowane dane wyciągnąć z bazy rekordy, które później wyświetlę na screenie.
ZETKA
Posty: 69
Rejestracja: czw lis 04, 2010 10:49 pm
Has thanked: 1 time
Been thanked: 71 times
Kontakt:

Re: Przekazanie wartości zmiennej: program->transakcja (M)

Post autor: ZETKA »

IMPORT/EXPORT wymaga oprogramowania po stronie programu źródłowego jak i docelowego - nie zawsze jest taka możliwość. Zdecydowanie łatwiej wykorzystać parametry SET/GET. Przybliżę różnice między tymi metodami w przypadku, kiedy chcemy wypełnić tylko i wyłącznie pierwszy ekran transakcji i automatycznie przejść do drugiego.
1. SET/GET parameters.
Metoda ta działa wyłącznie w przypadku, kiedy niezbędne do wypełnienia pola na pierwszym ekranie transakcji obsługują co najmniej GET. Można to sprawdzić w atrybutach pola na ekranie (lub w PBO) a doświadczalnie wystarczy ponownie uruchomić transakcję - jeżeli pola "pamiętają" poprzednie wartości to jest dobrze (jeżeli nie pamiętają to też nie musi być źle :wink: ). Drugim warunkiem jest możliwość przejścia na kolejny ekran transakcji klawiszem ENTER.
Program może wyglądać wtedy następująco:

Kod: Zaznacz cały

SET PARAMETER ID '...' FIELD <variable>.  " dla każdego pola na ekranie, które powinno być wypełnione
CALL TRANSACTION '...' AND SKIP FIRST SCREEN.
2. CALL... USING bdcdata.
Metoda umożliwia obsługę jak powyżej oraz każdy inny możliwy przypadek (brak parametrów SET/GET, konieczność wykonania funkcji innej niż ENTER, konieczność przetworzenia więcej niż jednego ekranu (również kompletnej transakcji) ).
Pozdrawiam,
Krzysiek
emil
Posty: 133
Rejestracja: pt gru 27, 2019 11:02 am
Has thanked: 29 times
Been thanked: 42 times

Re: Przekazanie wartości zmiennej: program->transakcja (M)

Post autor: emil »

IMPORT/EXPORT wymaga oprogramowania po stronie programu źródłowego jak i docelowego - nie zawsze jest taka możliwość.
Całkowicie się zgadzam.
W moim przypadku import/export sprawdził się wyśmienicie, pociągnąłem dane w PBO na podstawie zaimportowanych wartości, wykonałem tam także get_data, dzięki czemu User wchodząc w transakcję ma od razu podane na tacy dane, których szukał.
Nie zmienia to faktu, że dalsze funkcjonalności rozpisane w PAI nadal są dostępne (oczywiście po dostosowaniu kodu do wartości podawanych w nieco innych zmiennych).

Tak nawiasem mówiąc, gdy będę musiał udowodnić, że własnoręcznie napisałem projekt, to wystarczy, że podam link do forum i wskażę swoje wątki. Od razu będzie widać, jakimi krętymi drogami szedłem do celu.
Oczywiście o ile moi wykładowcy nie siedzą tutaj zagryzając ze wstydu pazury na widok tego, jaki ogrom wiedzy wyniosłem z zajęć :lol:
ODPOWIEDZ