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.
O Microsoft Point of Service for .NET (POS para .NET) oferece suporte à saída assíncrona em conformidade com a especificação UnifiedPOS (Unified Point Of Service). No modelo de saída assíncrona, o Objeto de Serviço deve enfileirar solicitações de saída para que possa retornar o controle ao aplicativo o mais rápido possível. Um segundo thread deve então despachar a saída para o dispositivo e notificar os aplicativos quando a solicitação tiver sido atendida, com um evento OutputCompleteEvent ou ErrorEvent.
A biblioteca de classes POS para .NET lida com a maioria dessas funções para o desenvolvedor de objeto de serviço para que haja pouca ou nenhuma diferença entre um dispositivo de saída assíncrona e um dispositivo somente de saída síncrona.
Para criar o projeto
Crie um projeto de biblioteca de classes do Visual Studio.
Adicione o código de exemplo abaixo ao seu projeto.
Adicione referências aos assemblies Microsoft.PointOfService .
Compile e copie o Objeto de Serviço para um dos diretórios no caminho de carregamento do assembly do Objeto de Serviço.
Para usar o exemplo de aplicativo com o objeto de serviço
- Este objeto de serviço pode ser usado com o exemplo de aplicativo apresentado em Exemplo de manipulador de eventos.
Exemplo
Para exportar para um dispositivo PosPrinter , um aplicativo geralmente usará o PrintNormal(PrinterStation, String) método. Observe que o código de objeto de serviço PosPrinter abaixo não fornece uma implementação para esse método. Em vez disso, PrintNormalImpl(PrinterStation, PrinterState, String) é implementado. Esse método é chamado pela biblioteca POS para .NET para solicitações de saída síncronas e assíncronas.
Quando um aplicativo chama um método de saída, como PrintNormal, a implementação do PDV para .NET verifica o valor da AsyncMode propriedade. Se esse valor for false, a biblioteca POS para .NET enviará a solicitação para PrintNormalImpl imediatamente e aguardará que ela retorne. No entanto, se o valor for true, a implementação do POS para .NET do PrintNormal adicionará a solicitação a uma fila gerenciada internamente. Enquanto houver itens na fila, um thread gerenciado do PDV para .NET enviará cada solicitação, na ordem FIFO (first-in-first-out), para o dispositivo chamando PrintNormalImpl. Quando PrintNormalImpl retorna, a implementação da biblioteca gerará um OutputCompleteEvent no aplicativo. Em resumo, o mesmo código de objeto de serviço pode suportar saída síncrona e assíncrona sem nunca precisar saber qual modo de saída está sendo usado.
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using Microsoft.PointOfService;
using Microsoft.PointOfService.BaseServiceObjects;
[assembly: PosAssembly("Service Object Contractors, Inc.")]
namespace SOSamples.AsyncOutput
{
[ServiceObject(
DeviceType.PosPrinter,
"AsyncOutputPrinter",
"Sample Async Printer",
1,
9)]
public class AsyncOutputSimulator : PosPrinterBase
{
public AsyncOutputSimulator()
{
DevicePath = "Sample Async Printer";
// Indicate that the Service Object supports
// the receipt printer.
Properties.CapRecPresent = true;
}
// Note that this method will be called by the POS for .NET
// library code, regardless of whether the print request
// is synchronous or asynchronous. The print request
// queue is managed completely by POS for .NET so the
// Service Object should simply write data to the device
// here.
protected override PrintResults PrintNormalImpl(
PrinterStation station,
PrinterState printerState,
string data)
{
// Your code to print to the actual hardware would go
// here.
// For demonstration, however, the code simulates
// that fulfilling this print request took 4 seconds.
Thread.Sleep(4000);
PrintResults results = new PrintResults();
return results;
}
// This method must be implemented by the Service
// Object, and should validate the data to be printed,
// including any escape sequences. This method should throw
// a PosControlException to indicate failure.
protected override void ValidateDataImpl(
PrinterStation station,
string data)
{
// Insert your validation code here.
return;
}
#region Implement Abstract PosCommon Members
private string MyHealthText = "";
// PosCommon.CheckHealthText.
public override string CheckHealthText
{
get
{
// VerifyState(mustBeClaimed,
// mustBeEnabled).
VerifyState(false, false);
return MyHealthText;
}
}
// PosCommon.CheckHealth.
public override string CheckHealth(
HealthCheckLevel level)
{
// Verify that device is open, claimed, and enabled.
VerifyState(true, true);
// Insert your code here:
// check the health of the device and return a
// descriptive string.
// Cache result in the CheckHealthText property.
MyHealthText = "Ok";
return MyHealthText;
}
// PosCommon.DirectIOData.
public override DirectIOData DirectIO(
int command,
int data,
object obj)
{
// Verify that the device is open.
VerifyState(false, false);
return new DirectIOData(data, obj);
}
#endregion Implement Abstract PosCommon Members
}
}
O código do aplicativo no exemplo de manipulador de eventos pode ser compilado e executado com este objeto de serviço.