Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Klasa ScannerBase udostępnia dwie metody: DecodeDataLabel i DecodeScanDataType na potrzeby dekodowania daty przychodzącej. Te metody są wywoływane, gdy uzyskuje się dostęp do właściwości ScanDataLabel i ScanDataType. Klasa ScannerBase dekoduje dekodowanie danych, dopóki aplikacja nie uzyska dostępu do właściwości danych, a zdekodowane dane zostaną buforowane na potrzeby przyszłych operacji odczytu.
Klasa ScannerBase implementuje atrybut ScannerBase.DecodeData zgodnie ze specyfikacją Unified Point Of Service (UnifiedPOS). Jeśli właściwość DecodeData nie jest ustawiona na true , gdy aplikacja odczytuje właściwość ScanDataLabel , zostanie zwrócona pusta tablica bajtów. Podobnie funkcja ScanDataType zwraca wartość BarCodeSymbology.Unknown. Ta funkcja jest implementowana w klasie ScannerBase i jest niewidoczna zarówno dla aplikacji, jak i obiektu usługi.
Aby zaimplementować decodeScanDataLabel
Zastąpij chroniony element członkowski SkanerBasic DecodeScanDataLabel.
DecodeScanData przyjmuje argument scanData, który zawiera pełny bufor danych. Nie ma potrzeby buforowania żadnych dodatkowych danych w kodzie obiektu usługi.
DecodeScanData powinien przetworzyć zeskanowane dane, aby usunąć nagłówek i typ informacji na początku i na końcu buforu danych. Zmodyfikowany bufor zostanie zwrócony w tablicy bajtów.
Aby zaimplementować decodeScanDataType
Zastąpij chroniony element członkowski SkanerBasic DecodeScanDataType.
Podobnie jak DecodeScanDataLabel, DecodeScanDataType otrzymuje argument zawierający pełny zeskanowany bufor.
DecodeScanDataType sprawdza bufor, aby znaleźć typ danych zeskanowanych danych i zwraca odpowiednią wartość BarCodeSymbology .
Przykład
Poniższy kod demonstruje typową metodę, która deweloper obiektu usługi może zaimplementować w celu wyodrębnienia etykiet i wartości danych ze zeskanowanego buforu. Należy pamiętać, że ten kod demonstruje określone urządzenie. Różne obiekty usługi będą wymagać dekodowania specyficznego dla urządzenia.
// Decode the incoming scanner data, removing header and
// type information.
override protected byte[] DecodeScanDataLabel(
byte[] scanData)
{
int i;
int len = 0;
// Get length of label data.
for (i = 5; i < (int)scanData[1]
&& (int)scanData[i] > 31; i++)
{
len++;
}
// Copy label data into buffer.
byte[] label = new byte[len];
len = 0;
for (i = 5; i < (int)scanData[1]
&& (int)scanData[i] > 31; i++)
{
label[len++] = scanData[i];
}
return label;
}
// Process the incoming scanner data to find the data type.
override protected BarCodeSymbology DecodeScanDataType(
byte[] scanData)
{
int i;
for (i = 5; i < (int)scanData[1]
&& (int)scanData[i] > 31; i++)
{
}
// last 3 (or 1) bytes indicate symbology.
if (i + 2 <= (int)ScanData[1])
{
return GetSymbology(
ScanData[i],
ScanData[i + 1],
ScanData[i + 2]);
}
else
{
return GetSymbology(ScanData[i], 0, 0);
}
}
// This method determines the data type by examining
// the end of the scanned data buffer. Either 1 byte
// or 3 byte is used to determine the type, depending on
// the incoming buffer.
static private BarCodeSymbology GetSymbology(
byte b1,
byte b2,
byte b3)
{
if (b1 == 0 && b3 == 11)
{
// Use all 3 bytes to determine the date type.
switch (b2)
{
case 10:
return BarCodeSymbology.Code39;
case 13:
return BarCodeSymbology.Itf;
case 14:
return BarCodeSymbology.Codabar;
case 24:
return BarCodeSymbology.Code128;
case 25:
return BarCodeSymbology.Code93;
case 37:
return BarCodeSymbology.Ean128;
case 255:
return BarCodeSymbology.Rss14;
default:
break;
}
}
else if (b2 == 0 && b3 == 0)
{
// Only use the first byte to determine the data type.
switch (b1)
{
case 13:
return BarCodeSymbology.Upca;
case 22:
return BarCodeSymbology.EanJan13;
case 12:
return BarCodeSymbology.EanJan8;
default:
break;
}
}
return BarCodeSymbology.Other;
}
Dodatkowe szczegóły dotyczące sposobu wyodrębniania danych etykiet i typów z zeskanowanego buforu danych można znaleźć w specyfikacji upOS.
Kompilowanie kodu
- Aby uzyskać dodatkowe informacje na temat tworzenia i kompilowania projektu obiektu usługi, zobacz Service Object Samples: Getting Started (Przykłady obiektów usługi: Wprowadzenie).