Każdy niezłapany wyjątek w POS zostanie zaprezentowany w postaci okna komunikatu oraz zapisany w pliku loga. Okno składa się z tytułu błędu oraz jego treści. Jeżeli wyjątek jest typu System.Exception lub dziedziczy po nim, tytułem błędu będzie typ rzucanego wyjątku, a treścią jego Message. W logu zapisana zostanie informacja o typu wyjątku, treść Message oraz stos wywołań. Nie jest to zbyt eleganckie rozwiązanie, ponieważ użytkownik nie powinien być straszony dziwnymi tytułami typu: NullReferenceException.
Rozwiązaniem jest skorzystanie z klasy Comarch.POS.Library.Erros.RetailException. Klasa ta dziedziczy po System.Exception i wprowadza dwie dodatkowe właściwości, które domyślnie są predefiniowane. Są nimi UITitle, używany do prezentacji tytułu błędu, oraz UIMessage do prezentacji treści bardziej przyjaznej użytkownikowi. Treści te są oczywiście lokalizowane w wspieranych przez POS językach. W logu natomiast niezmiennie zapisuje się typ wyjątku, jego oryginalna treść oraz stos wywołań. Aby ustawić własny tytuł i/lub treść należy stworzyć nowy typ wyjątku dziedziczący po klasie RetailException i przeciążyć odpowiednie właściwości.
W POS zdefiniowana kilkanaście typów pochodnych RetailException. Przykładową niepełną listę wraz z treściami UITitle oraz UIMessage dla języka polskiego prezentuje poniższa tabela.
Typ wyjątku |
UITitle |
UIMessage |
RetailException | Błąd systemu | Wystąpił nieznany błąd |
RetailSecurityException | Odmowa dostępu | Wystąpił nieznany błąd |
RetailVoucherException | Obsługa bonów | Wystąpił nieznany błąd |
RetailVoucherBlockedException | Obsługa bonów | Bon o numerze {0} jest zablokowany |