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
Stworzenie Freight Order przy użyciu TransportationOrderGenericRequest_In (XML)
-
- Posty: 8356
- Rejestracja: wt kwie 03, 2007 4:05 pm
- Has thanked: 1924 times
- Been thanked: 1477 times
- Kontakt:
Re: Stworzenie Freight Order przy użyciu TransportationOrderGenericRequest_In (XML)
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:
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.
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:
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.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.
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.
Re: Stworzenie Freight Order przy użyciu TransportationOrderGenericRequest_In (XML)
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.
`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).
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`
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.
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 ).
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`
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.
Re: Stworzenie Freight Order przy użyciu TransportationOrderGenericRequest_In (XML)
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ął.
-
- Posty: 8356
- Rejestracja: wt kwie 03, 2007 4:05 pm
- Has thanked: 1924 times
- Been thanked: 1477 times
- Kontakt:
Re: Stworzenie Freight Order przy użyciu TransportationOrderGenericRequest_In (XML)
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
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.
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 [...]
-
- Posty: 267
- Rejestracja: czw maja 31, 2007 10:17 pm
- Has thanked: 16 times
- Been thanked: 111 times
Re: Stworzenie Freight Order przy użyciu TransportationOrderGenericRequest_In (XML)
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.
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.
-
- Posty: 8356
- Rejestracja: wt kwie 03, 2007 4:05 pm
- Has thanked: 1924 times
- Been thanked: 1477 times
- Kontakt:
Re: Stworzenie Freight Order przy użyciu TransportationOrderGenericRequest_In (XML)
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: