Barcodes: IBM i dank NTi und .NET auf dem Vormarsch

Rémi Rouillot

Donnerstag 04 April 2024

  • Tutorials

In diesem Artikel möchte ich Ihnen zeigen, wie Sie mithilfe von .NET und NTi schnell und einfach eine mobile Android-Anwendung entwickeln können, die eine Verbindung zur IBM i herstellt. Diese App wird es ermöglichen, Barcodes zu scannen und in eine Tabelle im IBM i einzufügen.

Hauptbild des Artikels „Barcodes: IBM i dank NTi und .NET auf dem Vormarsch“

Einführung

In diesem Artikel möchte ich Ihnen zeigen, wie Sie mithilfe von .NET und NTi schnell und einfach eine mobile Android-Anwendung entwickeln können, die eine Verbindung zur IBM i herstellt. Diese App wird es ermöglichen, Barcodes zu scannen und in eine Tabelle im IBM i einzufügen.

Schritt 1/3: Erstellen Sie die Tabelle in der IBM i.

Als Erstes erstellen wir eine Tabelle, in der die gescannten Barcodes gespeichert werden. Ich möchte die gescannten Daten, das Datum des Scans und den Typ des gescannten Barcodes speichern. Die SQL zum Erstellen der Tabelle lautet wie folgt:

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

Wir haben jetzt eine Tabelle BARCODES in der Bibliothek SAMPLE, um alles zu speichern.

Schritt 2/3: Entwickeln Sie die mobile Anwendung.

Erstellen wir nun die mobile Anwendung mithilfe der .NET-Projektvorlage MAUI.

Verwenden Sie die Kamera, um Barcodes zu lesen:

Um die Kamera des Smartphones zu nutzen, verwende ich eine der verfügbaren Bibliotheken zum Lesen von Barcodes, in diesem Fall [ZXing] (https://github.com/Redth/ZXing.Net.Maui). Diese Komponente lässt sich sehr einfach direkt in der Ansicht verwenden:

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

Anschließend fangen wir die aus dem zugrunde liegenden Code gelesenen Daten über die BarcodesDetected-Methode ab (siehe ZXing-Dokumentation).

Wir dürfen nicht vergessen, im Manifest unserer Anwendung anzugeben, dass wir auf die Kamera des Telefons zugreifen möchten. Andernfalls werden die erforderlichen Berechtigungen nicht erteilt.

Auswertung der Daten:

Wir verfügen nun über einen funktionierenden Barcode-Scanner. Nun müssen wir die Daten verarbeiten, indem wir sie in den IBM i einfügen. Dazu müssen wir nur NTi und Dapper in der Methode BarcodesDetected verwenden, um unsere SQL-Abfrage zum Einfügen auszuführen:

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();
}

Nebenbei löst man auf dem Smartphone eine Vibration aus, um dem Nutzer das Lesen zu bestätigen.

Zusammenfassung des Codes:

Für diejenigen, die dieses Beispiel nachvollziehen möchten: Der endgültige Code für die Ansicht (MainPage.xaml) lautet:

<?xml version="1.0" encoding="utf-8" ?>
<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="Exemple d'application permettant de scanner des QR codes et des codes à barres, et d'envoyer les données dans l'IBM i avec NTi"
                Style="{StaticResource SubHeadline}"/>
            <zxing:CameraBarcodeReaderView
                x:Name="cameraBarcodeReaderView"
                BarcodesDetected="BarcodesDetected"/>
        </VerticalStackLayout>
    </ScrollView>
</ContentPage>

Und den zugrunde liegenden Code (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();
        }
    }
}

Nun müssen wir unsere App nur noch veröffentlichen und auf einem Smartphone testen.

Schritt 3/3: Veröffentlichen und Testen

Mit Visual Studio können wir unsere Anwendung direkt als APK-Archiv veröffentlichen, das auf jedem Android-Gerät (Smartphone, Lagerhaushandtuch, Tablet, etc.) installiert werden kann.

💡Hinweis: Es muss möglich sein, eine Verbindung zwischen dem Smartphone und dem IBM i herzustellen, z. B. über ein VPN. Andernfalls müsste man eine Politik entwickeln, bei der die Daten offline eingegeben und dann synchronisiert werden, sobald die Verbindung wieder hergestellt ist.

Außerdem ist NTi völlig plattformunabhängig. Ich kann es also problemlos in einer Android/ARM-Umgebung verwenden, ohne einen Treiber installieren zu müssen. Dasselbe könnte ich auch für iOS tun, wenn ich für dieses Szenario ein iPhone gewählt hätte.

So testete ich, indem ich die App auf meinem Telefon installierte:

article 7

Die App funktioniert wie erwartet und versucht, Barcodes zu scannen. Ich finde eine Apfelpackung mit einem EAN8-Code und scanne sie:

article 7

Ich habe die Vibration meines Telefons gespürt und wenn ich im IBM i nachschaue, finde ich die Daten der EAN8, die ich gerade eingescannt habe, tatsächlich auf meinem Apfelkarton:

article 7

Fazit

Mit diesem Artikel habe ich ein Beispiel für einen Anwendungsfall vorgestellt, in dem NTi über ein Smartphone zum Bindeglied zwischen dem Feld und der IBM i wird. Man kann sich diese Art von Anwendung sehr gut auf einer Handbrause in einem Lagerhaus vorstellen oder auf dem Smartphone eines Wartungstechnikers, der Barcodes scannt, um Informationen zur Rückverfolgbarkeit in die IBM i zurückzuspielen.

In der Tat können alle Erfassungsgeräte einfach mit dem IBM i verwendet werden: Kameras, Laserscanner, Bluetooth-Geräte....

Zögern Sie nicht, uns zu kontaktieren, um NTi auszuprobieren!

Remi Rouillot

Zurück