Sklep internetowy przyjmuje zamówienie, a przesyłka kurierska ma powstać bez udziału człowieka. Do tego służy funkcja zapisana w pliku DLL, którą wywołuje aplikacja zewnętrzna. Biblioteka zapisuje paczki w bazie Spedycja.net i zwraca identyfikator zlecenia wysyłki.

Wywołanie funkcji z pliku DLL

Aplikacja internetowa nie zapisuje wierszy w bazie Spedycja.net samodzielnie. Wywołuje funkcję z biblioteki, która zawiera definicje klas i struktur wraz z wydrukami potrzebnymi do poprawnego zapisu. Klasa SpedytorLib.Dll wraz ze strukturami SpedytorLib.Dll* obsługuje całą wymianę danych, a gwiazdka oznacza nazwę konkretnej struktury wymaganej przy wywołaniu.

ElementRola w wywołaniu
Plik DLLzawiera funkcję oraz definicje klas i struktur wraz z wydrukami
Klasa SpedytorLib.Dllobsługuje całą wymianę danych z bazą Spedycja.net
Struktury SpedytorLib.Dll*niosą dane niezbędne do wywołania funkcji
Wynik wywołaniainformuje, czy zlecone zadania wykonano z powodzeniem
Identyfikator zlecenia wysyłkiwskazuje, które utworzone zlecenie ma się drukować

Plik DLL musi być dostępny na serwerze, na którym działa aplikacja wywołująca. Programista otrzymuje gotowe elementy zamiast projektować własne zapisy do bazy, więc integracja ogranicza się do wypełnienia struktur i odczytu wyniku. Starszy opis tej samej wymiany znajduje się na stronie o integracji ze spedycją.

Zamówienie ze sklepu jako zlecenie wysyłki

Najprostszy scenariusz zaczyna się w sklepie internetowym. Zamówienie jest opłacone i spakowane, a aplikacja sklepu tworzy zlecenie w Spedycja.net jednym wywołaniem funkcji. Wynik wraca w tej samej chwili, więc sklep wie, czy może uruchomić wydruk.

  1. Klient składa zamówienie, a aplikacja zapisuje je we własnej bazie.
  2. Aplikacja wypełnia strukturę danymi odbiorcy i paczki oraz wywołuje funkcję z biblioteki.
  3. Biblioteka zapisuje zlecenie w bazie Spedycja.net i zwraca wynik razem z identyfikatorem zlecenia.
  4. Aplikacja zapisuje identyfikator przy zamówieniu i wskazuje go przy wydruku.
Studio WMS.net - wypełniony formularz nagłówka WZ wydanie z magazynu, kontrahent Nowomex Wieliczka, zlecenie ZWZ
Nagłówek dokumentu WZ z polami Odbiorca i Przewoźnik, czyli dane potrzebne przy przygotowaniu przesyłki

Reguła: aplikacja nie zakłada, że wywołanie się powiodło. Najpierw odczytuje wynik, a dopiero potem zapisuje identyfikator przy zamówieniu i uruchamia wydruk. Etykieta dla zlecenia, którego nie ma w bazie, jest etykietą bez przesyłki.

Pola Odbiorca i Przewoźnik w dokumencie WZ pokazują, jakie dane towarzyszą wydaniu. Proces opisuje strona o wydaniu z magazynu, a zewnętrzne aplikacje opisują strony o aplikacji internetowej WMS i o programowaniu magazynowym.

Ponowienie wywołania bez duplikatu zlecenia

Sieć bywa zawodna. Jeśli odpowiedź nie dotrze do sklepu, aplikacja ponowi wywołanie, a w Spedycja.net powstaną dwa zlecenia dla jednego zamówienia. Ochronę trzeba zbudować po stronie aplikacji wywołującej, bo to ona zna numer zamówienia.

Poniższy przykład jest ilustracyjny i nie pokazuje kodu produktu. Tabela śladów wywołań ma klucz główny na numerze zamówienia, więc drugi zapis dla tego samego zamówienia kończy się błędem, zanim biblioteka zostanie wywołana po raz drugi.

CREATE TABLE dbo.ZleceniaSpedycjiSklepu (
    ZamowienieId          int         NOT NULL,
    IdentyfikatorZlecenia int         NULL,
    Status                varchar(10) NOT NULL DEFAULT 'W_TOKU',
    CONSTRAINT PK_ZleceniaSpedycjiSklepu PRIMARY KEY (ZamowienieId)
);

-- przed wywołaniem funkcji z biblioteki
INSERT INTO dbo.ZleceniaSpedycjiSklepu (ZamowienieId) VALUES (@ZamowienieId);

-- po poprawnym wyniku wywołania
UPDATE dbo.ZleceniaSpedycjiSklepu
SET IdentyfikatorZlecenia = @Id, Status = 'GOTOWE'
WHERE ZamowienieId = @ZamowienieId;

Obsługa wyniku i błędów po stronie aplikacji

Funkcja zwraca wynik z informacją o powodzeniu zleconych zadań. Aplikacja wywołująca musi rozróżnić trzy sytuacje, bo każda wymaga innej reakcji. Rozróżnienie opiera się na wyniku wywołania i na śladzie zapisanym przed jego rozpoczęciem.

SytuacjaStan śladu w tabeli aplikacjiReakcja
Wynik pozytywnyidentyfikator zapisany, status GOTOWEwydruk etykiety dla zwróconego identyfikatora
Wynik negatywnystatus W_TOKU bez identyfikatorakomunikat dla operatora, ponowienie po ustaleniu przyczyny
Brak odpowiedzistatus W_TOKU bez identyfikatorasprawdzenie w bazie Spedycja.net, czy zlecenie powstało, przed ponowieniem

Ostatni wiersz jest najtrudniejszy. Przerwana odpowiedź nie dowodzi, że zlecenie nie powstało, bo biblioteka mogła zapisać dane tuż przed zerwaniem połączenia. Dlatego aplikacja najpierw szuka zlecenia po numerze zamówienia, a dopiero potem decyduje o ponowieniu.

Uprawnienia i miejsce wywołania

Funkcja działa w kontekście konta, na którym pracuje aplikacja internetowa. To konto musi mieć prawo zapisu w bazie Spedycja.net, a parametry połączenia nie powinny trafiać do kodu strony. Standardowym miejscem jest plik konfiguracyjny aplikacji, opisany na stronie o logowaniu do WMS i konfiguracji IIS.

Zakres uprawnień warto ograniczyć do operacji potrzebnych przy tworzeniu zleceń. Konto sklepu nie musi mieć dostępu do kartotek ani do dokumentów finansowych. Podział ról użytkowników opisuje strona o rolach i użytkownikach w systemie WMS.

Wywołanie w tle zamiast w żądaniu strony

Wywołanie funkcji w trakcie obsługi żądania HTTP wydłuża czas odpowiedzi sklepu. Gdy baza spedycyjna odpowiada wolno, klient czeka na potwierdzenie zamówienia. Lepszym układem jest zapis zamówienia, odpowiedź dla klienta, a dopiero potem wywołanie funkcji w osobnym zadaniu.

Ślad w tabeli aplikacji pełni wtedy rolę kolejki. Zadanie w tle wybiera wiersze o statusie W_TOKU. Dla każdego wywołuje funkcję, a potem zapisuje wynik. Przy awarii serwera zadanie wznawia pracę od pierwszego wiersza bez identyfikatora, więc żadne zamówienie nie zostaje pominięte.

Scenariusze testowe przed uruchomieniem

Integrację sprawdza się na kopii bazy, nigdy na danych produkcyjnych. Test powinien obejmować nie tylko ścieżkę, w której wszystko działa. Przerwane połączenie i powtórzone wywołanie ujawniają błędy, których nie widać przy pojedynczym zamówieniu.

Wymiana danych a magazyn

Zlecenie wysyłki dotyczy towaru, który ktoś musi najpierw skompletować. Magazyn pracuje na własnej bazie, a Spedycja.net na własnej, więc jedna aplikacja obsługuje wydanie, a druga przesyłkę. Opis programu zawiera kilka cech, które łączą te dwa obszary.

ObszarZapis w opisie programu
Stany magazynowezgodne z rzeczywistością dzięki kontroli w czasie rzeczywistym
Kartoteki towarowestatusy i zdjęcia przy każdej pozycji, osobno załączniki
Dokumentywystawianie WZ i PZ oraz faktur bez ręcznego przepisywania
Dostęponline z urządzeń z systemem Windows, Android lub Apple OS
Metody wydawaniaobsługa partii, lokalizacji oraz zasad FIFO i LIFO

Zasada FIFO wydaje najpierw towar przyjęty najwcześniej, a LIFO najpóźniej. Wybór zależy od asortymentu, bo towar z terminem ważności wymaga FIFO. Strony o programach magazynowych OnLine i o systemie WMS opisują całość funkcji. Integracja z ERP ogranicza ręczne wprowadzanie danych także po stronie wysyłki.

Rozdzielenie baz ma jeszcze jedną konsekwencję. Awaria jednej aplikacji nie zatrzymuje drugiej, więc magazyn może dalej przyjmować i wydawać towar, gdy moduł wysyłkowy jest niedostępny. Zlecenia czekają wtedy w kolejce aplikacji wywołującej i trafiają do Spedycja.net po przywróceniu działania. Taki układ wymaga jednak monitorowania kolejki, bo długa przerwa zostawia wiersze ze statusem W_TOKU, które ktoś musi zauważyć i wyjaśnić.

Urządzenia i automatyzacja przy wysyłce

Pakowanie kończy się skanem na terminalu, który potwierdza zebraną paczkę. Opis terminali zawiera strona o komputerach ręcznych Zebra TC5X. Jeśli magazyn używa przenośników lub robotów, zasady współpracy z systemem opisuje artykuł o automatyzacji w magazynie.

Wdrożenie obejmuje wybór wersji i konfigurację, a także szkolenie obsługi. Każdy magazyn ma inną specyfikę, dlatego konsultant musi znać branżę klienta, zanim dobierze zakres wymiany. Ogólny opis rozwiązania znajduje się na stronie aplikacji dla magazynów wysokiego składowania oraz na stronie producenta Studio WMS.net. Podstawową terminologię tego obszaru porządkuje słownik pojęć CSCMP.

Pytania i odpowiedzi o obsługę Spedycja.net z aplikacji internetowej

Wywołuje funkcję zapisaną w pliku DLL, przekazując dane w strukturach SpedytorLib.Dll*. Biblioteka zapisuje zlecenie w bazie Spedycja.net i zwraca wynik razem z identyfikatorem zlecenia wysyłki.

Wskazuje, które z utworzonych zleceń ma się drukować. Aplikacja zapisuje go przy zamówieniu, więc wydruk można powtórzyć bez tworzenia kolejnego zlecenia.

Tak. Zewnętrzna aplikacja wywołuje funkcję po zapisaniu zamówienia, a zlecenie powstaje bez ręcznego wprowadzania danych. Wynik wywołania trzeba odczytać przed uruchomieniem wydruku.

Aplikacja zapisuje u siebie ślad wywołania z numerem zamówienia jako kluczem unikatowym. Drugi zapis dla tego samego zamówienia zostaje odrzucony, więc funkcja z biblioteki nie jest wywołana ponownie.

Zawiera definicje klas i struktur wraz z wydrukami, które są potrzebne do poprawnego zapisu danych w bazie. Programista aplikacji zewnętrznej korzysta z tych gotowych elementów.

Glosariusz pojęć związanych z obsługą Spedycja.net

Plik DLL
Biblioteka dynamiczna z funkcjami, które wywołuje inna aplikacja. W tym przypadku zawiera funkcję tworzącą zlecenia w Spedycja.net.
SpedytorLib.Dll
Klasa obsługująca całą wymianę danych ze Spedycja.net, używana razem ze strukturami o nazwach SpedytorLib.Dll*.
Struktura danych
Zbiór pól przekazywany do funkcji, który opisuje odbiorcę i paczkę.
Zlecenie wysyłki
Zapis w bazie Spedycja.net opisujący przesyłkę do przygotowania. Każde zlecenie ma własny identyfikator.
Identyfikator zlecenia
Wartość zwracana przez funkcję, która wskazuje zlecenie przeznaczone do wydruku.
Klucz główny
Ograniczenie tabeli, które gwarantuje unikatowość wiersza i tworzy indeks wspierający wyszukiwanie.
FIFO
Zasada wydawania towaru, w której pierwszy przyjęty towar jest wydawany jako pierwszy.
LIFO
Zasada wydawania towaru, w której ostatni przyjęty towar jest wydawany jako pierwszy.

Warto przeczytać

Rejestr gniazd paletowych w regałach wysokiego składowania - status i historia adresu
Rejestr miejsc składowania w regałach wysokiego składowania: pola lokalizacji, status gniazda, skorowidze oraz stany i historia obrotów pod adresem w WMS.
Czytaj artykuł →
Wybór miejsca w regale wysokiego składowania - kryteria przyjęcia i wydania towaru
Jak WMS wybiera miejsce w regale wysokiego składowania przy przyjęciu i wydaniu: czas operacji, ilość w miejscu, partie, strefy dostępu oraz limity regałów.
Czytaj artykuł →
Operacje wewnętrzne w magazynie wysokiego składowania - Studio WMS.net
Operacje wewnętrzne w magazynie: zmiana lokalizacji ZL, paleta MIX, reorganizacja i nośniki SSCC. Atomowość przemieszczeń w T-SQL oraz terminale Studio WMS.net.
Czytaj artykuł →
Technologia WMS dla magazynu wysokiego składowania - .NET Framework i SQL Server
Technologia Studio WMS.net dla magazynu wysokiego składowania: .NET Framework 3.5, ASP.net i SQL Server, wersja Framework, WebService i kolejka w T-SQL.
Czytaj artykuł →
Programy do zarządzania magazynem i wydajna optymalizacja Studio WMS.net
Programy do zarządzania magazynem Studio WMS.net z perspektywy kierownika: podział prac, wskaźniki zmiany, SaaS czy własny serwer, sprzęt i zapytanie T-SQL.
Czytaj artykuł →
Używane palety w magazynie z systemem Studio WMS.net
Ewidencja używanych palet i nośników: salda z kontrahentami, numery SSCC, stan techniczny i wymiana palet. Przykład T-SQL i rozliczenia w Studio WMS.net.
Czytaj artykuł →