Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La clase ScannerBase proporciona dos métodos (DecodeDataLabel y DecodeScanDataType) para descodificar fechas de entrada. Se llama a estos métodos cuando se accede a las propiedades ScanDataLabel y ScanDataType respectivamente. La clase ScannerBase aplaza la descodificación de datos hasta que la aplicación accede a las propiedades de datos. Los datos descodificados se almacenarán en caché para futuras lecturas.
La clase ScannerBase implementa el atributo ScannerBase.DecodeData según sea necesario en la especificación Unified Point Of Service (UnifiedPOS). Si DecodeData no está establecida en true cuando la aplicación lea la propiedad ScanDataLabel, se devolverá una matriz de bytes vacía. Del mismo modo, ScanDataType devuelve BarCodeSymbology.Unknown. Esta funcionalidad se implementa en la clase ScannerBase y es transparente tanto para la aplicación como para el objeto de servicio.
Para implementar DecodeScanDataLabel
Invalide el miembro protegido virtual de ScannerBasicDecodeScanDataLabel.
DecodeScanData toma un argumento (scanData) que contiene el búfer de datos completo. No es necesario almacenar en caché ningún dato adicional del código del objeto de servicio.
DecodeScanData debe procesar los datos examinados para quitar la información de encabezado y de tipo al principio y al final del búfer de datos. El búfer modificado se devolverá en una matriz de bytes.
Para implementar DecodeScanDataType
Invalide el miembro protegido virtual de ScannerBasicDecodeScanDataType.
Al igual que DecodeScanDataLabel, DecodeScanDataType recibe un argumento que contiene el búfer examinado completo.
DecodeScanDataType examina el búfer para localizar el tipo de los datos examinados, y devuelve el valor de BarCodeSymbology que corresponda.
Ejemplo
En el siguiente código se muestra un método típico que el desarrollador de objetos de servicio podría implementar para extraer valores de etiqueta y de datos de un búfer examinado. Cabe decir que este código es demostrativo de un dispositivo determinado. Cada objeto de servicio requerirá una descodificación específica del dispositivo.
// 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;
}
En la especificación UPOS encontrará más detalles sobre cómo extraer los datos de etiqueta y de tipo de un búfer de datos examinado.
Compilar el código
- Para obtener más información sobre cómo crear y compilar un proyecto de objeto de servicio, vea Objetos de servicio de ejemplo: primeros pasos.