Skip to main content

Verwendung des Scanners Honeywell Voyager XP 1470

Ab der Version 4.5 kann der Asset Manager mit dem Scanner Honeywell Voyager XP 1470 verwendet werden. Grundsätzlich sollten aber auch andere Scanner funktionieren, die

  • über eine USB-Schnittstelle angeschlossen sind und Tastatureingaben (Human Interface Device, HID) simulieren.
  • deutsche Umlaute als solche erkennen und auch ausgeben.
  • vor dem Senden der Daten das Startsignal STX (ASCII 0x02) senden.
  • nach dem Senden der Daten des Endesignal ETX (ASCII 0x03) senden.

Damit diese Funktion sichergestellt ist, muss der Scanner einmalig programmiert werden. Dazu muss nach dem Auspacken und dem Anschließen des Scanners an der USB-Schnittstelle einmalig folgender Code eingescannt werden:

ConfigSettings.png

Die folgende Tabelle veranschaulicht, welche Eigenschaften im Gegensatz zu den Standardeinstellungen angepasst wurden:

scanner-config.png

Verwendung des Scanners

Vom Grundsatz her ist die Verwendung unkompliziert: Es wird der Datensatz einer Tabelle geöffnet, der bearbeitet werden soll. Anschließend muss die Maus in dem Feld plaziert werden, in dem der Wert für einen maschinell lesbaren Code gespeichert werden soll. Sobald der Code gescannt wurde, wird dieser in das zuvor markerite Feld eingetragen.

Suchen mittels Scanner

Es kann mittels Scanner aber auch in einer Tabelle nach einem bestimmten Datensatz gesucht werden. Hierzu innerhalb des Asset Managers im Navigationsbaum eine Tabelle öffen und darauf achten, dass der entsprechende Tab den Fokus besitzt. Anschließend den maschinell lesbaren Code einscannen. Wird der Scannvorgang erkannt, durchsucht der Asset Manager mittels Volltextsuche alle Zellen innerhalb einer Tabelle. Wird genau ein Datensatz gefunden, wird dieser zur Bearbeitung geöffnet. Bei mehreren gefundenen Datensätzen werden diese gefiltert angezeigt und es obliegt dem Anwender, was damit geschehen soll.

Teile von Datensätzen vervollständigen/ausfüllen

Mit Hilfe des Scanners können auch mehrere Felder eines Datensatzes in einem Scanvorgang ausgefüllt werden. Hierzu ist es  notwendig, dass ein QR-Code Teile dieses Datensatzes enthält. Diese Informationen sind aber in gewöhnlichen QR-Codes nicht enthalten. Als Hersteller haben wir daher eine Klasse entwickelt, mit der diese Informationen fälschungssicher in einem QR-Code gespeichert werden können. Der nachfolgende Abschnit beschreibt die Funktionsweise dieser Klasse.

Dokumentation der smcTeam.Tools Klassen

Diese Bibliothek bietet Werkzeuge zur Validierung und Manipulation von JSON-Daten sowie zur Erzeugung von QR-Codes. Im Wesentlichen umfasst sie folgende Klassen:

  • KeyValueEntry Repräsentiert einzelne Einträge mit einem Schlüssel, einem Wert und zugehörigen Flags.
  • JsonIntegrity Enthält Methoden zur Erstellung eines JSON-Arrays aus KeyValueEntry-Objekten, zur Berechnung einer Prüfsumme (Checksum) sowie zur Validierung, Aktualisierung und Formatierung von JSON-Daten.
  • QrCode Stellt Methoden bereit, um aus einem Text oder aus einer Sammlung von KeyValueEntry-Objekten einen QR-Code (als SVG) zu generieren.

KeyValueEntry

Beschreibung

Die Klasse KeyValueEntry wird verwendet, um Einträge zu repräsentieren, die in einem JSON-Array verarbeitet werden. Jeder Eintrag besteht aus:

  • Key: Ein eindeutiger Schlüssel als Zeichenkette.
  • Value: Ein Objekt, das den zugehörigen Wert enthält (z. B. Zahl, String, Boolean etc.).
  • Flags: Ein Enum, das beschreibt, wie der Wert verwendet wird.

Enum: EntryFlags

Die Flags werden durch das untergeordnete Enum EntryFlags definiert:

  • None: Standardwert, es erfolgt keine spezielle Verarbeitung.
  • InfoValue: Der Wert dient informellen Zwecken.
  • SearchValue: Der Wert wird als Suchbegriff verwendet.
  • DataValue: Der Wert wird zur Speicherung verwendet.
  • MatchValue: Der Wert wird später für Vergleichsoperationen genutzt.

Beispiel

using smcTeam.Tools;

var eintrag = new KeyValueEntry("Benutzername", "max.mustermann", KeyValueEntry.EntryFlags.InfoValue);
Console.WriteLine($"Key: {eintrag.Key}, Value: {eintrag.Value}, Flags: {eintrag.Flags}");

JsonIntegrity

Beschreibung

Die statische Klasse JsonIntegrity bietet Funktionalitäten, um:

  • Ein JSON-Array aus einer Sammlung von KeyValueEntry-Objekten zu erzeugen.
  • Eine Prüfsumme (Checksum) zu berechnen, die die Integrität des JSON-Inhalts sicherstellt.
  • Bestehende Prüfsummen-Objekte zu entfernen oder zu aktualisieren.
  • Das JSON-Format entweder komprimiert (minified) oder formatiert (beautified) auszugeben.
  • Ein JSON-Array in seine ursprünglichen KeyValueEntry-Objekte zurück zu konvertieren.

Dabei wird ein JSON-Array erzeugt, bei dem jedes Element (außer dem letzten, welches die Prüfsumme enthält) die Properties Key, Value und Flags besitzt. Die Einträge werden vor der Prüfsummenberechnung alphabetisch nach dem Schlüssel sortiert. Anschließend wird ein separates Objekt mit dem berechneten Hash als Prüfsumme an das Ende des Arrays angehängt.

Wichtige Methoden

  • GenerateJsonArray(IEnumerable keyValueEntries) Erzeugt ein JSON-Array aus den übergebenen Einträgen, sortiert diese und fügt am Ende ein Prüfsummen-Objekt hinzu.
  • GetChecksum(JArray jArray) bzw. GetChecksum(string jsonString) Berechnet die Prüfsumme für ein JSON-Array. Dabei wird sichergestellt, dass das JSON flach (also ohne verschachtelte Objekte) ist.
  • GenerateChecksum(JArray jArray) bzw. GenerateChecksum(string jsonString) Entfernt zunächst existierende Prüfsummen und fügt anschließend ein neues Prüfsummen-Objekt am Ende des JSON-Arrays ein.
  • UpdateChecksum(JArray jArray) bzw. UpdateChecksum(string jsonString) Aktualisiert das vorhandene Prüfsummen-Objekt durch Neuberechnung der Prüfsumme.
  • RemoveChecksum(JArray jArray) bzw. RemoveChecksum(string jsonString) Entfernt das Prüfsummen-Objekt aus dem JSON-Array.
  • ChecksumIsValid(JArray jArray) bzw. ChecksumIsValid(string jsonString) Überprüft, ob die im JSON gespeicherte Prüfsumme mit der neu berechneten übereinstimmt.
  • ToMinifiedString(JArray jArray) bzw. ToMinifiedString(string jsonString) Gibt den JSON-String in kompakter (minifizierter) Form zurück.
  • BeautifyJson(string json) Gibt den JSON-String in einem formatierten (eingerückten) Format zurück.
  • JsonToKeyValueEntries(string jsonString) Wandelt einen JSON-String, der ein Array von Objekten enthält, in eine Liste von KeyValueEntry-Objekten um.
  • IsValidJson(string value) Prüft, ob der übergebene String ein gültiges JSON darstellt.

Beispiel: Erzeugen eines JSON-Arrays mit Prüfsumme

using smcTeam.Tools;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;

// Erstellen einer Liste von KeyValueEntry-Objekten
var eintraege = new List<KeyValueEntry>
{
    new KeyValueEntry("Name", "Max Mustermann", KeyValueEntry.EntryFlags.InfoValue),
    new KeyValueEntry("Alter", 30, KeyValueEntry.EntryFlags.DataValue),
    new KeyValueEntry("Email", "max@example.com", KeyValueEntry.EntryFlags.SearchValue)
};

// Erzeugen des JSON-Arrays mit angehängter Prüfsumme
JArray jsonArray = JsonIntegrity.GenerateJsonArray(eintraege);

// Ausgabe des formatierten JSON-Strings
Console.WriteLine(JsonIntegrity.BeautifyJson(jsonArray.ToString()));

Beispiel: Überprüfen der Prüfsumme

// Überprüfen, ob die Prüfsumme im JSON-Array gültig ist
bool isValid = JsonIntegrity.ChecksumIsValid(jsonArray);
Console.WriteLine("Ist die Prüfsumme gültig? " + isValid);

QrCode

Beschreibung

Die statische Klasse QrCode stellt Methoden zur Erzeugung von QR-Codes als SVG-Strings zur Verfügung. Es gibt zwei Varianten der Methode GenerateSvgString:

  • GenerateSvgString(string codeText, int border = 0, string foreground = "#000000", string background = "#ffffff") Erzeugt einen QR-Code aus einem einfachen Text.
  • GenerateSvgString(IEnumerable keyValueEntries, int border = 0, string foreground = "#000000", string background = "#ffffff") Erzeugt einen QR-Code aus einem JSON-Array, das aus einer Sammlung von KeyValueEntry-Objekten generiert wurde. Dabei wird intern zuerst das JSON-Array (inklusive Prüfsumme) erzeugt und minifiziert.

Parameter

  • codeText: Der Text, der im QR-Code kodiert wird.
  • keyValueEntries: Eine Sammlung von KeyValueEntry-Objekten, die zu einem JSON-Array verarbeitet werden.
  • border: Breite des Rahmens um den QR-Code (Standardwert: 0).
  • foreground: Farbe des QR-Code-Inhalts (Standardwert: "#000000").
  • background: Hintergrundfarbe (Standardwert: "#ffffff").

Beispiel: QR-Code aus einfachem Text generieren

using smcTeam.Tools;
using System;

string qrSvg = QrCode.GenerateSvgString("Dies ist ein Beispieltext");
Console.WriteLine(qrSvg);

Beispiel: QR-Code aus KeyValueEntry-Objekten generieren

using smcTeam.Tools;
using System;
using System.Collections.Generic;

var eintraege = new List<KeyValueEntry>
{
    new KeyValueEntry("Name", "Max Mustermann", KeyValueEntry.EntryFlags.InfoValue),
    new KeyValueEntry("Alter", 30, KeyValueEntry.EntryFlags.DataValue),
    new KeyValueEntry("Email", "max@example.com", KeyValueEntry.EntryFlags.SearchValue)
};

string qrSvgEntries = QrCode.GenerateSvgString(eintraege);
Console.WriteLine(qrSvgEntries);

Zusammenfassung und Beispiele

Diese Klassen bieten folgende zentrale Funktionalitäten:

  • Erstellung und Verwaltung von JSON-Daten: Mit der Klasse JsonIntegrity können Sie ein konsistent strukturiertes JSON-Array aus KeyValueEntry-Objekten erzeugen, eine Prüfsumme berechnen und diese zur Sicherstellung der Datenintegrität verwenden.
  • Validierung und Formatierung: Prüfen Sie, ob das JSON gültig ist, entfernen oder aktualisieren Sie bestehende Prüfsummen und geben Sie das JSON entweder als minifizierten oder als formatierten String aus.
  • QR-Code-Erzeugung: Mit der Klasse QrCode können Sie sowohl aus einfachem Text als auch aus strukturierten JSON-Daten (erstellt mittels KeyValueEntry und JsonIntegrity) QR-Codes als SVG generieren.

Die folgenden Code-Beispiele demonstrieren den praktischen Einsatz:

Beispiel 1: JSON-Array mit Prüfsumme erzeugen und validieren

using smcTeam.Tools;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;

// Erstellen der Einträge
var eintraege = new List<KeyValueEntry>
{
    new KeyValueEntry("Name", "Max Mustermann", KeyValueEntry.EntryFlags.InfoValue),
    new KeyValueEntry("Alter", 30, KeyValueEntry.EntryFlags.DataValue),
    new KeyValueEntry("Email", "max@example.com", KeyValueEntry.EntryFlags.SearchValue)
};

// JSON-Array mit Prüfsumme generieren
JArray jsonArray = JsonIntegrity.GenerateJsonArray(eintraege);
Console.WriteLine("Formatiertes JSON:");
Console.WriteLine(JsonIntegrity.BeautifyJson(jsonArray.ToString()));

// Prüfsumme validieren
bool isValid = JsonIntegrity.ChecksumIsValid(jsonArray);
Console.WriteLine("Ist die Prüfsumme gültig? " + isValid);

Beispiel 2: QR-Code aus einfachem Text und aus KeyValueEntry-Objekten erzeugen

using smcTeam.Tools;
using System;
using System.Collections.Generic;

// QR-Code aus einfachem Text
string qrSvgText = QrCode.GenerateSvgString("Dies ist ein Beispieltext");
Console.WriteLine("QR-Code (Text):");
Console.WriteLine(qrSvgText);

// QR-Code aus einer Liste von KeyValueEntry-Objekten
var eintraege = new List<KeyValueEntry>
{
    new KeyValueEntry("Name", "Max Mustermann", KeyValueEntry.EntryFlags.InfoValue),
    new KeyValueEntry("Alter", 30, KeyValueEntry.EntryFlags.DataValue),
    new KeyValueEntry("Email", "max@example.com", KeyValueEntry.EntryFlags.SearchValue)
};

string qrSvgEntries = QrCode.GenerateSvgString(eintraege);
Console.WriteLine("QR-Code (KeyValueEntry):");
Console.WriteLine(qrSvgEntries);