Stworzenie Freight Order przy użyciu TransportationOrderGenericRequest_In (XML)

A tu dla odmiany podyskutować możesz na tematy logistyczne SAP. Jeśli pojawią się jakieś pytania, nie zwlekaj, zadaj je natychmiast.
ODPOWIEDZ
szelbi
Posty: 3
Rejestracja: pt paź 28, 2022 9:18 am
Has thanked: 1 time

Stworzenie Freight Order przy użyciu TransportationOrderGenericRequest_In (XML)

Post autor: szelbi »

Cześć.

Mam za zadanie utworzyć Freight Order przy użyciu serwisu TransportationOrderGenericRequest_I. Mój problem polega na tym, że nie wiem jak powinna wyglądać prawidłowa struktura XML dla takiego działania.
Znalazłem w internecie poradnik, który zaleca odwiedzenie TCODE SXMB_MONI, pobranie stamtąd przeprocesowanej już wiadomości i użycie jej struktury w w/w celu w TCODE SPROXY. Problem polega na tym, że kiedy próbuję wyszukać takie wiadomości, otrzynuję komunikat o tym, że nie udało się żadnej znaleźć, niezależnie od wybranego zakresu dat. Wyświetla się błąd "No messages found".

Kiedy otworzę serwis TransportationOrderGenericRequest_In w SPROXY i wejdę w "Test" mogę wybrać wygenerowanie szablonu takiego zapytania, ale skąd mam wiedzieć, które z pól powinny być wypenione, jakie wartości powinny się tam znaleźć i skąd je wziąć?
Z góry dziękuję za pomoc :)
dominik.tylczynski
Posty: 8326
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1915 times
Been thanked: 1474 times
Kontakt:

Re: Stworzenie Freight Order przy użyciu TransportationOrderGenericRequest_In (XML)

Post autor: dominik.tylczynski »

Nota 2474539 - Additional SOA Documentation for Enterprise Service "Maintain Generic Transportation Order" zawiera załączniki z bardziej szczegółową dokumentacją komunikatu TransportationOrderGenericRequest_In

Nota 2722559 - Usage of TransportationOrderGenericRequest_In in SAP Transportation Management zawiera informacje o sposobach użycia komunikatu oraz załącznik z minimalnym wymaganym zakresem danych.

Ta dokumentacja nie jest jakaś bardzo super pełna i trzeba trochę pokombinować metodą prób i błędów. Najważniejsza informacja z drugiej noty to:
This service is only capable of creating LOCAL items and cannot reference items of an existing demand document, such as a Freight Unit. Starting in S/4 HANA 2020 FPS01, this service can create FU or other TOR.
Innymi słowy, przy pomocy standardowego TransportationOrderGenericRequest_In możesz utworzyć freight order, ale nie przypiszesz do niego istniejących freight units. Moim zdaniem to stawia pod wielkim znakiem :?: użyteczność tego komunikatu.
Na szczęście można standardowe przetwarzanie rozszerzyć o dodawanie istniejących wcześniej freight units czy container units. Trzeba to samemu oprogramować w rozszerzeniu BAdI, ale jest to do zrobienia.
szelbi
Posty: 3
Rejestracja: pt paź 28, 2022 9:18 am
Has thanked: 1 time

Re: Stworzenie Freight Order przy użyciu TransportationOrderGenericRequest_In (XML)

Post autor: szelbi »

Stworzyłem pewną strukturę XML, która wydaje się być względnie prawidłowa,a także dodałem kod w BADI mając służyć przypisaniu do Fright Order konkretnych, istniejących już Freight Unitów.

Kod: Zaznacz cały

lo_srv_tor->do_action(
    EXPORTING
        iv_act_key           = /scmtms/if_tor_c=>sc_action-root-add_fu_by_fuid
        it_key               = lt_fo_key
        is_parameters        = lr_add_fu_param
    IMPORTING
        eo_change            = lo_change
        eo_message           = lo_message
        et_failed_key        = lt_failed_key
        et_failed_action_key = lt_failed_action_key ).
`lt_fo_key` zawiera GUID tworzonego właśnie Freight Order, natomiast `lr_add_fu_param` jest referencją do struktury, w której znajduje się numer Freight Unitu (nie GUID).
SAP po polsku, nauka SAP, SAP dla początkujących, SAP, S/4HANA, SAP ERP, SAPFORUM, FORUMSAP, HANA, SAP CLOUD PLATFORM, ABAP, EWM

W odpowiedzi otrzymuję tabelę zawierającą kilka powielających się, a jednocześnie i wykluczających wiadomości - część zwraca informację o sukcesie, pozostałe o błędzie.

Message Klasa: `/SCMTMS/PLN_VSR_OL`
Wiadomości: `207` & `221`
SAP po polsku, nauka SAP, SAP dla początkujących, SAP, S/4HANA, SAP ERP, SAPFORUM, FORUMSAP, HANA, SAP CLOUD PLATFORM, ABAP, EWM

W związku z powyższym nie udaje się stworzyć Freight Orderu i otrzymuję komunikat o błędzie. Z czego to wynika, dlaczego zwracane wiadomości same sobie zaprzeczają i jak mógłbym temu zaradzić? Dodam, że w przypadku, kiedy pominę dodawanie Freight Unitów przy użyciu powyższego kodu, Freight Order zostaje stworzony prawidłowo.
Zarówno `lt_failed_key`, jak i `lt_failed_action_key` są puste.
szelbi
Posty: 3
Rejestracja: pt paź 28, 2022 9:18 am
Has thanked: 1 time

Re: Stworzenie Freight Order przy użyciu TransportationOrderGenericRequest_In (XML)

Post autor: szelbi »

Kiedy wstawiłem GUID Freight Unitu do tabeli `target_item_keys` ze struktury `lr_add_fu_param`, żaden z wymienionych wyżej błędów nie zniknął.
dominik.tylczynski
Posty: 8326
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1915 times
Been thanked: 1474 times
Kontakt:

Re: Stworzenie Freight Order przy użyciu TransportationOrderGenericRequest_In (XML)

Post autor: dominik.tylczynski »

Zwróć uwagę, że w komunikatach pojawia się tymczasowy numer freight order'a tj. $1. To wygląda jakby freight order nie został jeszcze zapisany w bazie danych i nie został nadany numer FO.
Bardzo prawdopodobne, że akcja /scmtms/if_tor_c=>sc_action-root-add_fu_by_fuid nie potrafi obsługiwać takich nie zapisanych jeszcze FO.

Zacząłbym od napisania prostego programu testowego wywołującego akcję /scmtms/if_tor_c=>sc_action-root-add_fu_by_fuid dla już utworzonego FO. Utwórz FO bez FUs prz pomocy interfejsu TransportationOrderGenericRequest_In. Zobacz jaki został nadany numer FO. Następnie przypisz FUs przy pomocy tego testowego programu. Dzięki temu upewnisz się, że FO jest tworzony prawidłowo oraz że prawidłowo wywołujesz akcję i przy jej pomocy przypisujesz FUs.

Kiedy to już będzie opanowane, to kolejnym krokiem będzie wstawienie wywołania akcji do rozszerzenia BAdI. Jeśli moje przypuszczenie jest prawidłowe to będziesz musiał uruchamiać akcje do przypisania FUs w oddzielnym LUW (logical unit of work). Zapakuj wtedy wywołanie akcji w funkcję RFC. Najprościej, aby parametrami wejściowymi do funkcji był numer FO i tablica z FUs do przypisania. Dalej funkcję wywołujesz poprzez bgRFC

Kod: Zaznacz cały

DATA(lo_dest) = cl_bgrfc_destination_inbound=>create( /scmtms/cl_trig_helper=>return_trigger_rfc_dest( ) ).
DATA(lo_unit) = lo_dest->create_trfc_unit( ).
CALL FUNCTION '/SCMTMS/TOR_PROC_STRAT_ASYNC'
            IN BACKGROUND UNIT lo_unit
            EXPORTING [...]
Całość implementacji powinieneś umieścić w metodzie CHANGE_MODIFICATION w rozszerzeniu BAdI /SCMTMS/TOR_SE_TOR_GN_REQ. Najpierw spróbuj wywoływać akcje bez bgRFC, jeśli to nie zadziała to spróbuj z bgRFC.
mrcb
Posty: 260
Rejestracja: czw maja 31, 2007 10:17 pm
Has thanked: 15 times
Been thanked: 107 times

Re: Stworzenie Freight Order przy użyciu TransportationOrderGenericRequest_In (XML)

Post autor: mrcb »

Sprawdź w pierwszej kolejności, czy Twoje FU da się przypisać do utworzonego FO w kokpicie transportowym. To da ogólny pogląd na sytuację.
Następnie upewnij się, że FO ma przypisany profil planowania. Jeżeli tak, to czy przypisany profil ma zdefiniowane parametry do planowania ręcznego. Przypisanie etapu FU do FO przez add_fu_by_fuid, to nic innego jak manual planning.
Doświadczenie uczy, że właściwy profil planowania rozwiązuje znaczną część problemów w kodowaniu TM.

Jak zawiedzie, skorzystaj z porady Dominka.

pozdr.m.
dominik.tylczynski
Posty: 8326
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1915 times
Been thanked: 1474 times
Kontakt:

Re: Stworzenie Freight Order przy użyciu TransportationOrderGenericRequest_In (XML)

Post autor: dominik.tylczynski »

Jeśli uznasz, że problemem jest tymczasowy numer freight order'a tj. $1 to możesz spróbować zmienić konfigurację typu FO i ustawić natychmiastowe nadawanie numeru:
20221114_2905.png
20221114_2905.png (11.62 KiB) Przejrzano 933 razy
ODPOWIEDZ