Udostępnij przez


Używanie metod Impl dla synchronicznych lub asynchronicznych danych wyjściowych (poS for .NET v1.14 SDK Documentation)

Niektóre typy urządzeń poS obsługują drukowane lub wyświetlane dane wyjściowe, na przykład PosPrinter lub LineDisplay. Obiekty usługi napisane dla urządzeń z obsługą danych wyjściowych powinny zapewnić obsługę zarówno asynchronicznych, jak i synchronicznych danych wyjściowych.

Aplikacja wykonująca operację asynchronicznie ustawi właściwość AsyncMode obiektu usługi na true przed wywołaniem żądanej metody wyjściowej. Obiekt usługi może zgłosić wyjątek, jeśli nie może przetworzyć żądania asynchronicznie, ale nie jest to idealne rozwiązanie, ponieważ ogranicza zakres aplikacji, które mogą używać tego określonego obiektu usługi.

Obsługa asynchronicznych danych wyjściowych może jednak wymagać dodatkowego i potencjalnie skomplikowanego kodu. Ten kod będzie zarządzać kolejką żądań przychodzących, obsługiwać wątek do monitorowania kolejki i wysyłania żądań w odpowiedniej kolejności i zgłaszać zdarzenia z powrotem do aplikacji.

Klasy podstawowe programu Microsoft Point of Service dla platformy .NET (POS dla platformy .NET) mogą zarządzać wszystkimi tymi zadaniami dla dewelopera. Dla każdej metody wyjściowej klasa Podstawowa ma metodę pomocnika skojarzona z każdą metodą wyjściową. Te metody, które kończą się sufiksem Impl , są zapisywane tak, jakby były po prostu synchroniczną implementacją metody nadrzędnej. Klasa podstawowa w sposób niewidoczny zarządza kolejką, wysyła żądania do funkcji Impl w odpowiedniej kolejności i zgłasza odpowiednie zdarzenia z powrotem do aplikacji. Ta sama metoda jest wywoływana dla operacji synchronicznych i asynchronicznych.

Wyprowadzając z modelu POS dla klasy bazowej platformy .NET, obiekt usługi uzyskuje funkcje asynchroniczne bez implementowania dodatkowego kodu.

Implementacja klasy bazowej

Usługa POS dla platformy .NET udostępnia klasy podstawowe dla podzestawu typów urządzeń poS. Dla każdej metody wyjściowej w tych klasach istnieje odpowiednia metoda z sufiksem Impl . Obiekt usługi pochodzący z klasy bazowej powinien zastąpić tylko metodę Impl, a nie odpowiednią metodę nadrzędną. Na przykład w klasie pochodzącej z klasy POS dla klasy bazowej platformy .NET obiekt usługi zapewni implementację printNormalImpl i nie zastąpi PrintNormalNormalImpl. PosPrinterBase

PoS dla klas bazowych platformy .NET implementują wszystkie metody wyjściowe i wykonują następujące zadania w celu obsługi metody Impl zaimplementowanej przez obiekt usługi:

  • Weryfikowanie argumentów.
  • Jeśli właściwość AsyncMode ma wartość false, odpowiednia metoda Impl jest wywoływana natychmiast.
  • Jeśli właściwość AsyncMode ma wartość true:
    1. Żądanie jest umieszczane w kolejce. Ta kolejka jest własnością usługi POS dla platformy .NET i jest zarządzana przez własny wątek.
    2. Żądania w kolejce są analizowane przez wątek kolejki i wywoływana jest odpowiednia metoda Impl . To wywołanie może zostać opóźnione, jeśli urządzenie przetwarza już żądanie wyjściowe lub jeśli istnieje żądanie o wyższym priorytcie w kolejce.
  • Po powrocie metody Impl kod klasy podstawowej platformy .NET obsługuje wszystkie wyniki. W przypadku wywołania synchronicznego metoda może zwrócić wartość lub zgłosić wyjątek. W przypadku wywołania asynchronicznego metoda może zgłaszać zdarzenia OutputCompleteEvent lub ErrorEvent z powrotem do aplikacji.
  • Metody Impl mogą również zwracać obiekt zawierający nie tylko informacje o błędach, ale także wartości statystyczne.

Metody Impl obiektu usługi

Ponieważ większość przetwarzania jest obsługiwana przez kod klasy bazowej, metoda Impl obiektu usługi może być stosunkowo prosta.

W wielu przypadkach stan urządzenia w momencie oryginalnego wywołania jest wymagany przez metodę Impl . W takich sytuacjach kod klasy bazowej zapisuje bieżący stan urządzenia wraz z żądaniem wyjściowym. Stan urządzenia jest później wysyłany jako argument do metody Impl . Na przykład definicja elementu PrintNormalImpl to:

protected override PrintResults PrintNormalImpl(
    PrinterStation station,
    PrinterState printerState,
    string data);

Powyższy argument printerState jest specyficzny dla metody Impl i nie istnieje w PrintNormal(PrinterStation, String) definicji.

Zwracana wartość funkcji Impl różni się również od ich metod wywoływania. Na przykład należy pamiętać, że metoda PrintNormalImpl zwraca klasę typu PrintResults. Oprócz errorCode, ErrorCodeExtended, ErrorLevel i ErrorString istnieje wiele dodatkowych właściwości, które będą używane przez metodę wywołującą do aktualizowania liczb statystyk.

Przykład

W poniższym przykładzie pokazano, jak te metody są implementowane w kodzie obiektu usługi.

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;
}

Zobacz też

Zadania

Odwołanie

Pojęcia

Inne zasoby