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:
Die folgende Tabelle veranschaulicht, welche Eigenschaften im Gegensatz zu den Standardeinstellungen angepasst wurden:
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);