Funkcjonalność ViewManagera
«Punkty dostępu»
IViewManager umożliwia wyświetlanie gotowych dialogów Syrve POS. Jest to możliwe, gdy Syrve POS przekazuje kontrolę do wtyczki w ramach operacji modalnej, wywołując odpowiednią metodę i przekazując do niej instancję IViewManager jako jeden z argumentów. Obiekt ten jest istotny tylko w obrębie metody, do której jest przekazany, i zostanie usunięty po zwróceniu kontroli przez wtyczkę z tej metody.
Przykłady operacji modalnych:
- Wywołanie procesu naciśnięcia przycisku dla przycisku dodawanego przez wtyczkę w menu Zaawansowanym.
- Interakcja z metodą płatności udostępnioną w wtyczce: zbieranie danych, przesyłanie i procesy zwrotów (zobacz
IExternalPaymentProcessor) (sprawdź artykuł External Payment Methods API)*
Ogólna koncepcja
Wtyczka wywołuje metodę i przetwarza wynik: var result = viewManager.ShowSomething(...). W zależności od sygnatury metody, wtyczka otrzymuje prymitywną zmienną (bool, int, string) lub instancję IInputDialogResult zgodnie z semantyką.
Jeśli logika biznesowa wymaga walidacji wartości (na przykład trzeba zweryfikować dostępność numeru pokoju hotelowego), właściwe podejście jest następujące:
- użytkownik zamyka dialog
- wtyczka waliduje wynik
- jeśli walidacja się nie powiedzie, dialog pojawia się ponownie

W przypadku powiadomień, które nie wymagają odpowiedzi użytkownika, zaleca się używanie nie-modalnych wyskakujących okienek (zobacz powiadomienie, ostrzeżenie, błąd), ponieważ nie wymagają one instancji IViewManager, dzięki czemu mogą być wyświetlane w dowolnym momencie.
Opis funkcjonalności
Dialog z jednym przyciskiem
ShowOkPopup() wyświetla okno dialogowe z nagłówkiem, tekstem oraz przyciskiem «OK», który zamyka dialog.
ShowErrorPopup() wyświetla okno dialogowe z nagłówkiem «Błąd», tekstem oraz przyciskiem «Zamknij».
Dialog z dwoma przyciskami «Tak/Nie»
ShowYesNoPopup() wyświetla okno dialogowe z nagłówkiem, tekstem oraz dwoma przyciskami, zwracając true jeśli naciśnięto «Tak».
Dialog wyboru
ShowChooserPopup() przyjmuje listę łańcuchów znaków oraz opcjonalnie indeks domyślnego elementu jako parametry i zwraca indeks wybranego elementu. Posiada opakowanie, które przyjmuje listę obiektów oraz funkcję zwracającą tekstową reprezentację obiektu Func<T, string>, opcjonalnie domyślny element, i zwraca wybrany przez użytkownika element. Jeśli użytkownik nie wybierze elementu (naciśnie «Anuluj»), zwracane jest -1 lub null. Szerokość przycisku może być określona jako parametr opcjonalny. Im węższy przycisk, tym więcej kolumn z przyciskami mieści się na jednej stronie. Domyślnie szerokość przycisku to ButtonWidth.Normal.
Dialog wprowadzania niestandardowych linii
ShowKeyboard() wyświetla dialog z klawiaturą ekranową. Dostępne parametry:
- tekst otwarcia
- czy dozwolone jest wieloliniowe wprowadzanie
- limit długości linii
- czy pierwsza litera każdego słowa powinna być wielka (wygodne dla nazw własnych)
- czy wprowadzenie ma być maskowane (jeśli wpisywane jest hasło)

Dialog wprowadzania liczb
ShowInputDialog() z parametrem type = InputTypes.Number oraz opcjonalnym parametrem initialValue – wartość początkowa, może być użyty do wprowadzenia liczby. Aby zinterpretować wynik wprowadzenia, zwracany IInputDialogResult należy rzutować na NumberInputDialogResult.

Dialog wprowadzania enumerowanego łańcucha znaków
Oprócz wyżej wymienionego istnieje metoda ShowExtendedInputDialog(). Jednym z jej parametrów jest klasa ustawień ExtendedInputDialogSettings. Jeśli ustawisz tam ExtendedInputDialogSettings.EnableNumericString = true, użytkownicy będą proszeni o wprowadzenie cyfr. Wraz z tym ustawieniem można ustawić tekst opisowy ExtendedInputDialogSettings.TabTitleNumericString. W przeciwieństwie do wyżej wymienionej metody wprowadzania, dane wprowadzone w tej metodzie reprezentują łańcuch znaków, co pozwala na wprowadzanie zer wiodących oraz dużych liczb przekraczających int. Aby zinterpretować wynik wprowadzenia, zwracany IInputDialogResult należy rzutować na NumericStringInputDialogResult.

Przykład:
var settings = new ExtendedInputDialogSettings
{
EnableNumericString = true,
TabTitleNumericString = "Tytuł zakładki wprowadzania liczby"
}
var dialogResult = viewManager.ShowExtendedInputDialog(
"Tytuł okna",
"Podtytuł informujący użytkowników, co dokładnie należy wprowadzić",
settings)
as NumericStringInputDialogResult;
if (dialogResult == null)
return;
// analiza wyniku
Dialog wprowadzania kodu kreskowego
Metoda ShowExtendedInputDialog() może być wywołana z ustawieniem ExtendedInputDialogSettings.EnableBarcode = true, które współgra z ExtendedInputDialogSettings.TabTitleBarcode. Aby zinterpretować wynik wprowadzenia, zwracany IInputDialogResult należy rzutować na BarcodeInputDialogResult.
Dialog wprowadzania numeru telefonu
Innym ustawieniem ShowExtendedInputDialog() jest ExtendedInputDialogSettings.EnablePhone = true, które współgra z ExtendedInputDialogSettings.TabTitlePhone. W tym przypadku dane wprowadzone przez użytkownika są walidowane zgodnie z ustawieniami systemu numerów telefonicznych; pole wprowadzania zawiera maskę numeru kierunkowego. Dopóki dane nie zostaną zwalidowane, przycisk «OK» nie będzie dostępny. Aby zinterpretować wynik wprowadzenia, zwracany IInputDialogResult należy rzutować na PhoneInputDialogResult.

Dialogi umożliwiające przesunięcie karty
Przesunięcie karty może być włączone zarówno w ShowInputDialog(), jak i ShowExtendedInputDialog(). W pierwszym przypadku należy określić type = InputTypes.Card, w drugim – ExtendedInputDialogSettings.EnableCardSlider = true. W obu przypadkach, aby zinterpretować wynik wprowadzenia, zwracany IInputDialogResult należy rzutować na CardInputDialogResult.
Różne
Metody wprowadzania w ShowInputDialog() i ShowExtendedInputDialog() można łączyć, korzystając z dostępnych ustawień jednocześnie. Na przykład użytkownik może zostać poproszony o wprowadzenie numeru karty lub przesunięcie karty. W takim przypadku zwracany wynik należy rzutować na każdy z oczekiwanych typów wyników.
Przykład 1 (kod):
var result = viewManager.ShowInputDialog(
"Wprowadź numer pokoju lub przesuń kartę",
InputDialogTypes.Number | InputDialogTypes.Card);
if (result is NumberInputDialogResult numeric)
Operations.AddNotificationMessage($"Wprowadzono numer {numeric.Number}", "SamplePlugin");
if (result is CardInputDialogResult card)
Operations.AddNotificationMessage($"Ścieżka karty {card.FullCardTrack}", "SamplePlugin");
Przykład 2 (możliwy układ i ustawienia):

var settings = new ExtendedInputDialogSettings
{
EnableBarcode = true,
TabTitleBarcode = "Tytuł zakładki wartości numerycznej",
EnableCardSlider = true,
EnableNumericString = true,
TabTitleNumericString = "Tytuł zakładki kodu kreskowego",
EnablePhone = true,
TabTitlePhone = "Tytuł zakładki telefonu"
};
var dialogResult = viewManager.ShowExtendedInputDialog(
"Tytuł okna",
"Podtytuł wyjaśniający, co dokładnie użytkownik powinien wprowadzić.",
settings);
Więcej o interfejsie użytkownika
Wtyczka może wyświetlać własne dialogi, ale nie jest to objęte API Syrve POS. Proszę sprawdzić inny artykuł.