W opisywanym wdrożeniu Studio WMS.net import tłumaczeń etykiet dopisuje nowe pary, a Import - update zmienia treść istniejących tłumaczeń. Wiersz bez pary w aktualizacji zostaje odrzucony z komunikatem o braku tłumaczenia. Każdy wiersz zapisuje wynik, a dziennik zachowuje treść sprzed zmiany, więc omyłkowy import da się cofnąć.
Narzędzie importu w opisywanym wdrożeniu ma dwa przyciski: Import dopisuje brakujące pary, a Import - update zmienia treść tylko wtedy, gdy para już istnieje. Każdy wiersz zapisuje wynik, a poprzednia treść zostaje w dzienniku, więc omyłkowy import da się cofnąć.
Wyróżnikiem tego wdrożenia jest to, że aktualizacja nie tworzy nowych wpisów, a wiersz bez pary zostaje odrzucony. Przed wyborem przycisku trzeba więc wiedzieć, czy wiersze z pliku już istnieją w bazie.
Dwa przyciski, dwa różne zadania
Pasek opisu dodatkowego asortymentu ma dwa przyciski importu. Przycisk Import dopisuje nowe tłumaczenia, a przycisk Import - update aktualizuje istniejące. Przed wysłaniem pliku przez Import - update pojawia się okno potwierdzenia.
Dla przycisku Import działa zasada dopisywania: para, która już istnieje, jest odrzucana, bo indeks tabeli nie dopuszcza drugiego wpisu o tym samym kluczu.
- Import - dopisuje nowe wpisy z pliku, a para istniejąca zostaje odrzucona.
- Import - update - aktualizuje treść istniejących wpisów, po potwierdzeniu w oknie.
Różnica między przyciskami ma znaczenie przy każdym pliku. Plik z nowymi parami uruchamia się przyciskiem Import, a plik z korektą istniejących opisów przyciskiem Import - update. Oba przyciski pracują na tej samej tabeli tłumaczeń, dlatego ich wybór zmienia skutek w jednym miejscu.
Co robi import, a co aktualizacja
Aktualizacja zmienia tekst na etykiecie i datę zmiany. Nazwa zmienia się tylko wtedy, gdy w pliku jest niepusta. Wpis, którego treść się nie zmienia, dostaje wynik oznaczający brak zmian i nie jest zapisywany. Dla porównania import dopisuje nowe pary i nie zmienia wpisów, które już istnieją.
| Przycisk | Para już istnieje w bazie | Pary nie ma w bazie |
|---|---|---|
| Import | wiersz odrzucony, wpis zostaje bez zmian | nowa para dopisana do tabeli |
| Import - update | treść i data zmiany zmienione; bez zmiany treści wynik oznacza brak zmian | wiersz odrzucony z komunikatem o braku tłumaczenia |
Zmiana treści wpisu nie zmienia jego kodu języka ani numeru artykułu, bo klucz pozostaje ten sam.
- Zmiana - tekst i data zmiany, a nazwa tylko wtedy, gdy jest niepusta.
- Brak zmiany - trzy pola zostają bez zmian: aktywność wpisu, jego magazyn i kod języka.
Jak wiersze pliku trafiają do bazy
Plik z Import - update trafia najpierw do tabeli pośredniej, a wyzwalacz po wstawieniu aktualizuje tabelę tłumaczeń. Przebieg ma cztery kroki:
- Plik trafia do tabeli pośredniej.
- Po wstawieniu wierszy uruchamia się wyzwalacz.
- Wyzwalacz porównuje klucz każdego wiersza z istniejącymi tłumaczeniami.
- Tylko wiersz z pasującym kluczem zmienia tabelę tłumaczeń.
Wiersz pasuje do istniejącego tłumaczenia, gdy zgadza się klucz, czyli kod języka i numer artykułu w danym magazynie. Wiersz bez klucza tłumaczenia kończy się błędem 50001, a pusty tekst błędem 50002. Plik z kluczem, który nie pasuje do żadnego wpisu, nie zmienia tabeli docelowej, bo zmiana następuje tylko tam, gdzie klucz się zgadza.
Pary wiąże się więc po całym kluczu, a nie po samym numerze artykułu. Ten sam numer w innym magazynie albo z innym kodem języka nie trafia do tego samego wpisu. Klucz ma trzy części: kod języka, numer artykułu i magazyn, więc ten sam numer artykułu w dwóch magazynach to dwie różne pary. Wiersz, który nie przeszedł kontroli klucza, nie zmienia żadnej wartości w tabeli tłumaczeń.
Ten sam wzorzec od strony samej bazy, na przykładowych danych, pokazuje artykuł o wyzwalaczu w T-SQL.
Co się dzieje z duplikatami i brakami
Wiersz bez pary w tabeli tłumaczeń jest odrzucany z komunikatem o braku tłumaczenia. Nowe tłumaczenia dodaje przycisk Import. Komunikat brzmi tak:
Import - update etykiet: brak tego tłumaczenia w bazie (kod języka + numer artykułu + magazyn) - wiersz odrzucony. Nowe tłumaczenia dodaj przyciskiem Import.
Przy powtórzonym kluczu w jednym pliku zostaje wiersz wstawiony ostatnio, a pozostałe dostają wynik oznaczający pominięcie duplikatu w pliku. Duplikat wykrywa się więc w obrębie jednego pliku, a nie w całej bazie. Wiersz odrzucony nie dostaje wartości w polu wyniku.
Przykład (dane wymyślone): zespół przygotowuje plik z dwoma poprawionymi opisami i jedną parą, której w bazie jeszcze nie ma. Pierwszy import wybiera przycisk Import - update, potwierdza okno i dostaje wynik zaktualizowano dla dwóch wierszy. Trzeci wiersz, bez pary w tabeli, zostaje odrzucony z komunikatem o braku tłumaczenia. Nowa para trafia do tabeli dopiero po imporcie przyciskiem Import.
Jak cofnąć omyłkowy import
Każdy wiersz zapisuje wartość w polu wyniku, a wartość sprzed zmiany jest zapisywana przed aktualizacją. Cofnięcie wymaga jednej instrukcji UPDATE, która przywraca zapisany tekst. Zanim ktokolwiek ją uruchomi, warto odczytać wiersze, w których wynik pokazuje zmianę, i porównać je z zapisaną wartością sprzed zmiany. Dopiero wtedy widać, które wpisy wymagają przywrócenia.
| Wynik | Co się dzieje z tabelą tłumaczeń | Co zostaje w dzienniku |
|---|---|---|
| zaktualizowano | opis i nazwa (gdy niepusta) zmienione, data zmiany ustawiona | treść sprzed zmiany |
| bez zmian | brak zmian | wynik |
| pominięto jako duplikat w pliku | brak zmian | wynik |
Dziennik rośnie z każdym importem, a nie czyści się sam. Tabela pokazuje, że każdy wynik zostawia inny ślad w dzienniku, więc przed cofnięciem trzeba ustalić, które wiersze dały wynik zmiany.
Gdzie kończy się zakres importu
Pole nazwy w tabeli nie przyjmuje wartości pustej, więc wiersz bez nazwy nie zapisze się przez przycisk Import. Aktualizacja nie zmienia magazynu ani kodu języka, a przycisk Import nie zmienia wpisów, które już istnieją.
- Nazwa - w aktualizacji zmienia się tylko wtedy, gdy wartość w pliku jest niepusta.
- Dziennik - zachowuje treść sprzed zmiany i nie czyści się automatycznie.
Zakres importu nie obejmuje magazynu ani aktywności wpisu, więc przy przygotowaniu pliku nie trzeba ich dopisywać do wierszy. Ta zasada wymaga potwierdzenia przed pierwszym importem, bo zespół przygotowujący plik i zespół obsługujący import mogą mieć różne oczekiwania. Ten zakres obejmuje tylko opis i nazwę, a nie inne pola wpisu.
Brak etykiety po imporcie, mimo że tłumaczenie istnieje, wyjaśnia artykuł o etykiecie w języku odbiorcy. Kolejność zdjęcia i wydruku wyjaśnia artykuł o wydruku po zdjęciu ilości. Sam plik etykiety opisuje artykuł o etykiecie jako pliku PDF. Ogólny opis obsługi wielu języków w programie znajduje się na stronie o wielojęzyczności w systemie WMS.
Pytania do analizy
- Czy operatorzy wiedzą, że Import - update nie tworzy nowych wpisów?
- Czy instrukcja pokazuje, jak cofnąć omyłkowy import, zanim ktoś zacznie go szukać w bazie?
- Czy dziennik importu pokazuje wiersze odrzucone, czy tylko zapisane?
- Czy magazyn tłumaczeń powinien być częścią pliku, czy wynikać z konta importu?