Étape 1 - Créer la table dans l'IBM i
La table suivante stocke les codes-barres scannés, la date du scan et le type de code-barres :
CREATE TABLE SAMPLE.BARCODES (
SCANDATE TIMESTAMP,
SCANTYPE VARCHAR(256),
SCANVALUE VARCHAR(1024)
)Étape 2 - Développer l'application mobile
Le projet est créé depuis un modèle .NET MAUI dans Visual Studio.
Lecture des codes-barres avec ZXing
La bibliothèque ZXing.Net.Maui exploite l'appareil photo du smartphone pour lire les codes-barres. Elle s'intègre directement dans la vue :
<zxing:CameraBarcodeReaderView
x:Name="cameraBarcodeReaderView"
BarcodesDetected="BarcodesDetected"/>
Les données lues sont interceptées dans le code sous-jacent via la méthode BarcodesDetected (voir la documentation ZXing).
Ne pas oublier de déclarer la permission d'accès à l'appareil photo dans le manifeste de l'application, sans quoi les autorisations nécessaires ne seront pas accordées.
Insertion dans l'IBM i avec NTi
La méthode BarcodesDetected utilise NTi Data Provider et Dapper pour insérer les données dans DB2 for i :
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();
}
Une vibration est déclenchée sur le smartphone pour confirmer la lecture à l'utilisateur.
Code complet
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="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>
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();
}
}
}Étape 3 - Publication et test
Visual Studio permet de publier l'application directement sous forme d'archive APK, installable sur n'importe quel appareil Android : smartphone, douchette d'entrepôt, tablette.
💡Une connexion entre le smartphone et l'IBM i est nécessaire, via un VPN par exemple. Sans cela, il faudrait implémenter une politique de saisie hors-ligne avec synchronisation différée.
NTi Data Provider est totalement agnostique à la plateforme. Il fonctionne en environnement Android/ARM sans pilote à installer, et fonctionnerait de la même manière sur iOS.
L'application est installée sur un smartphone Android et cherche automatiquement des codes-barres à l'ouverture :

En scannant un code EAN8 sur un emballage, la vibration confirme la lecture et les données sont immédiatement insérées dans l'IBM i :

Le résultat est visible directement dans la table SAMPLE.BARCODES :

Conclusion
NTi Data Provider devient ici le liant entre le terrain et l'IBM i via un smartphone. Ce type d'application peut s'envisager sur une douchette en entrepôt ou sur le smartphone d'un technicien de maintenance pour remonter de la traçabilité dans l'IBM i.
Tous les dispositifs d'acquisition deviennent utilisables simplement avec l'IBM i : appareil photo, scanner laser, périphériques Bluetooth.
Rémi Rouillot