Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A ScannerBase classe fornece dois métodos, DecodeDataLabel e DecodeScanDataType para decodificar a data de entrada. Estes métodos são chamados quando as propriedades ScanDataLabel e ScanDataType, respetivamente, são acedidas. A classe ScannerBase adia a decodificação de dados até que a aplicação aceda às propriedades dos dados e os dados decodificados sejam armazenados em cache para leituras futuras.
A classe ScannerBase implementa o ScannerBase.DecodeData atributo conforme exigido pela especificação Unified Point Of Service (UnifiedPOS). Se DecodeData não estiver definido como true quando a aplicação lê a propriedade ScanDataLabel , será devolvida uma matriz de bytes vazio. De forma semelhante, ScanDataType devolve BarCodeSymbology.Unknown. Esta funcionalidade está implementada na classe ScannerBase e é transparente tanto para a aplicação como para o Objeto de Serviço.
Para implementar o DecodeScanDataLabel
Sobrepor o membro protegido e virtual ScannerBasicDecodeScanDataLabel.
DecodeScanData utiliza um argumento, scanData, que contém o buffer de dados completo. Não é necessário armazenar em cache quaisquer dados adicionais no código do Objeto de Serviço.
O DecodeScanData deve processar os dados digitalizados para remover informações de cabeçalho e tipo no início e no fim do buffer de dados. O buffer modificado será devolvido num array de bytes.
Para implementar o DecodeScanDataType
Sobrepor o membro protegido e virtual do ScannerBasicDecodeScanDataType.
Tal como o DecodeScanDataLabel, o DecodeScanDataType recebe um argumento contendo o buffer varrido completo.
DecodeScanDataType examina o buffer para encontrar o tipo de dados dos dados digitalizados e retorna o valor apropriado BarCodeSymbology.
Example
O código seguinte demonstra um método típico que o programador de Objetos de Serviço poderia implementar para extrair valores de rótulos e dados de um buffer varrido. Note-se que este código é representativo de um determinado dispositivo. Diferentes Objetos de Serviço exigirão descodificação específica de cada 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;
}
Detalhes adicionais sobre como os dados de rótulos e tipos devem ser extraídos de um buffer de dados digitalizados podem ser encontrados na especificação UPOS.
Compilando o código
- Para informações adicionais sobre a criação e compilação de um projeto de Objeto de Serviço, consulte Exemplos de Objetos de Serviço: Começar.