Manipulacja stanem magazynowym przesyłanym przez WfSync do sklepu internetowego

Treść poniższego artykułu skierowana jest do Partnerów i profesjonalistów znających składnię języka SQL.

Błędna konfiguracja może doprowadzić do nieprawidłowości w działaniu integratora.

Nie udzielamy wsparcia w zakresie działania tej funkcji ani w zakresie poleceń SQL.

W bardziej nietypowych scenariuszach może być wymagane "oszukanie" wartości stanu magazynowego jaką integrator WfSync przesyła do sklepu. Na przykład:

  • zwiększenie/zmniejszenie ilości o określoną wartość,
  • wskazanie zupełnie innej wartości niż domyślna.

Obydwa cele można osiągnąć poprzez wskazanie własnego polecenia SQL pobierającego dostępną ilość towaru z bazy podmiotu WAPRO.

Polecenie to musi być typu SELECT i zawsze musi zwracać wartość rzeczywistą (nie powinno w żadnym wypadku zwrócić NULL). SELECT może odwoływać się zarówno do tabeli (table) jak i do widoku (view). Wartość ta zostanie - w zależności od składni polecenia:

  • dodana do wartości odczytanej standardowym mechanizmem integratora
  • zamieni wartość odczytaną przez integrator. W takim wypadku w poleceniu SQL musi znaleźć się fraza INSTEAD_OF_SM (patrz przykłady poniżej).

Polecenie SQL może zawierać znaczniki, które zostaną zamienione na wartości odpowiadające określonemu artykułowi. Dostępne znaczniki to:

  • {guid} - odpowiada polu [GUID_ARTYKUL] z tabeli [dbo].[ARTYKUL],
  • {symbol} - symbol towaru (widoczny w oknie importu/eksportu towarów w kolumnie Symbol,
  • {mag_ids} - identyfikatory magazynów skonfigurowane w integratorze (magazyn główny oraz opcjonalnie dodatkowe magazyny użyte w mapowaniu magazynów na sklepy w konfiguracji integratora). Reprezentuje wartości całkowite oddzielone przecinkami, np. 1,2,1000

Zapytanie należy umieścić w ustawieniu SqlQuery_StanyMagazynowe w konfiguracji zaawansowanej integratora. Okno konfiguracji zaawansowanej można otworzyć poprzez kombinację klawiszy: Shift + F9 w głównym oknie integratora.

Uwaga: Zmiany w innych ustawieniach konfiguracji zaawansowanej mogą być dokonywane wyłącznie w konsultacji z producentem integratora!

Przykłady

Pobierz ilość z pola dodatkowego 1 towaru (we wszystkich skonfigurowanych magazynach) i dodaj ją do ilości dostępnej w magazynie:

SELECT SUM(COALESCE(TRY_CAST((CASE WHEN [POLE1] IS NULL OR [POLE1] = '' THEN '0' ELSE [POLE1] END) AS DECIMAL(10,4)), 0)) FROM [dbo].[ARTYKUL] WHERE [INDEKS_KATALOGOWY] = '{symbol}' AND [ID_MAGAZYNU] IN ({mag_ids})

Pobierz ilość z pola dodatkowego 1 towaru, tylko z magazynu o ID = 2 i prześlij ją zamiast ilości dostępnej w magazynie:

SELECT COALESCE(TRY_CAST((CASE WHEN [POLE1] IS NULL OR [POLE1] = '' THEN '0' ELSE [POLE1] END) AS DECIMAL(10,4)), 0) AS INSTEAD_OF_SM FROM [dbo].[ARTYKUL] WHERE [GUID_ARTYKUL] = '{guid}' AND [ID_MAGAZYNU] =2