StudioSystem

Skanowanie kodów QR za pomocą Androida

Komponent AndroidQrCode osadzany w dowolnym formularzu html: parametry, aktywacja skryptem html5-qrcode.min.js, miejsce zapisu odczytanej wartości oraz ograniczenia skanera.

studiosystem.softwarestudio.com.pl/transakcje/
Testowa transakcja skanowania kodów QR w aplikacji mobilnej StudioSystem
Testowa transakcja skanowania kodów QR w aplikacji mobilnej StudioSystem
W skrócie

AndroidQrCode to gotowy komponent html, który po osadzeniu w dowolnym formularzu StudioSystem uruchamia aparat urządzenia mobilnego w trybie skanowania kodów QR i wstawia odczytaną wartość do wskazanego pola. Konfiguracja sprowadza się do jednego wymaganego parametru - ssElementId - oraz kilku opcjonalnych, sterujących wyglądem przycisku i wyborem kamery.

Komponent AndroidQrCode

Dodanie skanera kodów QR do formularza w StudioSystem nie wymaga pisania własnej integracji z aparatem urządzenia. Wystarczy umieścić w kodzie html pojedynczy element z klasą AndroidQrCode, a resztę - obsługę kamery, podgląd i dekodowanie obrazu - przejmuje gotowa biblioteka.

<div class="AndroidQrCode" ssWidh="100px" ssText="QR SCAN" ssClass="art-buttonSiberia" ssElementId="QR_CODE_VALUE"></div>

Ten sam element można wstawić dynamicznie z poziomu skryptu transakcji jqs, co w praktyce jest częstszym scenariuszem niż zapisanie go na stałe w pliku html:

$("#formularz").append('<div class="AndroidQrCode" ssWidh="100px" ssText="QR SCAN" ssClass="art-buttonSiberia" ssElementId="QR_CODE_VALUE"></div>');

Sam element w tym momencie jest jeszcze bierny - dopiero po uruchomieniu funkcji konfigurującej, opisanej w sekcji o aktywacji skanera, zamienia się w działający przycisk.

Parametry konfiguracyjne

Zachowanie komponentu ustawia się atrybutami umieszczonymi bezpośrednio na elemencie div. Jeden z nich jest wymagany, pozostałe mają rozsądne wartości domyślne.

ParametrWymaganyZnaczenie
ssElementIdTakId elementu html, do którego trafi zeskanowana wartość.
ssTextNiePodpis przycisku. Domyślnie „Skanuj kod QR” z ikoną z /images_k/24x24/dodaj.png.
ssWidhNieSzerokość przycisku (px, % lub calc). Domyślnie 200px. Tak, nazwa parametru to rzeczywiście „ssWidh”, nie „ssWidth”.
ssClassNieDodatkowa klasa CSS dołączana obok domyślnej klasy art-button.
ssCameraIdNieNumer kamery urządzenia, od 0 do liczby kamer minus jeden.
ssFunctionNieNazwa funkcji użytkownika wykonywanej po zakończeniu skanowania.

Parametr ssText pozwala też dodać własną ikonę zamiast domyślnej grafiki, na przykład:

ssText="Skanuj kod QR<img src='/images_k/24x24/android.png' style='margin-left: 5px;' title='android qr scaner'/>"

Parametr ssClass nie zastępuje domyślnego stylu, tylko go uzupełnia - element otrzymuje jednocześnie klasy art-button i wskazaną w ssClass. Wartość art-buttonSiberia zmienia na przykład intensywny, ciemny niebieski na jaśniejszy odcień z palety Siberia, bez potrzeby pisania osobnego arkusza stylów dla każdego przycisku skanera.

Aktywacja skanera

Sam znacznik div nie uruchamia jeszcze niczego - to wyłącznie punkt zaczepienia dla skryptu. Aktywacja wymaga dwóch kroków: pobrania biblioteki skanera i wywołania na elemencie funkcji konfigurującej.

$.getScript('/Scripts/html5-qrcode.min.js', function () {
    $(".AndroidQrCode").each(function (index) {
        new KonfigurujAndroidQrCode($(this));
    });
});

Funkcja KonfigurujAndroidQrCode znajduje się w pliku studiosystemIS.js i jako parametr przyjmuje obiekt jQuery wskazujący na skonfigurowany element. Do poprawnego działania funkcjonalności u klienta potrzebne są więc dwa pliki:

  • /Scripts/html5-qrcode.min.js - biblioteka odpowiedzialna za obsługę kamery i dekodowanie obrazu.
  • /Scripts/studiosystemIS.js - plik z klasą KonfigurujAndroidQrCode, spinającą bibliotekę z elementem html.

Wzorzec „najpierw pobierz skrypt, potem skonfiguruj każdy pasujący element” pozwala dodać skaner do formularza zbudowanego dynamicznie, bez znajomości liczby przycisków w chwili pisania kodu strony - each() obsłuży tyle elementów AndroidQrCode, ile akurat znajdzie się na stronie.

Gdzie trafia zeskanowana wartość

Parametr ssElementId nie tylko wskazuje cel, ale też decyduje pośrednio o sposobie wstawienia wartości - skrypt sam sprawdza rodzaj wskazanego elementu i dobiera odpowiednią metodę jQuery.

  • input i textarea - wartość wstawiana jest metodą val(), czyli tak, jakby użytkownik wpisał ją ręcznie z klawiatury.
  • div, span, p i pozostałe elementy html - wartość wstawiana jest metodą html(), nadpisując dotychczasową zawartość elementu.

Dzięki temu ten sam komponent obsłuży zarówno pole formularza, do którego trafi numer seryjny gotowy do zapisania w bazie danych, jak i zwykły znacznik podglądu, w którym wynik ma się po prostu wyświetlić operatorowi bez dalszej edycji.

Opcjonalny parametr ssFunction pozwala pójść o krok dalej - zamiast (albo obok) wstawienia wartości do elementu, po zeskanowaniu kodu wykonana zostaje wskazana funkcja użytkownika, co otwiera drogę do bardziej złożonych scenariuszy, na przykład automatycznego wysłania formularza od razu po odczycie kodu.

Ograniczenia i wymagania

Zanim skaner trafi do produkcyjnego formularza, warto znać jego praktyczne ograniczenia - część z nich wynika z natury skanowania obrazem, a nie z samej implementacji.

  • Uprawnienia do aparatu - aplikacja musi mieć zgodę systemu Android na dostęp do aparatu, inaczej skanowanie się nie uruchomi.
  • Kod musi być wydrukowany - skaner nie radzi sobie dobrze z odczytem kodów wyświetlanych na ekranach laptopów, monitorów, telefonów czy telewizorów. Skanowany kod QR powinien znajdować się na papierze.
  • Jakość aparatu i autofocus - szybszy autofocus przekłada się wprost na szybszy odczyt, szczególnie przy kodach mniejszych rozmiarów.
  • Ilość światła - przy słabym oświetleniu czas i skuteczność odczytu wyraźnie spadają.
  • Stan skanowanego kodu - zabrudzony, wygnieciony lub uszkodzony wydruk może utrudnić albo całkowicie uniemożliwić odczyt.

Żadne z tych ograniczeń nie jest specyficzne wyłącznie dla StudioSystem - to naturalne cechy skanowania obrazem kamerą telefonu, wspólne dla większości bibliotek tego typu. Warto jednak uwzględnić je już na etapie projektowania procesu, na przykład zakładając drukowanie etykiet z kodem QR w rozmiarze większym niż absolutne minimum.

Realne zastosowania w transakcjach

Komponent nie jest wyłącznie przykładem z dokumentacji - pracuje na produkcji w kilku miejscach platformy. W transakcji wyszukiwania roli YMS skaner kodów QR oparty właśnie na bibliotece html5-qrcode.min.js można włączyć lub wyłączyć parametrem konfiguracyjnym, w zależności od tego, czy operator na placu ma pod ręką kody QR czy wpisuje dane ręcznie.

Drugim miejscem jest transakcja przyjęcia wewnętrznego w module WMS, gdzie sekcja wyszukiwania wykorzystuje już nowszy wariant biblioteki i dodatkowo konfiguruje przycisk tak, aby po odczycie kodu symulował naciśnięcie klawisza Enter - operator nie musi wykonywać żadnej dodatkowej czynności poza samym zeskanowaniem. Oba przykłady pokazują tę samą zasadę: skaner nie zastępuje pola tekstowego, tylko przyspiesza jego wypełnienie, co ma znaczenie przy większej skali pracy opisanej w materiale o aplikacji Android WMS.

Warto zwrócić uwagę, że w obu przypadkach skaner jest funkcją opcjonalną, a nie jedyną drogą wprowadzenia danych - operator zawsze może wpisać wartość ręcznie, jeśli akurat nie ma przy sobie wydrukowanego kodu albo urządzenie chwilowo nie ma dostępu do aparatu. Pełny wykaz transakcji, w których taki wybór ma znaczenie, zebrano w materiale o transakcjach YMS, obejmującym zarówno rejestrację awizacji, jak i obsługę placu z poziomu urządzenia mobilnego.

StudioSystem

Wartość gotowa od razu po odczycie

Operator nie przepisuje niczego ręcznie - zeskanowana wartość trafia do formularza w ułamku sekundy po rozpoznaniu kodu przez kamerę.

Nowszy skaner EAN i QR

Opisany komponent obsługuje wyłącznie kody QR. Tam, gdzie w jednym procesie trzeba odczytywać zarówno kody QR, jak i klasyczne kody kreskowe EAN, powstała nowsza, połączona wersja skanera. Zamiast html5-qrcode.min.js i funkcji KonfigurujAndroidQrCode, korzysta ona z biblioteki html5-qrcode_21.min.js oraz funkcji KonfigurujAndroidQrAndBarCode, opisanej dokładnie w materiale o skanowaniu kodów EAN i QR przy pomocy aparatu.

Wybór między wersjami zależy wyłącznie od zakresu kodów występujących w danym procesie. Jeśli formularz ma do czynienia tylko z kodami QR, prostszy i lżejszy komponent AndroidQrCode w zupełności wystarczy - nie ma powodu, aby sięgać po połączony skaner tam, gdzie druga obsługiwana przez niego funkcja nigdy nie zostanie wykorzystana.

Warto pamiętać, że skanowanie aparatem to tylko jedna strona obsługi kodów w StudioSystem. Drugą jest ich generowanie i drukowanie na dokumentach, opisane w materiale o kodach kreskowych w StudioSystem - tam kod trafia na wydruk zamiast być z niego odczytywany, ale konfiguracja opiera się na tym samym skorowidzu definicji.

Podsumowanie

Komponent AndroidQrCode pozwala dodać skanowanie kodów QR do dowolnego formularza StudioSystem jednym znacznikiem html i kilkoma liniami kodu aktywującego. Jedynym wymaganym parametrem jest ssElementId, a o sposób wstawienia wartości - do pola formularza czy do zwykłego elementu podglądu - dba sam skrypt.

W praktyce komponent działa już w transakcjach modułu YMS i WMS, przyspieszając wprowadzanie danych tam, gdzie operator ma pod ręką wydrukowany kod. Tam, gdzie potrzebna jest dodatkowo obsługa kodów EAN, naturalnym krokiem jest przejście na nowszy, połączony wariant skanera.

Słownik pojęć

Podstawowe pojęcia - skanowanie kodów QR

Terminologia przydatna przy osadzaniu skanera w formularzu.

AAndroidQrCode
Klasa elementu html osadzanego w formularzu, po której skrypt rozpoznaje miejsce wstawienia przycisku skanera.
SssElementId
Jedyny wymagany parametr komponentu - id elementu html, do którego trafi zeskanowana wartość kodu QR.
SssCameraId
Opcjonalny parametr wskazujący numer kamery urządzenia, od 0 do liczby kamer minus jeden.
KKonfigurujAndroidQrCode
Funkcja z pliku studiosystemIS.js uruchamiająca skaner na wskazanym elemencie po załadowaniu biblioteki html5-qrcode.min.js.
Hhtml5-qrcode.min.js
Biblioteka JavaScript odpowiedzialna za obsługę kamery i dekodowanie kodu QR w przeglądarce urządzenia mobilnego.
SssFunction
Opcjonalny parametr z nazwą funkcji użytkownika, wykonywanej automatycznie po zakończeniu skanowania kodu.
FAQ

Najczęściej zadawane pytania

01

Jak dodać przycisk skanowania kodów QR do formularza?

Wystarczy umieścić w kodzie html element z klasą AndroidQrCode i parametrem ssElementId, a następnie pobrać skrypt html5-qrcode.min.js i wywołać na tym elemencie funkcję KonfigurujAndroidQrCode z pliku studiosystemIS.js.

02

Który parametr jest wymagany?

Jedynym obowiązkowym parametrem jest ssElementId, wskazujący element html, do którego trafi odczytana wartość. Pozostałe parametry - ssText, ssWidh, ssClass, ssCameraId i ssFunction - są opcjonalne i mają wartości domyślne.

03

Gdzie trafia zeskanowana wartość?

Skrypt sam rozpoznaje typ elementu wskazanego parametrem ssElementId. Dla pól input i textarea używa metody val(), a dla pozostałych elementów html, takich jak div, span czy p, wypełnia je metodą html().

04

Czy skaner odczyta kod QR wyświetlony na ekranie?

Nie jest to zalecane. Skaner nie radzi sobie dobrze z odczytem kodów z ekranów laptopów, monitorów, telefonów czy telewizorów - skanowany kod QR powinien być wydrukowany na papierze.

05

Jak wybrać konkretną kamerę urządzenia?

Służy do tego opcjonalny parametr ssCameraId, przyjmujący wartości od 0 do liczby kamer w urządzeniu minus jeden. Domyślnie wybierana jest kamera ostatnia na liście, zwykle znajdująca się z tyłu urządzenia.

06

Czym różni się ten komponent od skanowania kodów EAN i QR?

Opisany tu komponent AndroidQrCode obsługuje wyłącznie kody QR i korzysta z biblioteki html5-qrcode.min.js. Nowsza, połączona wersja skanera EAN i QR wykorzystuje bibliotekę html5-qrcode_21.min.js oraz funkcję KonfigurujAndroidQrAndBarCode, opisaną osobno.

Warto przeczytać

Powiązane materiały o skanowaniu i aplikacji mobilnej

Kolejne kroki, jeśli wdrażasz skanowanie kodów w formularzach mobilnych.

EAN i QR

Skanowanie kodów EAN i QR przy pomocy aparatu

Nowsza, połączona wersja skanera obsługująca jednocześnie kody EAN i QR, wraz z testową transakcją i realnymi zrzutami ekranu z urządzenia mobilnego.

Czytaj dalej →
Aplikacja

Aplikacja Android WMS

Środowisko, w którym najczęściej pracuje komponent AndroidQrCode - mobilna obsługa magazynu z poziomu terminala lub smartfona.

Czytaj dalej →
YMS

Wyszukiwanie w roli YMS na Androidzie

Realny przykład wykorzystania skanera kodów QR w transakcji wyszukiwania, z możliwością włączenia i wyłączenia funkcji parametrem konfiguracyjnym.

Czytaj dalej →
WMS

Przyjęcie wewnętrzne PW na Androidzie

Transakcja z sekcją wyszukiwania wykorzystującą nowszy wariant skanera oraz automatyczne symulowanie klawisza Enter po odczycie kodu.

Czytaj dalej →
Kody

Kody kreskowe w StudioSystem

Druga strona tego samego tematu - jak system generuje i drukuje kody kreskowe na dokumentach, zamiast je odczytywać z kamery.

Czytaj dalej →

Chcesz zobaczyć transakcje w działaniu?

Uruchom demo modułów StudioSystem i sprawdź platformę na żywo.