Codici a barre Android: dal campo all’IBM i con NTi e .NET

In questo articolo vi mostrerò come sviluppare in modo semplice e veloce un'applicazione mobile Android che si connette all'IBM i utilizzando .NET e NTi. Questa applicazione scansiona i codici a barre e li inserisce in una tabella dell'IBM i.

immagine illustrativa dell'articolo “Codici a barre Android: dal campo all’IBM i con NTi e .NET”

In questo articolo vi mostrerò come sviluppare in modo semplice e veloce un'applicazione mobile Android che si connette all'IBM i utilizzando .NET e NTi. Questa applicazione scansiona i codici a barre e li inserisce in una tabella dell'IBM i.

Passo 1: creare la tabella nell'IBM i

Prima di tutto, creeremo una tabella per memorizzare i codici a barre che verranno scansionati. Voglio memorizzare i dati scansionati, la data della scansione e il tipo di codice a barre scansionato. L'SQL per la creazione della tabella è il seguente:

CREATE TABLE SAMPLE.BARCODES (SCANDATE TIMESTAMP, SCANTYPE VARCHAR(256), SCANVALUE VARCHAR(1024))

Ora abbiamo una tabella BARCODES nella libreria SAMPLE per memorizzare tutto.

Passo 2: sviluppare l'applicazione mobile

Creiamo ora l'applicazione mobile utilizzando un modello di progetto .NET MAUI.

Utilizzo della fotocamera per leggere i codici a barre:

Per utilizzare la fotocamera dello smartphone, utilizzo una delle librerie disponibili per la lettura dei codici a barre, in questo caso ZXing. Questo componente è molto semplice da usare, direttamente nella vista:

<zxing:CameraBarcodeReaderView
    x:Name="cameraBarcodeReaderView"
    BarcodesDetected="BarcodesDetected"/>

Intercettiamo quindi i dati letti dal codice sottostante utilizzando il metodo BarcodesDetected (vedere il documento ZXing).

Non dimenticate di specificare nel manifest dell'applicazione che volete accedere alla fotocamera del telefono. In caso contrario, le autorizzazioni necessarie non saranno concesse.

Elaborazione dei dati:

Ora abbiamo uno scanner di codici a barre funzionante. Ora dobbiamo elaborare i dati inserendoli nell'IBM i. A tale scopo, è sufficiente utilizzare NTi e Dapper nel metodo BarcodesDetected per eseguire la richiesta di inserimento SQL:

protected void BarcodesDetected(object sender, BarcodeDetectionEventArgs e)
{
    Vibration.Default.Vibrate();
    NTiConnection conn = new(_connectionString);
    conn.Open();
    foreach (var barcode in e.Results)
    {
        conn.Execute(
            "INSERT INTO SAMPLE.BARCODES (SCANDATE, SCANTYPE, SCANVALUE) VALUES (@TIME, @TYPE, @VALUE)",
            new
            {
                Time = DateTime.Now,
                Type = barcode.Format.ToString(),
                Value = barcode.Value
            }
        );
    }
    conn.Close();
}

Una vibrazione viene attivata sullo smartphone per confermare la lettura all'utente.

Riassunto del codice:

Per chi volesse riprodurre questo esempio, il codice finale per la vista (MainPage.xaml) è:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:zxing="clr-namespace:ZXing.Net.Maui.Controls;assembly=ZXing.Net.MAUI.Controls"
             x:Class="BarcodeAppXaml.MainPage">
    <ScrollView>
        <VerticalStackLayout
            Padding="30,0"
            Spacing="25">
            <Image
                Source="nti.png"
                HeightRequest="185"
                Aspect="AspectFit"/>
            <Label
                Text="NTi - Scan"
                Style="{StaticResource Headline}" />
            <Label
                Text="Esempio di applicazione per la scansione di codici QR e codici a barre e per l'invio dei dati all'IBM i con NTi"
                Style="{StaticResource SubHeadline}"/>
            <zxing:CameraBarcodeReaderView
                x:Name="cameraBarcodeReaderView"
                BarcodesDetected="BarcodesDetected"/>
        </VerticalStackLayout>
    </ScrollView>
</ContentPage>

E il codice sottostante (MainPage.xaml.cs):

using ZXing.Net.Maui;
using Aumerial.Data.Nti;
using Dapper;

namespace BarcodeAppXaml
{
    public partial class MainPage : ContentPage
    {
        private static string _connectionString = "...";
        public MainPage()
        {
            InitializeComponent();
            cameraBarcodeReaderView.Options = new BarcodeReaderOptions
            {
                Formats = BarcodeFormats.All,
                AutoRotate = true,
                Multiple = true
            };
        }

        protected void BarcodesDetected(object sender, BarcodeDetectionEventArgs e)
        {
            Vibration.Default.Vibrate();
            NTiConnection conn = new(_connectionString);
            conn.Open();
            foreach (var barcode in e.Results)
            {
                conn.Execute(
                    "INSERT INTO SAMPLE.BARCODES (SCANDATE, SCANTYPE, SCANVALUE) VALUES (@TIME, @TYPE, @VALUE)",
                    new
                    {
                        Time = DateTime.Now,
                        Type = barcode.Format.ToString(),
                        Value = barcode.Value
                    }
                );
            }
            conn.Close();
        }
    }
}

Ora non ci resta che pubblicare la nostra applicazione e testarla su uno smartphone.

Passo 3: pubblicazione e test

Grazie a Visual Studio, possiamo pubblicare la nostra applicazione direttamente sotto forma di archivio APK che può essere installato su qualsiasi dispositivo Android (smartphone, palmare warehouse, tablet, ecc.).

💡 Nota: è necessario poter stabilire una connessione tra lo smartphone e l'IBM i tramite una VPN, ad esempio. In caso contrario, sarebbe necessario sviluppare una politica di inserimento offline e poi di sincronizzazione una volta trovato il collegamento.

NTi è anche totalmente agnostico rispetto alla piattaforma. Posso quindi utilizzarlo in un ambiente Android/ARM senza problemi e senza dover installare un driver. Potrei fare lo stesso per iOS se avessi scelto un iPhone per questo scenario.

Ho quindi effettuato un test installando l'applicazione sul mio telefono:

Test della scansione sull’app mobile NTi Scan

L'applicazione funziona come previsto e cerca di scansionare i codici a barre. Trovo una confezione di mele con un codice EAN8 e la scannerizzo:

L’app mobile NTi Scan funziona e cerca codici a barre

Ho sentito vibrare il mio telefono e se vado a controllare nell'IBM i, trovo i dati EAN8 che ho appena scansionato sulla mia scatola di mele:

Dati recuperati su IBM i tramite scansione di codice a barre

Conclusione

In questo articolo ho presentato un esempio di caso d'uso in cui NTi diventa il collegamento tra il campo e l'IBM i tramite uno smartphone. È facile immaginare questo tipo di applicazione su una doccia portatile in un magazzino, o sullo smartphone di un manutentore che scansiona codici a barre per inviare informazioni di tracciabilità all'IBM i.

In realtà, tutti i dispositivi di acquisizione dati possono essere utilizzati con l'IBM i: fotocamere, scanner laser, periferiche Bluetooth...

Non esitate a contattarci per provare NTi!

Rémi Rouillot