Abrufen und Verstehen von Strichcode-Daten

Dieses Thema informiert darüber, wie Sie Daten von einem Strichcodescanner in einem BarcodeScannerReport-Objekt abrufen und deren Format und Inhalt verstehen.

Nachdem Sie Ihren Strichcodescanner eingerichtet und einen Strichcode gescannt haben, wird das DataReceived-Ereignis ausgelöst. Der ClaimedBarcodeScanner sollte dieses Ereignis registrieren. Das DataReceived-Ereignis übergibt ein BarcodeScannerDataReceivedEventArgs-Objekt , mit dem Sie auf die Strichcodedaten zugreifen können.

Registrieren des DataReceived-Ereignisses

Nachdem Sie über einen ClaimedBarcodeScanner verfügen, verwenden Sie ihn, um das DataReceived-Ereignis zu registrieren:

claimedBarcodeScanner.DataReceived += ClaimedBarcodeScanner_DataReceived;

Der Ereignishandler wird an den ClaimedBarcodeScanner und ein BarcodeScannerDataReceivedEventArgs-Objekt übergeben. Sie können auf die Strichcodedaten über die Eigenschaft Report dieses Objekts zugreifen, die vom Typ BarcodeScannerReport ist.

private async void ClaimedBarcodeScanner_DataReceived(ClaimedBarcodeScanner sender, BarcodeScannerDataReceivedEventArgs args)
{
    // Parse the data
}

Abrufen von Daten

Sobald Sie den BarcodeScannerReport haben, können Sie auf die Strichcodedaten zugreifen und diese analysieren. Der BarcodeScannerReport hat drei Eigenschaften:

  • ScanData: Die vollständigen, rohen Strichcodedaten.
  • ScanDataLabel: Die decodierte Strichcodebezeichnung, die keine Header, Prüfsumme und andere sonstige Informationen enthält.
  • ScanDataType: Der decodierte Strichcode-Bezeichnungstyp. Mögliche Werte werden in der BarcodeSymbologies-Klasse definiert.

Wenn Sie auf ScanDataLabel oder ScanDataType zugreifen möchten, müssen Sie zuerst IsDecodeDataEnabled auf true festlegen.

claimedBarcodeScanner.IsDecodeDataEnabled = true;

Abrufen des Scan-Datentyps

Das Abrufen des decodierten Strichcode-Bezeichnungstyps ist ziemlich trivial – wir rufen einfach GetName bei ScanDataType auf.

private string GetSymbology(BarcodeScannerDataReceivedEventArgs args)
{
    return BarcodeSymbologies.GetName(args.Report.ScanDataType);
}

Abrufen der Scan-Datenbeschriftung

Um die decodierte Strichcodebezeichnung zu erhalten, gibt es ein paar Dinge, die Sie beachten müssen. Nur bestimmte Datentypen enthalten codierten Text, daher sollten Sie zuerst überprüfen, ob die Symbologie in eine Zeichenkette konvertiert werden kann, und dann den Puffer, den wir von ScanDataLabel erhalten, in eine codierte UTF-8-Zeichenkette konvertieren.

private string GetDataLabel(BarcodeScannerDataReceivedEventArgs args)
{
    uint scanDataType = args.Report.ScanDataType;

    // Only certain data types contain encoded text.
    // To keep this simple, we'll just decode a few of them.
    if (args.Report.ScanDataLabel == null)
    {
        return "No data";
    }

    // This is not an exhaustive list of symbologies that can be converted to a string.
    else if (scanDataType == BarcodeSymbologies.Upca ||
        scanDataType == BarcodeSymbologies.UpcaAdd2 ||
        scanDataType == BarcodeSymbologies.UpcaAdd5 ||
        scanDataType == BarcodeSymbologies.Upce ||
        scanDataType == BarcodeSymbologies.UpceAdd2 ||
        scanDataType == BarcodeSymbologies.UpceAdd5 ||
        scanDataType == BarcodeSymbologies.Ean8 ||
        scanDataType == BarcodeSymbologies.TfStd)
    {
        // The UPC, EAN8, and 2 of 5 families encode the digits 0..9
        // which are then sent to the app in a UTF8 string (like "01234").
        return CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, args.Report.ScanDataLabel);
    }

    // Some other symbologies (typically 2-D symbologies) contain binary data that
    // should not be converted to text.
    else
    {
        return "Decoded data unavailable.";
    }
}

Abrufen der rohen Scan-Daten

Um die vollständigen Rohdaten aus dem Strichcode zu erhalten, konvertieren wir einfach den Puffer, den wir von ScanData erhalten, in eine Zeichenkette.

private string GetRawData(BarcodeScannerDataReceivedEventArgs args)
{
    // Get the full, raw barcode data.
    if (args.Report.ScanData == null)
    {
        return "No data";
    }

    // Just to show that we have the raw data, we'll print the value of the bytes.
    else
    {
        return CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, args.Report.ScanData);
    }
}

Diese Daten befinden sich in der Regel im Format, das vom Scanner bereitgestellt wird. Nachrichten-Header- und Trailer-Informationen werden jedoch entfernt, da sie keine nützlichen Informationen für eine Anwendung enthalten und wahrscheinlich scannerspezifisch sind.

Allgemeine Header-informationen sind ein Präfixzeichen (z.B. ein STX-Zeichen). Allgemeine Trailer-Informationen sind ein Terminatorzeichen (z. B. ein ETX- oder CR-Zeichen) und ein Blockprüfungszeichen, wenn eins vom Scanner generiert wird.

Diese Eigenschaft sollte ein Symbologiezeichen enthalten, wenn ein Zeichen vom Scanner zurückgegeben wird (z.B. ein A für UPC-A). Sie sollte auch Prüfziffern enthalten, wenn sie in den Bezeichnungen vorhanden sind und vom Scanner zurückgegeben werden. (Beachten Sie, dass sowohl Symbologiezeichen als auch Prüfziffern je nach Scannerkonfiguration möglicherweise vorhanden oder nicht vorhanden sind. Der Scanner gibt sie zurück, wenn vorhanden, aber er generiert oder berechnet sie nicht, wenn sie nicht vorhanden sind.)

Einige Handelswaren können mit einem zusätzlichen Strichcode gekennzeichnet werden. Dieser Strichcode wird in der Regel rechts neben dem Standard-Strichcode platziert und besteht aus zusätzlichen zwei oder fünf Zeichen mit Informationen. Wenn der Scanner Handelswaren erfasst, die sowohl Haupt- als auch Zusatzstrichcodes enthalten, werden die Zusatzzeichen an die Hauptzeichen angehängt, und das Ergebnis wird als eine Bezeichnung an die Anwendung übermittelt. (Beachten Sie, dass ein Scanner eine Konfiguration unterstützen kann, die das Lesen von zusätzlichen Codes aktiviert oder deaktiviert.)

Einige Handelswaren können mit mehreren Bezeichnungen gekennzeichnet werden, manchmal auch als Multisymboletiketten oder gestaffelte Etiketten bezeichnet. Diese Strichcodes sind in der Regel vertikal angeordnet und können der gleichen oder unterschiedlichen Symbologie entsprechen. Wenn der Scanner eine Handelsware liest, die mehrere Bezeichnungen enthält, wird jeder Strichcode als separate Bezeichnung an die Anwendung übermittelt. Dies ist aufgrund des derzeitigen Mangels an Standardisierung dieser Strichcodetypen notwendig. Man kann nicht alle Variationen basierend auf den einzelnen Strichcodedaten ermitteln. Daher muss die Anwendung anhand der zurückgegebenen Daten feststellen, wann ein Strichcode mit mehreren Bezeichnungen eingelesen wurde. (Beachten Sie, dass ein Scanner das Lesen mehrerer Bezeichnungen möglicherweise unterstützt oder nicht unterstützt.)

Dieser Wert wird gesetzt, bevor ein DataReceived-Ereignis in der Anwendung ausgelöst wird.

Support und Feedback

Antworten auf Ihre Fragen

Haben Sie Fragen? Fragen Sie uns entweder in unserem Docs F&A-Forum mit dem UWP-Tag oder auf Stack Overflow mit dem Pointofservice-Tag.

Helfen Sie uns bei der Einordnung Ihrer Fragen:

  • Fügen Sie der Frage auf Stack Overflow das Pointofservice-Tag hinzu.
  • Nehmen Sie in Ihren Beitrag im F&A-Forum den Begriff „UWP“ auf.

Siehe auch