Szczegółowy spis różnić w działaniu klienta VCL i WEB¶
Podstawowe różnice między klientem VCL a WEB¶
Klient WEB posiada zdecydowanie mniej funkcjonalności od klienta VCL, a szczegółowy spis różnic można znaleźć tutaj.
Należy też zwrócić uwagę, że na oknach WEB mieści się zdecydowanie mniej elementów niż na oknach VCL, dlatego zwykle definiuje się osobne formy WEB i osobne VCL. Przy czym mogą to być okna z tych samych obiektów biznesowych, o tych samych symbolach, jedynie różniące się dedykowanym urządzeniem (telefon, tablet, desktop WWW, desktop). Neos sam dobiera odpowiednią definicję formy dla właściwego urządzenia.
Stylizowanie okien i kontrolek¶
W kliencie VCL działa mechanizm powiększania kontrolek i czcionki w sytuacji, gdy ustawimy wysokość równą 2 lub 3. Na WEB ten mechanizm nie działa. Na WEB nie działa także metoda na styl. Jedyną skuteczną metodą wpływania na wielkość elementów i ich wygląd na WEB jest stylizacja klasami css.
Ikony¶
Ikony w kliencie WEB działają na zasadzie fontów wektorowych, dlatego są jednokolorowe. Indywidualnymi stylami css można wpłynąć na ich kolor w razie potrzeby. Na WEB nie są dostępne wszystkie ikony, który można użyć na VCL, a jedynie podzbiór wymieniony poniżej.
"ICON_1": "fa fa-check",
"ICON_10": "sl3b-print-text",
"ICON_11": "fa fa-copy overflowxfix",
"ICON_12": "fa fa-copy overflowxfix",
"ICON_13": "fa fa-bolt",
"ICON_14": "fa fa-bolt",
"ICON_2": "fa fa-times",
"ICON_28": "sl3b-navigation-menu-1",
"ICON_3": "fa fa-times",
"ICON_30": "sl3b-receipt-1",
"ICON_4": "fa fa-check",
"ICON_48": "fa fa-lock",
"ICON_49": "fa fa-question",
"ICON_5": "fa fa-plus",
"ICON_52": "sl3b-lock-unlock-1",
"ICON_53": "fa fa-info-circle",
"ICON_6": "fa fa-minus",
"ICON_7": "sl3b-pencil",
"ICON_8": "fa fa-search",
"ICON_9": "sl3b-filter-1",
"MI_1": "sl3b-common-file-empty",
"MI_2": "sl3b-folder-open",
"MI_3": "sl3b-floppy-disk-2",
"MI_4": "fa fa-copy overflowxfix",
"MI_5": "sl3b-scissors-2",
"MI_6": "fa fa-caret-down",
"MI_7": "sl3b-messages-bubble-square-question",
"MI_8": "sl3b-copy-paste",
"MI_9": "sl3b-print-text",
"MI_AKCJE": "sl3b-envelope-postcard",
"MI_ARCHCEN": "sl3b-tags-double",
"MI_ARCHIVE": "sl3b-archive-folder",
"MI_ARCHTOW": "sl3b-module-three-2",
"MI_ARROWLEFT": "fa fa-arrow-left",
"MI_ARROWRIGHT": "fa fa-arrow-right",
"MI_ASORTYMENT": "sl3b-shipment-package",
"MI_BANK": "sl3b-saving-bank",
"MI_BANKS": "sl3b-saving-bank-international",
"MI_BELL": "sl3b-alarm-bell-ring-1",
"MI_BULLETGREEN": "fa fa-circle clgreen",
"MI_BULLETRED": "fa fa-circle clred",
"MI_BULLETYELLOW": "fa fa-circle clyellow",
"MI_CENNIKI": "sl3b-tag-dollar-1",
"MI_CHART": "sl3b-performance-increase",
"MI_CIRCLEGREEN": "fa fa-circle clgreen bolder",
"MI_CIRCLERED": "fa fa-circle clred bolder",
"MI_CIRCLEYELLOW": "fa fa-circle clyellow bolder",
"MI_CLO": "sl3b-road-sign-no-entry-alternate",
"MI_CLOSE": "fa fa-times",
"MI_CRM": "sl3b-office-business-card",
"MI_CUBE": "sl3b-shape-cube",
"MI_DASHBOARD": "sl3b-layout-dashboard",
"MI_DATABASE": "sl3b-database-2-alternate",
"MI_DIFFERENCE": "sl3b-angle-brackets",
"MI_DOC": "sl3b-content-paper-edit",
"MI_DOKMAG1": "sl3b-office-file-module-edit",
"MI_DOKWIT": "sl3b-cloud-file",
"MI_DOSTAWA": "sl3b-shipment-give",
"MI_DOSTAWCY": "sl3b-project-building-shopping",
"MI_DOWN": "fa fa-sort-down",
"MI_ECOMMERCE": "sl3b-e-commerce-cart-browser",
"MI_EDITALIGNCENTER": "sl3b-paragraph-center-align",
"MI_EDITALIGNLEFT": "sl3b-paragraph-left-align",
"MI_EDITALIGNRIGHT": "sl3b-paragraph-right-align-alternate",
"MI_EDITBGCOLOR": "sl3b-font-size",
"MI_EDITBOLD": "fa fa-bold bolder",
"MI_EDITBULLETEDLIST": "sl3b-list-bullets-1",
"MI_EDITBUTTON": "sl3b-keyboard-button",
"MI_EDITCALC": "sl3b-accounting-calculator",
"MI_EDITCHECK": "sl3b-check-square",
"MI_EDITCOPY": "fa fa-copy overflowxfix",
"MI_EDITCUT": "sl3b-scissors-2",
"MI_EDITDATE": "sl3b-calendar-date",
"MI_EDITFGCOLOR": "sl3b-text-options",
"MI_EDITINDENTLEFT": "sl3b-indent-increase-1",
"MI_EDITINDENTRIGHT": "sl3b-indent-decrease-1",
"MI_EDITINSERTIMAGE": "sl3b-image-file-add",
"MI_EDITINSERTLINK": "sl3b-hyperlink-1",
"MI_EDITITALIC": "sl3b-text-italic",
"MI_EDITLABEL": "sl3b-text-style",
"MI_EDITMEMO": "sl3b-paragraph-normal",
"MI_EDITNUMBEREDLIST": "sl3b-list-numbers",
"MI_EDITPASTE": "sl3b-copy-paste",
"MI_EDITREDO": "fa fa-undo fa-flip-horizontal",
"MI_EDITTEXT": "sl3b-typing",
"MI_EDITUNDERLINE": "sl3b-text-underline",
"MI_EDITUNDO": "fa fa-undo",
"MI_EMAILEDIT": "sl3b-email-action-edit",
"MI_EMAILNEW": "sl3b-tag-new",
"MI_EMAILOUT": "sl3b-email-action-upload",
"MI_EMAILREAD": "sl3b-email-action-read-document",
"MI_EMAILSENT": "sl3b-envelope",
"MI_ERASER": "fa fa-eraser",
"MI_EXCLAMATION": "sl3b-alert-triangle importantcolor",
"MI_EXTENTION": "sl3b-composition-layout-2",
"MI_FAK1": "sl3b-common-file-cash",
"MI_FAK2": "sl3b-common-file-text-cash",
"MI_FASTENER": "sl3b-attachment",
"MI_FILTER": "sl3b-filter-1",
"MI_FK": "sl3b-study-exam-math",
"MI_FKAMORT": "sl3b-delivery-truck-clock",
"MI_FKAMORTPLAN": "sl3b-common-file-text-clock",
"MI_FKBKDOC": "sl3b-common-file-text-cash",
"MI_FKBKDOCA": "sl3b-filter-text",
"MI_FKBKDOCR": "sl3b-common-file-text-edit",
"MI_FKBKDOCS": "sl3b-common-file-text-search",
"MI_FKBKDOCV": "sl3b-accounting-invoice",
"MI_FKBKDOCVS": "sl3b-cash-search",
"MI_FKBOOK1": "sl3b-book-open-text",
"MI_FKBOOK2": "sl3b-book-search",
"MI_FKBOOK3": "sl3b-book-edit",
"MI_FKBOOK4": "sl3b-notes-diary",
"MI_FKBOOKA": "sl3b-read-search-alternate",
"MI_FKDECREE": "sl3b-check-payment-sign",
"MI_FKFXASSETS": "sl3b-shipment-truck-2",
"MI_GRID": "sl3b-task-list-text-alternate",
"MI_GRIDVIEW": "sl3b-design-tool-layout",
"MI_GRUPCEN": "sl3b-tags-double-alternate",
"MI_GRUPYKLI": "sl3b-multiple-users-1",
"MI_HISTORIA": "sl3b-walkman-cassette",
"MI_HOME": "fa fa-home",
"MI_HORIZONTAL": "sl3b-layout-column",
"MI_INFORMATION": "sl3b-messages-bubble-information-alternate",
"MI_INSIDE": "sl3b-download-thick-bottom",
"MI_KATTOW": "sl3b-office-file-module-edit",
"MI_KONTAKTY": "sl3b-phone-type",
"MI_KONTRAKTY": "sl3b-business-contract-handshake-sign",
"MI_KORESPOND": "sl3b-read-email-laptop",
"MI_LISTAPLAC": "sl3b-accounting-coins",
"MI_LISTAPLACN": "sl3b-accounting-calculator",
"MI_LISTAPLACR": "sl3b-pencil-write-3",
"MI_LISTWYS1": "sl3b-shipment-open",
"MI_LISTWYS2": "sl3b-shipment-check",
"MI_LISTWYS3": "sl3b-shipment-in-transit",
"MI_MAGAZYN": "sl3b-warehouse-storage-3",
"MI_MAXIMIZE": "sl3b-app-window-expand-1",
"MI_MENU": "sl3b-navigation-menu-vertical",
"MI_MENU2": "sl3b-navigation-menu-1",
"MI_MESSAGE": "sl3b-messages-people-user-bubble-circle",
"MI_MESSAGEA": "sl3b-messages-people-user-clock",
"MI_MIARA": "sl3b-measure-ruler-divider",
"MI_MOBILE": "sl3b-mobile-phone-3",
"MI_MODULE": "sl3b-module-four",
"MI_MYSLNIK": "fa fa-minus",
"MI_MYSLNIKZIEL": "fa fa-minus",
"MI_NARZEDZIA": "sl3b-tools-wench-1",
"MI_NIEOBECN": "sl3b-calendar-disable",
"MI_NOTATKA": "sl3b-notes-paper-text",
"MI_NUMER": "sl3b-arrange-number",
"MI_OKRES": "sl3b-calendar-date",
"MI_OKRESZAM": "sl3b-notes-clock",
"MI_OPERACJA": "fa fa-cog",
"MI_OPERATOR": "sl3b-people-man-10",
"MI_OPERMAG": "sl3b-warehouse-truck-delivery-1",
"MI_OUTSIDE": "sl3b-upload-thick-box",
"MI_PADLOCK": "fa fa-lock",
"MI_PAGESETUP": "sl3b-image-file-settings",
"MI_PANEL": "sl3b-layout-top",
"MI_PDF": "sl3b-office-file-pdf",
"MI_PER": "sl3b-multiple-users-1",
"MI_PKOSOBY": "sl3b-single-neutral-id-card-double",
"MI_PLANS": "sl3b-calendar-setting",
"MI_PLATNOSC": "sl3b-credit-card-dollar-1-alternate",
"MI_PLURLOP": "sl3b-picture-sun",
"MI_PRDEPART": "sl3b-real-estate-action-building-settings",
"MI_PRINT": "sl3b-print-text",
"MI_PRINTPREVIEW": "sl3b-common-file-search",
"MI_PRIORITY": "sl3b-style-two-pin-warning veryimportantcolor",
"MI_PRMACHINE": "sl3b-cog-double-1",
"MI_PRMACHINSPECT": "sl3b-tools-wench-hold",
"MI_PRMACHREPAIR": "sl3b-hardware-wench-screw",
"MI_PROD": "fa fa-industry",
"MI_PROGRAMY": "sl3b-accounting-coins-stack",
"MI_PROJEKTY": "sl3b-grid-ruler-alternate",
"MI_PROMOCJA": "sl3b-alert-circle",
"MI_PROPERRAP": "sl3b-single-neutral-setting",
"MI_PROPERSRAP": "sl3b-printer-view",
"MI_PRTOOLSWAREHOUSE": "sl3b-tools-box-1",
"MI_PRZELEW": "sl3b-cash-payment-bill-1",
"MI_PULPIT1": "sl3b-app-window-layout",
"MI_PULPIT2": "sl3b-app-window-user",
"MI_PUZZLE": "sl3b-module-puzzle",
"MI_QUESTION": "sl3b-messages-bubble-question-alternate",
"MI_QUESTION2": "sl3b-question-help-message-alternate",
"MI_RABATY": "sl3b-discount-coupon",
"MI_REDPADLOCK": "fa fa-lock veryimportantcolor",
"MI_REDX": "fa fa-times veryimportantcolor",
"MI_REFRESH": "sl3b-synchronize-arrows-triangle",
"MI_REJFAK": "sl3b-folder-cash-1-alternate",
"MI_REJZAM": "sl3b-notes-flip",
"MI_REPLIK": "sl3b-database-sync",
"MI_RIGHT": "fa fa-caret-right",
"MI_ROZRACH": "sl3b-money-bags",
"MI_ROZRACHA": "sl3b-cash-payment-bag",
"MI_ROZRACHD": "sl3b-accounting-invoice",
"MI_ROZRACHK": "sl3b-business-deal-cash-1",
"MI_ROZRACHS": "sl3b-cash-search",
"MI_SCHEDULES": "sl3b-time-clock-file-setting",
"MI_SENDEMAIL": "sl3b-email-action-send-1",
"MI_SERIAL": "sl3b-barcode",
"MI_SETTINGS": "sl3b-notes-checklist-flip",
"MI_SETTWIT": "sl3b-network-settings",
"MI_SHORTAGE": "sl3b-common-file-settings-1",
"MI_SID": "fa fa-truck",
"MI_SONDY": "sl3b-earth-question",
"MI_SPEDYTOR": "sl3b-truck-cargo",
"MI_SPRAWY": "sl3b-tool-box",
"MI_SPRZEDAWCY": "sl3b-business-deal-handshake-1",
"MI_STANY": "sl3b-accounting-abacus fa-rotate-right",
"MI_STOP": "sl3b-stop-sign veryimportantcolor",
"MI_SUROWIEC": "sl3b-lab-tubes",
"MI_SZKOLENIA": "sl3b-school-board-maths",
"MI_SZKOLENIAP": "sl3b-e-learning-monitor",
"MI_SZUKDOK": "sl3b-common-file-text-search",
"MI_SZUKFAK": "sl3b-cash-search",
"MI_SZUKTOW": "sl3b-shipment-search",
"MI_SZUKZAM": "sl3b-notes-search",
"MI_TABS": "sl3b-folder-alternate",
"MI_TECHKARTY": "sl3b-common-file-text-settings",
"MI_TENEUM": "sl3b-teneum",
"MI_TOOLBAR": "sl3b-folder-star-alternate",
"MI_TOOLCENNIK": "sl3b-tags-settings-alternate",
"MI_TOOLFAK": "sl3b-cash-toggles",
"MI_TOOLKALK": "sl3b-calculator-app",
"MI_TOOLMAG": "sl3b-warehouse-settings",
"MI_TOOLS": "sl3b-tools-wench-screwdriver",
"MI_TOOLTOW": "sl3b-cog-square-1",
"MI_TOOLWIAD": "sl3b-email-action-settings",
"MI_TOOLWIN": "sl3b-cog-browser-alternate",
"MI_TOOLWIT": "sl3b-network-settings",
"MI_TOOLZAM": "sl3b-calendar-setting",
"MI_TOWARY": "sl3b-shipment-package",
"MI_TRASH": "sl3b-bin-1",
"MI_TREE": "sl3b-ui-webpage-bullets",
"MI_TREE2": "sl3b-tree-cloud",
"MI_TREE3": "fa fa-tree",
"MI_TYPDOK": "sl3b-common-file-module-alternate",
"MI_TYPFAK": "sl3b-folder-cash-alternate",
"MI_TYPYPLIKOW": "sl3b-common-file-question",
"MI_UP": "fa fa-sort-up",
"MI_USERS": "sl3b-people-man-10",
"MI_VAT": "sl3b-discount-circle",
"MI_VERTICAL": "sl3b-layout-agenda",
"MI_WALUTY": "sl3b-currency-user-exchange",
"MI_WFTIME": "sl3b-synchronize-arrow-clock",
"MI_WIADWIT": "sl3b-ecology-globe-message-1",
"MI_WINDOWS": "sl3b-app-window-two",
"MI_WINDOWS2": "sl3b-app-window-two",
"MI_WITRYNA": "sl3b-earth-edit",
"MI_WMS": "sl3b-warehouse-truck-delivery-1",
"MI_WNURLOP": "sl3b-beach-sunbed",
"MI_WORKFLOW": "sl3b-synchronize-arrows-three",
"MI_WORKPLACE": "sl3b-single-man-actions-setting",
"MI_WORLD": "fa fa-globe",
"MI_WWW": "sl3b-network-www",
"MI_WYCIAG": "sl3b-saving-bank-cash",
"MI_WYPADEK": "sl3b-disability-wheelchair-1",
"MI_ZADANIA": "sl3b-list-to-do",
"MI_ZAM1": "sl3b-notes-edit",
"MI_ZAM2": "sl3b-notes-check",
"MI_ZAM3": "sl3b-notes-remove",
"MI_ZAM4": "sl3b-notes-disable",
"MI_ZAM5": "sl3b-notes-give-1",
"MI_ZAM6": "sl3b-envelope-letter",
"MI_ZAMGEN": "sl3b-notes-sync",
"MI_ZBOZE": "sl3b-bread-wheat",
"MI_ZDROWIE": "sl3b-hospital-house",
"MI_ZLECPROD": "sl3b-design-tool-shape",
Tworzenie zapytań SQL dla klienta WEB¶
Obsługa pustej wartości w klauzuli WHERE¶
Neos umożliwia nam przy pomocy metody na dodawanie różnych filtrów do zapytania SQL. Przykładowa metoda może wyglądać następująco:
public string Filter()
{
return "q.qtype = 0 and q.limited = 0 and p.ref = "+this._parametr;
}
W przypadku gdy this._parametr będzie pusty zostanie błędnie utworzony warunek filtrowania. Dla takiego warunku klient VCL i WEB wygenerują zapytania SQL różniące się sekcją WHERE. Klient VCL zignoruje pusty warunek i stworzy zapytanie:
select q.ref as QREF, p.ref as PREF, q.symbol||' - '||q.name as QNAME, p.name as PNAME
from qualifies4projects qp
join qualifies q on q.ref = qp.qualifie
join projects p on p.ref = qp.project WHERE ((q.qtype = 0 and q.limited = 0))
Natomiast klient WEB doklei warunek bez żadnych modyfikacji:
select q.ref as QREF, p.ref as PREF, q.symbol||' - '||q.name as QNAME, p.name as PNAME
from qualifies4projects qp
join qualifies q on q.ref = qp.qualifie
join projects p on p.ref = qp.project WHERE ((q.qtype = 0 and q.limited = 0 and p.ref = ))
Nie wskazanie konkretnego źródła pola¶
W przypadku gdy w wyrażeniu filtrującym nie podamy, z jakiej tabeli ma pochodzić wykorzystane w nim pole, to klient VCL spróbuje poprawić wyrażenie SQL poprzez dodanie aliasu tabeli wskazanej w obiekcie biznesowym.
Natomiast jeżeli tę samą formę uruchomimy przez klienta web, zapytanie może nie wykonać się poprawnie i dostaniemy wyjątek z informacją o niejasnym wskazaniu pola, które ma być wykorzystane. Ambiguous field name between table [ABC] and table [XYZ] [FIELDNAME]
Należy pamiętać, aby zawsze aliasować pola wykorzystywane w zapytaniu SQL.
Skróty klawiszowe dla klienta WEB¶
Klient VCL umożliwia dodanie skrótów klawiszowych do akcji składających się z więcej niż z dwóch klawiszy. Klient WEB obsługuje tylko skróty dwu klawiszowe
Różnice w zachowaniu kontrolek w kliencie Desktop i Web¶
Tree¶
Kontrolka Tree w kliencie Web nie pokazuje rekordów, które mają nieprawidłowo ustawionego rodzica, ani potomków takiego rekordu. W kliencie Desktop, jeśli rekord ma nieprawidłowo ustawionego rodzica, jest on pokazywany na głównym poziomie jako korzeń. Ta różnica w zachowaniu może być błędnie interpretowana jako bug. Gdy w kontrolce Tree w kliencie Web brakuje części lub wszystkich rekordów, warto zwrócić uwagę na to, czy źródło danych zwraca prawidłową strukturę drzewa.
Uwaga
Częstym przypadkiem gdy drzewo w kliencie Web nie pokazuje rekordów jest przypadek gdy pole rodzica ma typ string, a rekordy na głównym poziomie (bez rodzica) mają w tym polu ustawioną wartość null. W takiej sytuacji wartością dla rekordów bez rodzica powinien być pusty string (""). W przypadku innych typów danych należy upewnić się, że pole rodzica jest ustawione na odpowiednią wartość domyślną dla tego typu.
Pole edycyjne ze sposobem edycji PASSWORD¶
Jeżeli pole modelu danych lub parametr posiada sposób edycji PASSWORD, to zachowanie tej kontrolki będzie się różnić między klientem VCL a WEB w przypadku, gdy będziemy próbowali odczytać jej wartość po stronie metod logiki. - VCL - wartość zostanie odczytana taka, jaka została wpisana w polu edycyjnym na formie. - Web - wartość odczytana jest zahashowana. Wynika to z kwestii bezpieczeństwa. Już zahashowana wartość trafia z klienta web do Neosa.
Jeżeli zależy nam na odczytaniu "surowych" wartości, a nie chcemy rezygnować z "zasłaniania" wartości po stronie GUI klienta web, należy zastosować sposób edycji EDIT, a następnie w sekcji Tylko dla Web oznaczyć pole Czy ukryć znajdujący się w polu tekst.
Wówczas dane nie zostaną zahashowane i zostaną przesłane do Neosa w formie surowej. Ta opcja jest dostępna TYLKO dla klienta web.
Różnice w diagramach¶
Korzystając z diagramów w kliencie WEB należy zadbać o to by źródła dla diagramów nie zawierały wartości nullowych. Nie wspierane jest także grupowanie.