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 ScannerBase clase proporciona dos métodos, DecodeDataLabel y DecodeScanDataType para descodificar la fecha 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 acceda a las propiedades de datos y los datos descodificados se almacenarán en caché para futuras lecturas.
La clase ScannerBase implementa el ScannerBase.DecodeData atributo según sea necesario en la especificación Unified Point Of Service (UnifiedPOS). Si DecodeData no se establece en true cuando la aplicación lee 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 para la aplicación y el objeto de servicio.
Para implementar DecodeScanDataLabel
Invalide el miembro protegido Virtual ScannerBasicDecodeScanDataLabel.
DecodeScanData toma un argumento, scanData, que contiene el búfer de datos completo. No es necesario almacenar en caché ningún dato adicional en el código de objeto de servicio.
DecodeScanData debe procesar los datos escaneados para quitar información de encabezado y tipo al principio y al final del búfer de datos. El búfer modificado se retornará como una matriz de bytes.
Para implementar DecodeScanDataType
Invalide el miembro protegido y virtual ScannerBasicDecodeScanDataType.
Al igual que DecodeScanDataLabel, DecodeScanDataType recibe un argumento que contiene el búfer escaneado completo.
DecodeScanDataType examina el búfer para buscar el tipo de datos examinado y devuelve el valor de BarCodeSymbology adecuado.
Example
En el código siguiente se muestra un método típico que el desarrollador de objetos de servicio podría implementar para extraer valores de etiqueta y datos de un búfer escaneado. Tenga en cuenta que este código es demostrativo de un dispositivo determinado. Los diferentes objetos de servicio requerirán 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;
}
Puede encontrar detalles adicionales sobre cómo se deben extraer los datos de etiqueta y tipo de un búfer de datos escaneados, en la especificación UPOS.
Compilar el código
- Para obtener más información sobre cómo crear y compilar un proyecto de objeto de servicio, vea Ejemplos de objetos de servicio: Introducción.