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.
Alguns tipos de dispositivos POS suportam saída impressa ou exibida, por exemplo, PosPrinter ou LineDisplay. Os objetos de serviço escritos para dispositivos habilitados para saída devem fornecer suporte para saída assíncrona e síncrona.
Um aplicativo que executa uma operação de forma assíncrona definirá a propriedade AsyncMode do Service Object como true antes de chamar o método de saída desejado. O objeto de serviço pode lançar uma exceção se não for possível processar a solicitação de forma assíncrona, mas isso não é ideal, pois limita o escopo de aplicativos que podem usar esse objeto de serviço específico.
O suporte à saída assíncrona pode, no entanto, exigir código adicional e potencialmente complicado. Esse código gerenciaria uma fila de solicitações de entrada, manteria um thread para monitorar a fila e despachar solicitações na ordem adequada e geraria eventos de volta para o aplicativo.
As classes Base do Microsoft Point of Service for .NET (POS para .NET) podem gerenciar todas essas tarefas para o desenvolvedor. Para cada método de saída, a classe Base tem um método auxiliar associado a cada método de saída. Esses métodos, que terminam com o sufixo Impl , são escritos como se fossem simplesmente a implementação síncrona de seu método pai. A classe Base gerencia de forma transparente uma fila, despacha solicitações para as funções Impl no momento certo na ordem certa e gera os eventos apropriados de volta para o aplicativo. Esse mesmo método é chamado para operações síncronas e assíncronas.
Derivando de um POS para .NET Base classe, o objeto de serviço obtém funcionalidade assíncrona sem implementar código adicional.
Implementação de Classe Base
O POS para .NET fornece classes Base para um subconjunto de tipos de dispositivos POS. Para cada método de saída nessas classes, há um método correspondente com um sufixo Impl . O Service Object derivado de uma classe Base deve substituir apenas o método Impl e não o método pai correspondente. Por exemplo, em uma classe derivada do POS para a classe Base .NET, o Service Object forneceria uma implementação para PrintNormalImpl e não substituiria PrintNormal. PosPrinterBase
O POS para .NET Base classes implementar todos os métodos de saída e executar as seguintes tarefas para dar suporte ao método Impl implementado pelo objeto de serviço:
- Valide argumentos.
- Se a propriedade AsyncMode for false, o método Impl correspondente será chamado imediatamente.
- Se a propriedade AsyncMode estiver definida como true:
- O pedido é colocado numa fila. Essa fila pertence ao POS para .NET e é gerenciada por seu próprio thread.
- As solicitações na fila são examinadas pelo thread da fila e o método Impl correspondente é chamado. Essa chamada pode ser atrasada se o dispositivo já estiver processando uma solicitação de saída ou se existir uma solicitação de prioridade mais alta na fila.
- Quando o método Impl retorna, o código da classe POS for .NET Base manipula todos os resultados. Para uma chamada síncrona, o método pode retornar um valor ou lançar uma exceção. Para uma chamada assíncrona, o método pode gerar eventos OutputCompleteEvent ou ErrorEvent de volta para o aplicativo.
- Os métodos Impl também podem retornar um objeto que contém não apenas informações de erro, mas também valores estatísticos.
Métodos Service Object Impl
Como a maioria do processamento é manipulada pelo código da classe Base, o método Impl do objeto de serviço pode ser relativamente simples.
Em muitos casos, o estado do dispositivo no momento da chamada original é exigido pelo método Impl . Nessas situações, o código da classe Base salva o estado atual do dispositivo junto com a solicitação de saída. O estado do dispositivo é enviado posteriormente como um argumento para o método Impl . Por exemplo, a definição para PrintNormalImpl é:
protected override PrintResults PrintNormalImpl(
PrinterStation station,
PrinterState printerState,
string data);
O argumento printerState acima é específico para o método Impl e não existe na PrintNormal(PrinterStation, String) definição.
O valor de retorno das funções Impl também difere de seus métodos de chamada. Por exemplo, observe que o método PrintNormalImpl retorna uma classe do tipo PrintResults. Além de ErrorCode, ErrorCodeExtended, ErrorLevel e ErrorString, há várias propriedades adicionais que serão usadas pelo método de chamada para atualizar contagens estatísticas.
Exemplo
O exemplo a seguir demonstra como esses métodos são implementados no código de objeto de serviço.
protected override PrintResults PrintNormalImpl(
PrinterStation station,
PrinterState printerState,
string data)
{
// First, create a PrintResults object to hold return values.
PrintResults pr = new PrintResults();
// Now print, depending on the station.
if (station == PrinterStation.Receipt)
{
// Your code goes here.
// Update statistics to be returned to the caller.
pr.ReceiptLinePrintedCount = 1;
pr.ReceiptCharacterPrintedCount = data.Length;
}
else if (station == PrinterStation.Slip)
{
// Your code goes here.
// Update statistics to be returned to the caller.
pr.SlipLinePrintedCount = 1;
pr.SlipCharacterPrintedCount = data.Length;
}
return pr;
}