Single Document Interface to zasada projektowania w Comarch ERP Enterprise. Zgodnie z tą zasadą, dla użytkownika zawsze widoczne jest tylko jedno okno główne. W niektórych sytuacjach ma sens udostępnienie dodatkowych danych w osobnym, niemodalnym oknie. Mogą to być dane jednostki biznesowej lub dane, które nie pochodzą z Comarch ERP Enterprise. Te informacje wspierają użytkownika w pracy, nie przerywając jej. W tym artykule opisano, w jakich sytuacjach należy otwierać aplikację informacyjną w trybie okienkowym i jak ją tworzyć.
Grupa docelowa
- Programiści
- Konsultanci techniczni
Definicje terminów
- Tryb okienkowy — tryb okienkowy to wyświetlanie aplikacji informacyjnej w osobnym, niemodalnym oknie. Użytkownik może przesuwać to niemodalne okno i umieszczać je równolegle do okna głównego. Okno zachowuje swoją pozycję i rozmiar, nawet jeśli zostanie w nim otwarta inna aplikacja informacyjna.
Opis
Aplikacje informacyjne wspierają użytkownika dodatkowymi informacjami o jednostce biznesowej. Jeśli dla danej jednostki istnieje aplikacja informacyjna, można ją otworzyć z pola jednostki biznesowej za pomocą skrótu klawiszowego CTRL-ALT-I lub za pomocą menu kontekstowego. Gdy aplikacja informacyjna jest otwierana z pola jednostki biznesowej, jest wyświetlana w trybie okienkowym. Osobne, niemodalne okno, które się w ten sposób otwiera, użytkownik może na przykład przesunąć obok okna głównego.
Dla każdego okna głównego otwierane jest maksymalnie jedno niemodalne okno. Jeśli otwiera się kolejną aplikację informacyjną w trybie okienkowym, używane jest to samo niemodalne okno: poprzednio otwarta aplikacja informacyjna zostaje automatycznie zamknięta, bez zamykania okna. Pozycja i rozmiar okna nie zmieniają się podczas otwierania kolejnej aplikacji informacyjnej. Fokus pozostaje zasadniczo w oknie głównym.
Aplikacja w trybie okienkowym zawiera dodatkowe informacje o jednostce biznesowej. Nie jest przeznaczona do dalszego przetwarzania. Dlatego nie zawiera elementów sterujących, które wymagałyby od użytkownika podjęcia działania. Wszystkie dane muszą być widoczne po otwarciu aplikacji.
Przykłady
Pracownik biura przyjmuje zamówienia sprzedaży przez telefon. Klient dzwoni i chce zamówić artykuł. Pracownik wprowadza zamówienie sprzedaży, podając klienta jako zamawiającego. Z pola Zamawiający można za pomocą aplikacji informacyjnej pobrać dodatkowe informacje o kliencie, takie jak ostatnio zamówione artykuły i jego zdolność kredytowa. Aplikacja informacyjna jest wyświetlana w niemodalnym oknie. Pracownik umieścił okno obok okna głównego. Okno nie zasłania okna głównego, a fokus pozostaje w polu Zamawiający. Pracownik może korzystać z dodatkowych informacji i kontynuować pracę bez przeszkód.
Klient zamawia artykuł, a pracownik wprowadza nową pozycję zamówienia. Dla tego artykułu pracownik może sprawdzić stan magazynowy za pomocą aplikacji informacyjnej. Aplikacja informacyjna dotycząca artykułu otwiera się w istniejącym oknie dialogowym i zastępuje informacje o kliencie.
Zakres i ograniczenia
Jak przedstawiono w rozdziale Przykłady, aplikacje informacyjne zawsze wyświetlają dodatkowe informacje. Użytkownik pracuje w oknie głównym. Aplikacja informacyjna nie powinna zawierać elementów, które podczas normalnego użytkowania wymagałyby od użytkownika przeniesienia fokusu do aplikacji informacyjnej. Z tego powodu aplikacja informacyjna nie może zawierać na przykład pól gotowych do wprowadzania danych. Wszystkie pola, listy rozwijane (ComboBox), pola wyboru, itp. mogą być tylko do odczytu. W przypadku komponentów Cockpit nagłówek musi być ukryty.
Wszystkie informacje w aplikacji informacyjnej powinny być widoczne na pierwszy rzut oka. Aplikacja informacyjna nie może zawierać elementów, które wymagają interakcji z użytkownikiem, aby wyświetlić więcej informacji, takich jak:
- Obszary rozwijane (Shelfs)
- Zakładki (TabbedPanes)
- Okna pop-up
- Okna dialogowe
Układ aplikacji informacyjnej powinien uwzględniać ograniczoną przestrzeń w niemodalnym oknie. Należy unikać pasków przewijania.
Aplikacja informacyjna może zawierać akcje (Buttons) i hiperłącza (EntityFields), aby na przykład uruchomić inną aplikację z poziomu aplikacji informacyjnej w oknie głównym.
Jeśli aplikacja nie może być zrealizowana w oparciu o ten prosty model obsługi, musi być zrealizowana jako aplikacja dialogowa, a nie jako aplikacja informacyjna.
Aplikacja, która oferuje złożone możliwości analityczne, np. z komponentami Cockpit i polami wyszukiwania dla jednostki biznesowej, powinna być realizowana jako aplikacja dialogowa, a nie jako aplikacja informacyjna. Jako aplikacja dialogowa ma ona do dyspozycji więcej miejsca w oknie głównym niż w niemodalnym oknie aplikacji informacyjnej.
Możliwości dostosowania
Aplikacje informacyjne muszą być realizowane jako aplikacje z możliwością dostosowania, ponieważ wyświetlane informacje muszą być dostosowane do specyficznych wymagań klienta. Gdy aplikacja informacyjna jest otwierana z menu użytkownika, jest ona otwierana w oknie głównym, a jej interfejs można dostosować w zwykły sposób. Aplikacja informacyjna powinna być rozszerzalna przez partnerów Comarch ERP Enterprise, aby w łatwy sposób można było dodawać nowe informacje specyficzne dla projektu, na przykład za pomocą APP.
Rozwój
Dla rozwoju aplikacji informacyjnej kluczowe jest:
- Aplikacja musi być aplikacją z możliwością dostosowania, opartą na abstrakcyjnej klasie bazowej com.cisag.pgm.base.CisInfoApplication
- Dla powiązanego obiektu deweloperskiego Aplikacja należy ustawić typ Dialog ze szczególnym zastosowaniem Aplikacja z możliwością dostosowania
- Jednostka biznesowa powinna być wprowadzona jako główka jednostka biznesowa dla akcji ładowania z ID 1 jednostka biznesowa powinna być podana jako parametr
- Nazwa aplikacji powinna odpowiadać nazwie powiązanej jednostki biznesowej, uzupełnionej o dodatek -informacje.
Otwieranie aplikacji
Aplikację informacyjną można otworzyć albo jako aplikację dialogową z nagłówka, albo w trybie okienkowym. Jeśli aplikacja informacyjna została otwarta jako aplikacja dialogowa, jej interfejs może być dostosowany. Akcja Otwórz aplikację w trybie okienkowym otwiera istniejącą aplikację dialogową w niemodalnym oknie.
Aplikacja dialogowa powinna, jak zwykle, oferować wyszukiwanie nawigatora i wyświetlać identyfikację jednostki biznesowej w nagłówku, aby można było otwierać różne instancje jednostki biznesowej.
Interfejs programistyczny
Każda aplikacja informacyjna opiera się na widoku obiektu. Należy sprawdzić, czy istniejące widoki obiektów dla jednostki biznesowej są odpowiednie dla aplikacji informacyjnej. W razie potrzeby trzeba stworzyć własne widoki obiektów dla aplikacji informacyjnej.
Widoki obiektów do tworzenia i edycji jednostki biznesowej są bardziej rozbudowane niż widoki obiektów do wyświetlania informacji w aplikacji informacyjnej. Widoki obiektów dla aplikacji informacyjnej są wyspecjalizowane w wyświetlaniu jak największej liczby dodatkowych informacji. Dlatego często ma sens tworzenie oddzielnych widoków obiektów do edycji i do informacji.
Należy nadpisać następujące metody:
Class getDataViewClass()
DataView createDataView()
Metoda getDataViewClass zwraca klasę widoku obiektu, który jest wyświetlany przez aplikację informacyjną. Metoda createDataView() tworzy instancję pasującą do tego widoku obiektu.
Można zaprogramować nagłówek aplikacji za pomocą pól, nadpisując następującą metodę:
void initIdentArea(DataViewUI<?> dataViewUI, View identPane)
Pola w nagłówku nie powinny być edytowalne podczas wyświetlania w trybie okienkowym. Gdy zostanie wywołana następująca metoda, należy ustawić te pola tylko do odczytu:
void setIdentPaneReadOnly()
Aplikacja informacyjna może być otwarta bezpośrednio w niemodalnym oknie lub zostać do niego przeniesiona później. Należy pamiętać, że ogólnie rzecz biorąc, aktywna jest inna aplikacja dialogowa, gdy aplikacja informacyjna jest wyświetlana w niemodalnym oknie. Ma to na przykład następujące konsekwencje:
- Nie wolno wysyłać żadnych błędów, ostrzeżeń ani innych komunikatów, ponieważ byłyby one wyświetlane w komunikatach aktywnej aplikacji dialogowej
- Nie wolno żądać blokad specyficznych dla aplikacji za pomocą CisApplicationManager
Za pomocą następującej metody można sprawdzić, czy aplikacja jest otwarta jako aplikacja dialogowa, czy w niemodalnym oknie:
int getDisplayMode()
Rejestracja
Należy zarejestrować aplikację informacyjną za pomocą hooka com.cisag.pgm.appserver.hook.BusinessObjectRegistryHook z definicji hook contract com.cisag.pgm.appserver.Server.
Rejestracja przypisuje aplikację informacyjną do jednostki biznesowej. Rejestracja aplikacji informacyjnej dla jednostki biznesowej odbywa się za pomocą metody registerInfoApplication.