{"id":9693,"date":"2025-09-03T10:34:06","date_gmt":"2025-09-03T08:34:06","guid":{"rendered":"https:\/\/pomoc.comarch.pl\/cee\/?post_type=ht_kb&#038;p=9693"},"modified":"2025-09-03T10:34:07","modified_gmt":"2025-09-03T08:34:07","slug":"podrecznik-referencyjny-aplikacje-mobilne","status":"publish","type":"ht_kb","link":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/","title":{"rendered":"Podr\u0119cznik referencyjny: Aplikacje mobilne"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 ez-toc-wrap-left counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Spis tre\u015bci<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Prze\u0142\u0105cznik Spisu Tre\u015bci\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Grupa_docelowa\" >Grupa docelowa<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Wprowadzenie\" >Wprowadzenie<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Technologia\" >Technologia<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Tworzenie_aplikacji\" >Tworzenie aplikacji<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Mozliwosc_dostosowania\" >Mo\u017cliwo\u015b\u0107 dostosowania<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Interfejs_uzytkownika\" >Interfejs u\u017cytkownika<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Strona_startowa\" >Strona startowa<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Pasek_nawigacji\" >Pasek nawigacji<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Aplikacje\" >Aplikacje<\/a><ul class='ez-toc-list-level-6' ><li class='ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Tytul\" >Tytu\u0142<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Pola_identyfikacyjne\" >Pola identyfikacyjne<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Pasek_narzedzi\" >Pasek narz\u0119dzi<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Okna_dialogowe\" >Okna dialogowe<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Komunikaty\" >Komunikaty<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Okna_dialogowe_potwierdzenia\" >Okna dialogowe potwierdzenia<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Pola\" >Pola<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#DialogButton\" >DialogButton<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Wartosci_pomocnicze\" >Warto\u015bci pomocnicze<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Linki\" >Linki<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Linki_zewnetrzne\" >Linki zewn\u0119trzne<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Wyszukiwanie\" >Wyszukiwanie<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Kontenery\" >Kontenery<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Automatyczne_ukrywanie_pol_i_kontenerow\" >Automatyczne ukrywanie p\u00f3l i kontener\u00f3w<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#GroupBox\" >GroupBox<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Shelf\" >Shelf<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#TabbedPane\" >TabbedPane<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Listy\" >Listy<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Tabele\" >Tabele<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Wykresy\" >Wykresy<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Nieobslugiwane_elementy\" >Nieobs\u0142ugiwane elementy<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-31\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Nieobslugiwane_wlasciwosci\" >Nieobs\u0142ugiwane w\u0142a\u015bciwo\u015bci<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-32\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Srodowisko_testowe\" >\u015arodowisko testowe<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-33\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Uwagi_techniczne\" >Uwagi techniczne<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-34\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Obslugiwane_urzadzenia\" >Obs\u0142ugiwane urz\u0105dzenia<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-35\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#iPhone\" >iPhone<\/a><ul class='ez-toc-list-level-6' ><li class='ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-36\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Ekran_glowny\" >Ekran g\u0142\u00f3wny<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-37\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Dane_logowania\" >Dane logowania<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-38\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Starsze_urzadzenia\" >Starsze urz\u0105dzenia<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-39\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Android\" >Android<\/a><ul class='ez-toc-list-level-6' ><li class='ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-40\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Ekran_glowny-2\" >Ekran g\u0142\u00f3wny<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-41\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Interfejsy_specyficzne_dla_producenta\" >Interfejsy specyficzne dla producenta<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-42\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Dostosowanie_ekranu\" >Dostosowanie ekranu<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-43\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-mobilne\/#Sesje\" >Sesje<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<p>Niniejszy artyku\u0142 ma s\u0142u\u017cy\u0107 jako przewodnik i materia\u0142 referencyjny do tworzenia aplikacji mobilnych. Aplikacje mobilne to takie aplikacje z interfejsem u\u017cytkownika, kt\u00f3rych docelow\u0105 platform\u0105 nie jest typowy komputer stacjonarny czy laptop, lecz urz\u0105dzenie mobilne, jak na przyk\u0142ad smartfon.<\/p>\n<p>Tworzenie aplikacji mobilnych odbywa si\u0119 generalnie wed\u0142ug tego samego modelu programowania i w tym samym \u015brodowisku deweloperskim, co tworzenie aplikacji z interfejsem u\u017cytkownika na komputery stacjonarne. W zwi\u0105zku z tym, niniejszy artyku\u0142 koncentruje si\u0119 na wymaganiach i r\u00f3\u017cnicach, kt\u00f3re s\u0105 specyficzne dla aplikacji mobilnych.<\/p>\n<h3 id=\"grupa-docelowa\" ><span class=\"ez-toc-section\" id=\"Grupa_docelowa\"><\/span>Grupa docelowa<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>Programi\u015bci<\/li>\n<li>Konsultanci techniczni<\/li>\n<\/ul>\n<h3 id=\"wprowadzenie\" ><span class=\"ez-toc-section\" id=\"Wprowadzenie\"><\/span>Wprowadzenie<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Aplikacje mobilne to aplikacje zaprojektowane specjalnie do u\u017cytku na urz\u0105dzeniach mobilnych. W ramach tego artyku\u0142u, przez urz\u0105dzenia mobilne nale\u017cy rozumie\u0107 przede wszystkim wsp\u00f3\u0142czesne smartfony, poniewa\u017c staj\u0105 si\u0119 one coraz bardziej popularne i wydajne. Smartfony \u0142\u0105cz\u0105 funkcjonalno\u015b\u0107 telefonu i PDA (komputera przeno\u015bnego) w jednym urz\u0105dzeniu, kt\u00f3re u\u017cytkownik zawsze ma przy sobie. Dzi\u0119ki zintegrowanym czujnikom i niemal powszechnemu dost\u0119powi do sieci, smartfony sta\u0142y si\u0119 platform\u0105 dla niemal ka\u017cdego rodzaju aplikacji.<\/p>\n<p>Jednak\u017ce, te odnosz\u0105ce sukcesy aplikacje nie s\u0105 po prostu mniejszymi wersjami istniej\u0105cych aplikacji desktopowych, ale cz\u0119sto zupe\u0142nie nowo stworzonymi aplikacjami do zada\u0144, kt\u00f3rych u\u017cytkownicy potrzebuj\u0105 w specyficznym kontek\u015bcie mobilnym. W przeciwie\u0144stwie do komputera, z kt\u00f3rego korzysta si\u0119 przez wiele godzin w pracy do wykonywania obszernych zada\u0144, smartfony s\u0105 u\u017cywane najcz\u0119\u015bciej do szybkiego odszukania konkretnych informacji. W zwi\u0105zku z tym, kluczowe jest, aby u\u017cytkownicy mogli w jak najbardziej intuicyjny i wydajny spos\u00f3b dotrze\u0107 do potrzebnych im informacji.<\/p>\n<p>Inne wa\u017cne warunki ramowe dla aplikacji mobilnych to oczywi\u015bcie mniejszy rozmiar ekranu oraz model obs\u0142ugi zoptymalizowany pod ekrany dotykowe. W przypadku urz\u0105dze\u0144 z ekranami dotykowymi, wszystkie elementy steruj\u0105ce musz\u0105 by\u0107 wystarczaj\u0105co du\u017ce, aby mo\u017cna je by\u0142o obs\u0142ugiwa\u0107 pewnie palcem. Dla najpopularniejszych rozmiar\u00f3w ekran\u00f3w oznacza to maksymalnie oko\u0142o 10 wierszy lub maksymalnie 5 przycisk\u00f3w na wiersz. Dlatego, podczas tworzenia aplikacji mobilnych, niezb\u0119dne jest zidentyfikowanie naprawd\u0119 wa\u017cnych i najcz\u0119\u015bciej potrzebnych informacji oraz odpowiednie ustrukturyzowanie interfejsu. Rzadko potrzebne informacje lub akcje powinny by\u0107 przenoszone na osobne ekrany lub ca\u0142kowicie pomijane.<\/p>\n<p>W wi\u0119kszo\u015bci przypadk\u00f3w, aplikacje mobilne s\u0105 wykorzystywane do przegl\u0105dania informacji, a nie do wprowadzania lub modyfikowania nowych danych. Aplikacje mobilne powinny jak najdok\u0142adniej rozdziela\u0107 tryby wy\u015bwietlania oraz zmiany\/wprowadzania danych, na przyk\u0142ad za pomoc\u0105 osobnego okna dialogowego edycji, kt\u00f3re musi by\u0107 jawnie otwierane za pomoc\u0105 przycisku <strong>[Edytuj]<\/strong>. Takie podej\u015bcie jest zalecane, poniewa\u017c w trybie wy\u015bwietlania wszystkie puste pola s\u0105 automatycznie ukrywane, a w trybie edycji ukrywane s\u0105 pewne w\u0142a\u015bciwo\u015bci p\u00f3l, przyk\u0142adowo linki. Ponadto, edytowalne pola mog\u0105 \u0142atwiej prowadzi\u0107 do b\u0142\u0119dnych operacji, poniewa\u017c urz\u0105dzenia nie zawsze potrafi\u0105 jednoznacznie rozpozna\u0107, czy u\u017cytkownik chcia\u0142 ustawi\u0107 kursor w polu, czy przewin\u0105\u0107 stron\u0119.<\/p>\n<h4 id=\"technologia\" ><span class=\"ez-toc-section\" id=\"Technologia\"><\/span>Technologia<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Producenci smartfon\u00f3w korzystaj\u0105 z r\u00f3\u017cnych technologii do programowania aplikacji mobilnych. Opr\u00f3cz programowania natywnego, przyk\u0142adowo w Objective-C\/iOS lub Java\/Android, oferuj\u0105 tak\u017ce mo\u017cliwo\u015b\u0107 tworzenia aplikacji w HTML, CSS i JavaScript, a nast\u0119pnie wy\u015bwietlania ich w przegl\u0105darce urz\u0105dzenia. W przeciwie\u0144stwie do aplikacji natywnych, umo\u017cliwia to stosunkowo \u0142atwe tworzenie aplikacji wieloplatformowych. Co wi\u0119cej, to podej\u015bcie uniezale\u017cnia dewelopera aplikacji od tak zwanych <em>App-Stores<\/em> danego producenta.<\/p>\n<p>Aplikacje oparte na HTML\/JavaScript maj\u0105 pewne ograniczenia w por\u00f3wnaniu do aplikacji natywnych, na przyk\u0142ad zazwyczaj nie maj\u0105 dost\u0119pu do czujnik\u00f3w lub danych urz\u0105dzenia. Istniej\u0105 jednak ju\u017c propozycje rozszerze\u0144 dla HTML5, kt\u00f3re maj\u0105 standaryzowa\u0107 odpowiednie interfejsy.<\/p>\n<p>Z perspektywy systemu ERP, dla urz\u0105dze\u0144 mobilnych stosowana jest zasadniczo ta sama technologia co dla komputer\u00f3w klienckich z Internet Explorerem. W obu przypadkach generowana jest dynamiczna strona HTML z CSS i JavaScript, w kt\u00f3rej dzia\u0142aj\u0105 poszczeg\u00f3lne aplikacje ERP. W przypadku urz\u0105dze\u0144 mobilnych wewn\u0119trznie u\u017cywany jest jedynie specjalny silnik renderuj\u0105cy, kt\u00f3ry zapewnia niezb\u0119dne dostosowania do urz\u0105dze\u0144 i ich przegl\u0105darek.<\/p>\n<h4 id=\"tworzenie-aplikacji\" ><span class=\"ez-toc-section\" id=\"Tworzenie_aplikacji\"><\/span>Tworzenie aplikacji<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Pod wzgl\u0119dem tworzenia aplikacji, istniej\u0105 tylko niewielkie r\u00f3\u017cnice mi\u0119dzy aplikacjami mobilnymi a standardowymi, desktopowymi aplikacjami. W obu przypadkach s\u0105 to <em>CisUiApplications<\/em>, kt\u00f3re mo\u017cna programowa\u0107 w ten sam spos\u00f3b. Dotyczy to nie tylko programowania, ale tak\u017ce mo\u017cliwo\u015bci dostosowywania interfejsu, t\u0142umaczenia, dostarczania, rozszerzania (aplikacje\/hooki), itd.<\/p>\n<p>Zasadnicza r\u00f3\u017cnica polega na specjalnym silniku renderuj\u0105cym, kt\u00f3ry jest u\u017cywany przy dost\u0119pie z urz\u0105dze\u0144 mobilnych. Podczas gdy przy dost\u0119pie za pomoc\u0105 przegl\u0105darki desktopowej wszystkie elementy interfejsu u\u017cytkownika s\u0105 prezentowane w swojej standardowej wizualizacji, przy dost\u0119pie przez przegl\u0105dark\u0119 mobiln\u0105 u\u017cywany jest widok dostosowany do smartfon\u00f3w. Zmiana ta dotyczy nie tylko formy i funkcji poszczeg\u00f3lnych element\u00f3w interfejsu, ale tak\u017ce ca\u0142ej aplikacji.<\/p>\n<p>Specjalny silnik renderuj\u0105cy wprowadza jednak pewne ograniczenia i wymagania dotycz\u0105ce programowania interfejsu u\u017cytkownika aplikacji mobilnych. Przyk\u0142adowo, silnik renderuj\u0105cy nie obs\u0142uguje wszystkich element\u00f3w interfejsu, a niekt\u00f3re w\u0142a\u015bciwo\u015bci element\u00f3w s\u0105 z g\u00f3ry ustalone.<\/p>\n<p>To, czy aplikacja z interfejsem u\u017cytkownika jest oferowana na urz\u0105dzeniach mobilnych, zale\u017cy od ustawie\u0144 w powi\u0105zanym obiekcie deweloperskim <em>Aplikacja<\/em>. W polu wyboru <em>Ustawienia prezentacji i utrzymania<\/em> nale\u017cy wybra\u0107 warto\u015b\u0107 <em>Urz\u0105dzenia mobilne<\/em> lub <em>Wszystkie urz\u0105dzenia<\/em>. Mo\u017cliwe jest wi\u0119c stworzenie jednej aplikacji, kt\u00f3ra mo\u017ce by\u0107 u\u017cywana zar\u00f3wno na komputerach stacjonarnych, jak i na smartfonach. W przypadku aplikacji, kt\u00f3re mo\u017cna dostosowywa\u0107, mo\u017cna nawet zdefiniowa\u0107 r\u00f3\u017cne widoki do u\u017cytku na komputerach stacjonarnych i smartfonach.<\/p>\n<p>Zasadniczo jednak nale\u017cy za\u0142o\u017cy\u0107, \u017ce wymagania merytoryczne i model obs\u0142ugi dla tych typ\u00f3w aplikacji r\u00f3\u017cni\u0105 si\u0119 na tyle, \u017ce lepiej jest tworzy\u0107 dwie oddzielne aplikacje. Niezale\u017cnie od tej decyzji, wewn\u0105trz aplikacji lub komponent\u00f3w aplikacji mo\u017cna sprawdzi\u0107, w jakim kontek\u015bcie jest ona u\u017cywana. Przyk\u0142adowo, <em>EditorFactory<\/em> mo\u017ce tworzy\u0107 r\u00f3\u017cne edytory dla komputera stacjonarnego i smartfona. Odpowiednich informacji dostarcza <em>SessionType<\/em>, kt\u00f3ry mo\u017cna pobra\u0107 z klasy <em>CisEnvironment<\/em>.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Aplikacja <em>com.cisag.app.general.partner.ui.MobilePartnerInfo<\/em> mo\u017ce pos\u0142u\u017cy\u0107 jako przyk\u0142ad aplikacji mobilnej.<\/div><\/section>\n<h4 id=\"mozliwosc-dostosowania\" ><span class=\"ez-toc-section\" id=\"Mozliwosc_dostosowania\"><\/span>Mo\u017cliwo\u015b\u0107 dostosowania<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Aplikacje mobilne nie r\u00f3\u017cni\u0105 si\u0119 pod wzgl\u0119dem mo\u017cliwo\u015bci dostosowywania od innych aplikacji z interfejsem u\u017cytkownika. To, czy i kt\u00f3re cz\u0119\u015bci aplikacji mo\u017cna dostosowa\u0107, zale\u017cy od decyzji dewelopera, kt\u00f3ry dokonuje odpowiednich ustawie\u0144 w obiekcie deweloperskim <em>Aplikacja<\/em>, do\u0142\u0105cza <em>DataViews<\/em> oraz konfiguruje zaprogramowane elementy interfejsu (np. za pomoc\u0105 <em>VisualElement#setCustomizabe<\/em>). Podobnie jak w przypadku wszystkich aplikacji z interfejsem u\u017cytkownika, kt\u00f3re mo\u017cna dostosowywa\u0107, modyfikacja interfejsu odbywa si\u0119 w trybie projektowania. Aplikacje musz\u0105 by\u0107 w tym celu otwierane w sesji dialogowej, poniewa\u017c dostosowywanie bezpo\u015brednio na urz\u0105dzeniu mobilnym nie jest mo\u017cliwe. Otwieranie aplikacji mobilnych musi odbywa\u0107 si\u0119 ewentualnie z powi\u0105zanego obiektu deweloperskiego <em>Aplikacja<\/em>, poniewa\u017c aplikacje mobilne nie s\u0105 wy\u015bwietlane w nawigatorze (menu u\u017cytkownika).<\/p>\n<p>W zale\u017cno\u015bci od konfiguracji w obiekcie deweloperskim <em>Aplikacja<\/em>, mo\u017cna tworzy\u0107 widoki przeznaczone dla komputer\u00f3w stacjonarnych, smartfon\u00f3w lub obu typ\u00f3w urz\u0105dze\u0144. Je\u015bli aplikacja z mo\u017cliwo\u015bci\u0105 dostosowania jest dozwolona dla wszystkich urz\u0105dze\u0144, w trybie projektowania podczas tworzenia nowego widoku mo\u017cna wybra\u0107 \u017c\u0105dany typ.<\/p>\n<h3 id=\"interfejs-uzytkownika\" ><span class=\"ez-toc-section\" id=\"Interfejs_uzytkownika\"><\/span>Interfejs u\u017cytkownika<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Interfejs u\u017cytkownika jest zorganizowany w poszczeg\u00f3lne strony (widoki). Taka strona zawsze wype\u0142nia ca\u0142\u0105 powierzchni\u0119 ekranu, ale mo\u017ce by\u0107 r\u00f3wnie\u017c wi\u0119ksza w pionie (co wymaga przewijania). Aplikacja mo\u017ce sk\u0142ada\u0107 si\u0119 z jednej lub wielu takich stron. Zazwyczaj strony s\u0105 ustrukturyzowane hierarchicznie i s\u0142u\u017c\u0105 do grupowania szczeg\u00f3\u0142owych informacji. Same aplikacje s\u0105 zorganizowane przez nadrz\u0119dn\u0105 aplikacj\u0119 ramow\u0105, kt\u00f3ra prezentuje si\u0119 r\u00f3wnie\u017c jako strona startowa.<\/p>\n<h4 id=\"strona-startowa\" ><span class=\"ez-toc-section\" id=\"Strona_startowa\"><\/span>Strona startowa<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Dost\u0119pne aplikacje s\u0105 prezentowane na stronie startowej (<em>Home<\/em>) w postaci przycisk\u00f3w i mo\u017cna je otworzy\u0107, po prostu dotykaj\u0105c ich. Aby u\u0142atwi\u0107 dost\u0119p do cz\u0119sto lub ostatnio u\u017cywanych aplikacji, strona startowa jest podzielona na sekcje: <em>Ulubione<\/em>, <em>Historia<\/em> oraz <em>Wszystkie aplikacje<\/em>.<\/p>\n<ul>\n<li><strong>Ulubione<\/strong> &#8212; sekcja zawiera list\u0119 aplikacji, kt\u00f3re zosta\u0142y przez u\u017cytkownika zapisane jako <em>Ulubione<\/em><\/li>\n<li><strong>Historia<\/strong> &#8212; w sekcji wy\u015bwietlane s\u0105 ostatnio otwierane aplikacje. Aplikacje, kt\u00f3re ju\u017c znajduj\u0105 si\u0119 na li\u015bcie ulubionych, s\u0105 automatycznie pomijane w historii.<\/li>\n<li><strong>Wszystkie aplikacje<\/strong> &#8212; sekcja grupuje wszystkie dost\u0119pne aplikacje wed\u0142ug ich przynale\u017cno\u015bci do obszaru, umieszczaj\u0105c je na oddzielnych podstronach<\/li>\n<\/ul>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\"> Aby aplikacja pojawi\u0142a si\u0119 w tym menu, w obiekcie deweloperskim <em>Aplikacja<\/em> nale\u017cy wybra\u0107 <em>Urz\u0105dzenia mobilne<\/em> lub <em>Wszystkie urz\u0105dzenia<\/em> w polu <em>Ustawienia prezentacji i utrzymania<\/em>. Ponadto, u\u017cytkownik mo\u017ce widzie\u0107 tylko te aplikacje, do kt\u00f3rych ma uprawnienia. <\/div><\/section>\n<h4 id=\"pasek-nawigacji\" ><span class=\"ez-toc-section\" id=\"Pasek_nawigacji\"><\/span>Pasek nawigacji<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>W g\u00f3rnej cz\u0119\u015bci ekranu znajduje si\u0119 pasek nawigacji. Zazwyczaj wy\u015bwietla on opis (tytu\u0142) aktualnie przegl\u0105danego widoku. Dodatkowo, pasek nawigacji mo\u017ce zawiera\u0107 jeden lub wi\u0119cej element\u00f3w steruj\u0105cych. Elementy te, w zale\u017cno\u015bci od widoku, mog\u0105 s\u0142u\u017cy\u0107 do nawigacji mi\u0119dzy r\u00f3\u017cnymi widokami lub do sterowania zawarto\u015bci\u0105.<\/p>\n<h5 id=\"aplikacje\" ><span class=\"ez-toc-section\" id=\"Aplikacje\"><\/span>Aplikacje<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Strona startowa lub g\u0142\u00f3wna ka\u017cdej aplikacji ma specjalny pasek nawigacji. Opr\u00f3cz tytu\u0142u, mog\u0105 by\u0107 w niego wbudowane tak\u017ce pole identyfikacyjne oraz inne elementy steruj\u0105ce.<\/p>\n<h6 id=\"tytul\" ><span class=\"ez-toc-section\" id=\"Tytul\"><\/span>Tytu\u0142<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>W g\u00f3rnej cz\u0119\u015bci paska nawigacji wy\u015bwietlana jest nazwa bie\u017c\u0105cej aplikacji wraz z nazw\u0105 systemu. Odpowiada to informacjom, kt\u00f3re w aplikacjach desktopowych s\u0105 widoczne na pasku tytu\u0142u okna przegl\u0105darki.<\/p>\n<h6 id=\"pola-identyfikacyjne\" ><span class=\"ez-toc-section\" id=\"Pola_identyfikacyjne\"><\/span>Pola identyfikacyjne<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Identyfikacja aktualnie otwartego obiektu jest wy\u015bwietlana w polu identyfikacyjnym. Pole to, o ile aplikacja na to pozwala, mo\u017ce by\u0107 r\u00f3wnie\u017c wykorzystywane do bezpo\u015bredniego wprowadzania identyfikacji, na przyk\u0142ad w celu otwarcia konkretnego obiektu.<\/p>\n<p>Zazwyczaj pole identyfikacyjne to <em>EntityField<\/em>,\u00a0ale mog\u0105 by\u0107 u\u017cywane r\u00f3wnie\u017c inne typy p\u00f3l.<\/p>\n<p>Pole identyfikacyjne musi zosta\u0107 dostarczone przez aplikacj\u0119 poprzez dodanie wybranego pola jako jedynego do <em>IndentPane<\/em> obiektu <em>CisUiApplication<\/em>. Je\u015bli <em>IndentPane <\/em>zawiera wi\u0119cej ni\u017c jedno (widoczne) pole, infrastruktura wybiera po prostu pierwsze (widoczne) pole. Wszystkie pozosta\u0142e pola z <em>IndentPane <\/em>nie pojawiaj\u0105 si\u0119 na interfejsie.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Podczas tworzenia aplikacji z mo\u017cliwo\u015bci\u0105 dostosowania nale\u017cy upewni\u0107 si\u0119, \u017ce <em>IndentPane <\/em>nie jest modyfikowalna, a dostosowywa\u0107 mo\u017cna tylko <em>WorkPane<\/em>. Naj\u0142atwiej to osi\u0105gn\u0105\u0107, rejestruj\u0105c tylko <em>WorkPane<\/em> za pomoc\u0105 <em>DataViewUI#resgister()<\/em>. Alternatywnie, mo\u017cna u\u017cy\u0107 wywo\u0142ania <em>VisualElement#setCustomizable(Customizable.FALSE)<\/em> w celu wy\u0142\u0105czenia dostosowywania dla <em>WorkPane<\/em>.<\/div><\/section>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Wielocz\u0119\u015bciowe identyfikacje (np. rodzaj i numer) musz\u0105 by\u0107 po\u0142\u0105czone w jednym polu tekstowym.<\/div><\/section>\n<ul>\n<li><strong>Od\u015bwie\u017canie<\/strong> &#8212; przycisk <strong>[Aktualizuj]<\/strong> jest po\u0142\u0105czony z <em>LoadAction<\/em> obiektu <em>MainCoolBars<\/em> i ma tak\u0105 sam\u0105 funkcjonalno\u015b\u0107 jak w aplikacjach desktopowych, tzn. od\u015bwie\u017ca dane bie\u017c\u0105cej aplikacji lub otwiera obiekt o identyfikacji wpisanej w polu identyfikacyjnym. W aplikacjach z polem identyfikacyjnym przycisk <strong>[Aktualizuj]<\/strong>\u00a0jest wizualnie zintegrowany z polem, w przeciwnym razie znajduje si\u0119 po prawej stronie paska nawigacji.<\/li>\n<\/ul>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Aplikacje mog\u0105 kontrolowa\u0107 widoczno\u015b\u0107 przycisku <strong>[Aktualizuj]<\/strong> za pomoc\u0105 metody <em>setEnabled()<\/em> w powi\u0105zanej <em>LoadAction<\/em>.<\/div><\/section>\n<ul>\n<li><strong>Wyszukiwanie<\/strong> &#8212; je\u015bli aplikacja udost\u0119pnia pole identyfikacyjne, a to pole ma warto\u015bci wspomagaj\u0105ce (<em>SearchManager<\/em>), to po prawej stronie paska nawigacji automatycznie pojawia si\u0119 przycisk wyszukiwania. Po wybraniu tego przycisku otwiera si\u0119 okno dialogowe wyszukiwania.<\/li>\n<li><strong>Dodawanie<\/strong> &#8212; za pomoc\u0105 przycisku<strong> [Dodaj]<\/strong>, bie\u017c\u0105c\u0105 aplikacj\u0119 mo\u017cna doda\u0107 do ulubionych<\/li>\n<\/ul>\n<h4 id=\"pasek-narzedzi\" ><span class=\"ez-toc-section\" id=\"Pasek_narzedzi\"><\/span>Pasek narz\u0119dzi<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Pasek narz\u0119dzi (<em>Toolbar<\/em>) jest cz\u0119\u015bci\u0105 aplikacji ramowej i znajduje si\u0119 u do\u0142u ka\u017cdej aplikacji (g\u0142\u00f3wnego widoku).<\/p>\n<ul>\n<li><strong>[Wstecz]<\/strong> &#8212; przycisk przewija wstecz ostatnio otwarte obiekty<\/li>\n<li><strong>[Dalej]<\/strong> &#8212; przycisk dzia\u0142a przeciwnie do przycisku <strong>[Wstecz]<\/strong><\/li>\n<li><strong>[Ekran startowy]<\/strong> &#8212; przycisk przenosi u\u017cytkownika do strony startowej<\/li>\n<li><strong>[Inne akcje]<\/strong> &#8212; za pomoc\u0105 przycisku dost\u0119pne s\u0105 akcje, kt\u00f3rych ze wzgl\u0119du na ograniczon\u0105 przestrze\u0144 nie mo\u017cna umie\u015bci\u0107 bezpo\u015brednio na pasku narz\u0119dzi. Lista mo\u017cliwych w danej chwili akcji pojawia si\u0119 w specjalnym panelu (<em>Action sheet)<\/em>, kt\u00f3ry wysuwa si\u0119 od do\u0142u, zas\u0142aniaj\u0105c bie\u017c\u0105c\u0105 aplikacj\u0119. To, jakie akcje s\u0105 oferowane na li\u015bcie, zale\u017cy od aktualnie u\u017cywanej aplikacji. <span style=\"font-size: revert; color: initial;\">Obszar<\/span><span style=\"font-size: revert; color: initial;\"> analizuje w tym celu pasek narz\u0119dzi <\/span><em style=\"font-size: revert; color: initial;\">MainCoolBar<\/em><span style=\"font-size: revert; color: initial;\"> aplikacji i pobiera z niego okre\u015blone akcje (<\/span><em style=\"font-size: revert; color: initial;\">Actions<\/em><span style=\"font-size: revert; color: initial;\">) do listy. <\/span>Pierwszym kryterium wyboru akcji jest ich <em style=\"font-size: revert; color: initial;\">Action-ID<\/em><span style=\"font-size: revert; color: initial;\">. Z akcji standardowych przenoszone s\u0105 tylko te o identyfikatorach<\/span><em style=\"font-size: revert; color: initial;\"> CREATE, UPDATE, EDIT, DELETE<\/em><span style=\"font-size: revert; color: initial;\"> i <\/span><em style=\"font-size: revert; color: initial;\">EXIT<\/em><span style=\"font-size: revert; color: initial;\">. Dodatkowo, uwzgl\u0119dniane s\u0105 wszystkie akcje specyficzne dla danej aplikacji, kt\u00f3rych identyfikatory mieszcz\u0105 si\u0119 w zakresie od <\/span><span style=\"font-size: revert; color: initial;\">1 do 9999<\/span><span style=\"font-size: revert; color: initial;\">. <\/span>Drugim kryterium jest <span style=\"font-size: revert; color: initial;\">stan akcji<\/span><span style=\"font-size: revert; color: initial;\">. Przenoszone s\u0105 tylko akcje <\/span><span style=\"font-size: revert; color: initial;\">widoczne i aktywne<\/span><span style=\"font-size: revert; color: initial;\">. <\/span>Szczeg\u00f3lnym przypadkiem jest strona startowa. Zamiast akcji <em style=\"font-size: revert; color: initial;\">Zamknij<\/em><span style=\"font-size: revert; color: initial;\"> (<\/span><em style=\"font-size: revert; color: initial;\">EXIT<\/em><span style=\"font-size: revert; color: initial;\">), oferowana jest tam akcja <\/span><em style=\"font-size: revert; color: initial;\">Wyloguj<\/em><span style=\"font-size: revert; color: initial;\">. Akcja <\/span><em style=\"font-size: revert; color: initial;\">Anuluj<\/em> <span style=\"font-size: revert; color: initial;\">jest dodawana automatycznie \u2013 umo\u017cliwia ona u\u017cytkownikowi zamkni\u0119cie listy i powr\u00f3t do aplikacji, je\u015bli przypadkowo wybra\u0142 przycisk<\/span><strong style=\"font-size: revert; color: initial;\"> [Inne akcje]<\/strong><span style=\"font-size: revert; color: initial;\">.<\/span><\/li>\n<\/ul>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Dost\u0119pne miejsce jest bardzo ograniczone, a lista nie ma funkcji przewijania, dlatego nale\u017cy upewni\u0107 si\u0119, \u017ce nie u\u017cywa si\u0119 zbyt wielu akcji.<\/div><\/section>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Tekst wy\u015bwietlany na li\u015bcie jest pobierany z przycisku utworzonego na podstawie akcji. Je\u015bli przycisk nie ma tekstu, u\u017cywany jest jego Tooltip. Teksty u\u017cywanych akcji nie powinny by\u0107 zbyt d\u0142ugie, poniewa\u017c w przeciwnym razie musz\u0105 zosta\u0107 zawini\u0119te, co zmniejsza dost\u0119pn\u0105 przestrze\u0144 dla innych przycisk\u00f3w.<\/div><\/section>\n<ul>\n<li><strong>[Otwarte aplikacje]<\/strong> &#8212; przycisk otwiera list\u0119 wszystkich aktualnie otwartych aplikacji. Prze\u0142\u0105czenie si\u0119 na wybran\u0105 aplikacj\u0119 nast\u0119puje po wybraniu odpowiedniego wpisu na li\u015bcie.<\/li>\n<\/ul>\n<h4 id=\"okna-dialogowe\" ><span class=\"ez-toc-section\" id=\"Okna_dialogowe\"><\/span>Okna dialogowe<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Okna dialogowe i wyskakuj\u0105ce okienka s\u0105 wy\u015bwietlane na osobnej stronie ekranu. Natomiast komunikaty i okna dialogowe potwierdzenia s\u0105 umieszczane jako p\u00f3\u0142przezroczyste wyskakuj\u0105ce okienka nad wcze\u015bniej aktywn\u0105 stron\u0105 ekranu.<\/p>\n<p>Wszystkie okna dialogowe i wyskakuj\u0105ce okienka s\u0105 automatycznie wyposa\u017cane w przycisk <strong>[Wstecz]<\/strong>. Mog\u0105 te\u017c mie\u0107 w\u0142asne przyciski. W tym celu okno dialogowe musi zawiera\u0107 <em>ButtonBar<\/em>, kt\u00f3ra mo\u017ce mie\u0107 maksymalnie dwa przyciski (akcje). Je\u015bli <em>ButtonBar <\/em>zawiera w\u0142asny przycisk <em>CANCEL<\/em> lub <em>CLOSE<\/em>, zast\u0119puje on standardowy przycisk <strong>[Wstecz]<\/strong> w lewym g\u00f3rnym rogu paska nawigacji. Je\u015bli <em>ButtonBar <\/em>zawiera przycisk, kt\u00f3ry nie odpowiada ani <em>CANCEL<\/em> ani <em>CLOSE<\/em>, zostanie on umieszczony po prawej stronie paska nawigacji. Wszystkie pozosta\u0142e przyciski s\u0105 ignorowane.<\/p>\n<h5 id=\"komunikaty\" ><span class=\"ez-toc-section\" id=\"Komunikaty\"><\/span>Komunikaty<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>W przeciwie\u0144stwie do aplikacji desktopowych, w aplikacjach mobilnych nie ma paska komunikat\u00f3w ani paska stanu. Zamiast tego, komunikaty o b\u0142\u0119dach i ostrze\u017cenia s\u0105 wy\u015bwietlane w wyskakuj\u0105cym okienku. W przypadku komunikat\u00f3w o b\u0142\u0119dach dotycz\u0105cych konkretnego pola, pole to jest dodatkowo pod\u015bwietlane.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Wy\u015bwietlanie jest obecnie zoptymalizowane pod k\u0105tem pojedynczych komunikat\u00f3w o b\u0142\u0119dach. W przypadku obszernych list b\u0142\u0119d\u00f3w istnieje ryzyko, \u017ce u\u017cytkownik nie b\u0119dzie m\u00f3g\u0142 zobaczy\u0107 wszystkich komunikat\u00f3w.<\/div><\/section>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Ostrze\u017ce\u0144 nie mo\u017cna obecnie potwierdza\u0107, dlatego dzia\u0142aj\u0105 one podobnie do komunikat\u00f3w o b\u0142\u0119dach.<\/div><\/section>\n<h5 id=\"okna-dialogowe-potwierdzenia\" ><span class=\"ez-toc-section\" id=\"Okna_dialogowe_potwierdzenia\"><\/span>Okna dialogowe potwierdzenia<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Okna dialogowe potwierdzenia (klasa <em>com.cisag.pgm.gui.ConfirmationDialog<\/em>) s\u0105 traktowane w szczeg\u00f3lny spos\u00f3b i otwieraj\u0105 si\u0119 jako wyskakuj\u0105ce okienka. Przyciski s\u0105 r\u00f3wnie\u017c automatycznie pobierane z <em>ButtonBar<\/em>, jednak zasady s\u0105 nieco inne. <em>ButtonBar <\/em>nadal mo\u017ce mie\u0107 maksymalnie dwa przyciski, przy czym w przypadku dw\u00f3ch przycisk\u00f3w, przycisk <em>Default<\/em>\u00a0jest zawsze umieszczony po prawej stronie i ma nieco ja\u015bniejszy kolor.<\/p>\n<h4 id=\"pola\" ><span class=\"ez-toc-section\" id=\"Pola\"><\/span>Pola<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Wygl\u0105d p\u00f3l jest specjalnie dostosowany do ma\u0142ej szeroko\u015bci ekranu. Etykieta (<em>Label<\/em>) jest zawsze umieszczona nad zawarto\u015bci\u0105 pola, dzi\u0119ki czemu obie te cz\u0119\u015bci maj\u0105 jak najwi\u0119cej miejsca na szeroko\u015b\u0107.<\/p>\n<h5 id=\"dialogbutton\" ><span class=\"ez-toc-section\" id=\"DialogButton\"><\/span>DialogButton<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p><em>DialogButton<\/em> mo\u017ce by\u0107 u\u017cyty do wy\u015bwietlania lub edycji dodatkowych szczeg\u00f3\u0142\u00f3w powi\u0105zanych z danym polem. Zazwyczaj, za pomoc\u0105 <em>ActionListener<\/em> i <em>DialogAction<\/em>, otwiera si\u0119 dodatkowy dialog lub wyskakuj\u0105ce okno. W zale\u017cno\u015bci od tego, czy pole umo\u017cliwia inne interakcje (np. linki lub edycj\u0119), przyciskiem otwieraj\u0105cym dialog jest albo ca\u0142e pole, albo tylko jego prawy fragment. Mo\u017cna to rozpozna\u0107 po kszta\u0142cie i kolorze ikony strza\u0142ki.<\/p>\n<section class=\"document-alert-box indicator\"><div class=\"document-alert-title\">Wskaz\u00f3wka<\/div><div class=\"document-alert-content\">U\u017cycie<em> DialogButton<\/em> wyklucza jednocze\u015bnie u\u017cycie warto\u015bci pomocniczej.<\/div><\/section>\n<p>Poprzez specjaln\u0105 <em>Property<\/em> mo\u017cna skonfigurowa\u0107 pole z <em>DialogButton<\/em> w taki spos\u00f3b, aby jego etykieta by\u0142a wy\u015bwietlana jak pasek tytu\u0142owy w <em>Shelf<\/em>. W takim przypadku, warto\u015b\u0107 pola s\u0142u\u017cy jako wst\u0119pna informacja dla dialogu. Przyk\u0142adowo, je\u015bli dialog wy\u015bwietla list\u0119 niezap\u0142aconych faktur, pole powinno podawa\u0107 ich liczb\u0119. Ze wzgl\u0119du na wygl\u0105d i ograniczon\u0105 dost\u0119pn\u0105 przestrze\u0144, powinna to by\u0107 zawsze warto\u015b\u0107 ca\u0142kowita (<em>Integer<\/em>).<\/p>\n<p>Ustawienie tej w\u0142a\u015bciwo\u015bci jest obecnie mo\u017cliwe tylko za pomoc\u0105 klasy <em>VisualElement<\/em> z pakietu <em>com.cisag.pgm.dialog<\/em> oraz metody \u00a0<em>setClientProperty<\/em>:<\/p>\n<div class=\"code-block ng-tns-c2422365803-266 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"code-block-decoration header-formatted gds-title-s ng-tns-c2422365803-266 ng-star-inserted\"><em>WebInterface.getVisualElement(field).putClientProperty(&#8222;addclass&#8221;,&#8221;counter&#8221;); <\/em><\/div>\n<\/div>\n<h5 id=\"wartosci-pomocnicze\" ><span class=\"ez-toc-section\" id=\"Wartosci_pomocnicze\"><\/span>Warto\u015bci pomocnicze<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>W edytowalnych polach, po prawej stronie, dost\u0119pny jest przycisk do otwierania warto\u015bci pomocniczych (je\u015bli pole ma przypisany <em>SearchManager<\/em> i nie jest zaj\u0119te przez <em>DialogButton<\/em>). Dotkni\u0119cie pola powoduje otwarcie odpowiedniego dialogu wyszukiwania.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Obecna warto\u015b\u0107 pola mo\u017ce by\u0107 zmieniana tylko za pomoc\u0105 dialogu wyszukiwania.<\/div><\/section>\n<h5 id=\"linki\" ><span class=\"ez-toc-section\" id=\"Linki\"><\/span>Linki<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Pola mog\u0105 by\u0107 u\u017cywane jako linki, kt\u00f3re dziel\u0105 si\u0119 na wewn\u0119trzne i zewn\u0119trzne. Linki wewn\u0119trzne wywo\u0142uj\u0105 odpowiednie listenery (np. <em>ActionListener<\/em> lub <em>MouseListener<\/em>) w aplikacji, natomiast linki zewn\u0119trzne s\u0105 obs\u0142ugiwane bezpo\u015brednio przez klienta.<\/p>\n<section class=\"document-alert-box indicator\"><div class=\"document-alert-title\">Wskaz\u00f3wka<\/div><div class=\"document-alert-content\">Dla <em>EntityFields<\/em> linki (standardowy wpis z menu kontekstowego) s\u0105 udost\u0119pniane automatycznie.<\/div><\/section>\n<section class=\"document-alert-box indicator\"><div class=\"document-alert-title\">Wskaz\u00f3wka<\/div><div class=\"document-alert-content\">Aby zapobiec pomy\u0142kowym operacjom, funkcjonalno\u015b\u0107 link\u00f3w jest automatycznie wy\u0142\u0105czana w polach edytowalnych.<\/div><\/section>\n<h5 id=\"linki-zewnetrzne\" ><span class=\"ez-toc-section\" id=\"Linki_zewnetrzne\"><\/span>Linki zewn\u0119trzne<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Zawarto\u015b\u0107 <em>TextFields<\/em> mo\u017ce by\u0107 interpretowana jako link zewn\u0119trzny, pod warunkiem, \u017ce odpowiedni <em>Content-Type<\/em> zostanie zdefiniowany w powi\u0105zanym <em>DataDescription<\/em> lub bezpo\u015brednio za pomoc\u0105 API na danym polu. Obs\u0142ugiwane s\u0105 URI dla stron internetowych, adres\u00f3w e-mail oraz numer\u00f3w telefon\u00f3w. Odpowiedni schemat URI (<em>http:, mail: bzw. tel:<\/em>) jest automatycznie okre\u015blany na podstawie typu zawarto\u015bci. Po wybraniu takiego pola na smartfonie, przegl\u0105darka uruchamia odpowiedni\u0105 aplikacj\u0119, tak\u0105 jak przegl\u0105darka internetowa, klient poczty e-mail lub aplikacja telefoniczna.<\/p>\n<p>Je\u015bli link zewn\u0119trzny ma by\u0107 niezale\u017cny od zawarto\u015bci pola, mo\u017cna go zdefiniowa\u0107, ustawiaj\u0105c w\u0142a\u015bciwo\u015b\u0107 dla danego pola. Wymagany kod to:<\/p>\n<p><em>WebInterface.getVisualElement(field).putClientProperty(&#8222;uri&#8221;,<\/em><em>&#8222;http:\/\/www.comarch.de\/erp&#8221;); <\/em><\/p>\n<section class=\"document-alert-box indicator\"><div class=\"document-alert-title\">Wskaz\u00f3wka<\/div><div class=\"document-alert-content\">Linki zewn\u0119trzne mo\u017cna r\u00f3wnie\u017c otwiera\u0107 z poziomu serwera, na przyk\u0142ad w odpowiedzi na akcj\u0119. W takim przypadku nale\u017cy u\u017cy\u0107 metody <em>startExternalApplication<\/em> z klasy <em>ApplicationManager<\/em>.<\/div><\/section>\n<h4 id=\"wyszukiwanie\" ><span class=\"ez-toc-section\" id=\"Wyszukiwanie\"><\/span>Wyszukiwanie<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Dla wszystkich warto\u015bci pomocniczych opartych na klasie <em>DefaultSearchManager<\/em> dost\u0119pny jest og\u00f3lny dialog wyszukiwania. Umo\u017cliwia on wyszukiwanie po nazwie, a w li\u015bcie wynik\u00f3w wy\u015bwietla znalezione rekordy wraz z ich identyfikacj\u0105, nazw\u0105 i ewentualnie znacznikiem usuwania. Atrybuty, kt\u00f3re s\u0105 brane pod uwag\u0119, s\u0105 automatycznie okre\u015blane na podstawie powi\u0105zanych metadanych. S\u0105 to dok\u0142adnie te atrybuty, kt\u00f3re w wyszukiwaniu OQL zosta\u0142y sklasyfikowane jako identyfikacja, nazwa lub znacznik usuwania.<\/p>\n<h4 id=\"kontenery\" ><span class=\"ez-toc-section\" id=\"Kontenery\"><\/span>Kontenery<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Jako elementy strukturalne mo\u017cna u\u017cywa\u0107 klas <em>View, GroupBox<\/em> i <em>Shelf<\/em>. Dost\u0119pne mened\u017cery uk\u0142adu to: <em>BorderLayout, BoxLayout<\/em> i <em>StandardLayout<\/em>. W przypadku <em>StandardLayout<\/em>, tre\u015b\u0107 jest zawsze uk\u0142adana w jednej kolumnie, niezale\u017cnie od rzeczywistej liczby kolumn. Ponadto, elementy z w\u0142a\u015bciwo\u015bci\u0105 <em>ReferenceConstraints<\/em>\u00a0s\u0105 ignorowane.<\/p>\n<section class=\"document-alert-box indicator\"><div class=\"document-alert-title\">Wskaz\u00f3wka<\/div><div class=\"document-alert-content\">Struktur\u0119 kontener\u00f3w mo\u017cna zdefiniowa\u0107 w trybie projektowania, co eliminuje potrzeb\u0119 programowania jej w aplikacji.<\/div><\/section>\n<h5 id=\"automatyczne-ukrywanie-pol-i-kontenerow\" ><span class=\"ez-toc-section\" id=\"Automatyczne_ukrywanie_pol_i_kontenerow\"><\/span>Automatyczne ukrywanie p\u00f3l i kontener\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>W celu poprawy czytelno\u015bci na ma\u0142ym ekranie, pola i inne elementy interfejsu u\u017cytkownika s\u0105 automatycznie usuwane, gdy s\u0105 wy\u0142\u0105czone lub puste i jednocze\u015bnie nieedytowalne. To zachowanie mo\u017ce by\u0107 propagowane w g\u00f3r\u0119 przez ca\u0142\u0105 struktur\u0119 kontener\u00f3w, co oznacza, \u017ce je\u015bli kontener nie zawiera \u017cadnych element\u00f3w lub zawiera tylko ukryte elementy, sam kontener r\u00f3wnie\u017c zostanie ukryty.<\/p>\n<h5 id=\"groupbox\" ><span class=\"ez-toc-section\" id=\"GroupBox\"><\/span>GroupBox<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p><em>GroupBoxy<\/em> (sekcje) r\u00f3\u017cni\u0105 si\u0119 wygl\u0105dem, ale ich zachowanie jest takie samo jak na komputerach stacjonarnych. Tytu\u0142 jest opcjonalny, a dzi\u0119ki odpowiednim odst\u0119pom i kolorystyce, nawet <em>GroupBoxy<\/em> bez tytu\u0142u mog\u0105 by\u0107 u\u017cywane do grupowania powi\u0105zanych informacji.<\/p>\n<p>Jednak\u017ce, zagnie\u017cd\u017canie <em>GroupBox\u00f3w<\/em> jest niewskazane, poniewa\u017c ich wizualizacja nie b\u0119dzie si\u0119 r\u00f3\u017cni\u0107 od dw\u00f3ch <em>GroupBox\u00f3w<\/em> umieszczonych jeden pod drugim. Zagnie\u017cd\u017canie <em>GroupBox\u00f3w<\/em> i <em>Shelfs<\/em> (lub odwrotnie) jest dopuszczalne w przypadku urz\u0105dze\u0144 mobilnych. Wi\u0119cej informacji na ten temat mo\u017cna znale\u017a\u0107 w kolejnej sekcji.<\/p>\n<h5 id=\"shelf\" ><span class=\"ez-toc-section\" id=\"Shelf\"><\/span>Shelf<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Zachowanie <em>Shelfs<\/em> (rozwijanych sekcji) na urz\u0105dzeniach mobilnych r\u00f3\u017cni si\u0119 od ich dzia\u0142ania na komputerach stacjonarnych. W kontenerze, do kt\u00f3rego dodano <em>Shelf<\/em>, widoczny jest tylko jego pasek tytu\u0142owy. Dopiero po dotkni\u0119ciu tego paska, w\u0142a\u015bciwa zawarto\u015b\u0107 <em>Shelf<\/em> staje si\u0119 widoczna, ale nie na bie\u017c\u0105cej stronie, lecz na osobnej stronie szczeg\u00f3\u0142owej. T\u0119 funkcjonalno\u015b\u0107 mo\u017cna rozpozna\u0107 po ma\u0142ej strza\u0142ce znajduj\u0105cej si\u0119 po prawej stronie. Na stronie szczeg\u00f3\u0142owej, tytu\u0142 <em>Shelf<\/em> pojawia si\u0119 jako tytu\u0142 na pasku nawigacyjnym, a dodatkowo pojawia si\u0119 przycisk <strong>[Wstecz]<\/strong>, kt\u00f3ry umo\u017cliwia u\u017cytkownikowi powr\u00f3t do poprzedniej strony.<\/p>\n<p>W zawarto\u015bci Shelfs mog\u0105 by\u0107 u\u017cywane nie tylko pola, ale r\u00f3wnie\u017c GroupBox i <em>Shelfs<\/em>. Umo\u017cliwia to elastyczne grupowanie tre\u015bci i hierarchiczne ich rozmieszczanie na r\u00f3\u017cnych stronach ekranu. Jednak\u017ce, nie nale\u017cy stosowa\u0107 zbyt g\u0142\u0119bokich hierarchii, poniewa\u017c z ka\u017cdym poziomem nawigacja staje si\u0119 dla u\u017cytkownika bardziej z\u0142o\u017cona.<\/p>\n<p>Do <em>Shelf<\/em> mo\u017cna doda\u0107 opcjonalny element <em>Header<\/em>. W przypadku urz\u0105dze\u0144 mobilnych jest on obs\u0142ugiwany tylko wtedy, gdy jest to <em>Label<\/em> z ikon\u0105. W takiej sytuacji ikona jest dodawana na pocz\u0105tku wiersza tytu\u0142owego.<\/p>\n<h5 id=\"tabbedpane\" ><span class=\"ez-toc-section\" id=\"TabbedPane\"><\/span>TabbedPane<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Karty nie s\u0105 obecnie obs\u0142ugiwane. Zamiast nich, poszczeg\u00f3lne karty s\u0105 wy\u015bwietlane jedna pod drug\u0105 jako sekcje (<em>GroupBoxes<\/em>). To uproszczone przedstawienie jest tymczasowe i nie nale\u017cy go celowo wykorzystywa\u0107.<\/p>\n<h4 id=\"listy\" ><span class=\"ez-toc-section\" id=\"Listy\"><\/span>Listy<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Obecnie obs\u0142uga list jest bardzo podstawowa. Obs\u0142ugiwane s\u0105 tylko listy w trybie <em>tylko do odczytu<\/em>. Mo\u017cna u\u017cywa\u0107 wy\u0142\u0105cznie prostych list typu <em>ListViews<\/em> (nie <em>ExtendedListViews<\/em>), a jako mened\u017cera uk\u0142adu nale\u017cy stosowa\u0107 <em>BoxLayout<\/em>. Nale\u017cy zachowa\u0107 ostro\u017cno\u015b\u0107 co do liczby rekord\u00f3w, poniewa\u017c brak jest przycisku paginacji (<i>PageButton<\/i>), a moc obliczeniowa i pami\u0119\u0107 operacyjna w urz\u0105dzeniach mobilnych s\u0105 ograniczone. Rozs\u0105dn\u0105 g\u00f3rn\u0105 granic\u0105 jest oko\u0142o 50 wierszy.<\/p>\n<h4 id=\"tabele\" ><span class=\"ez-toc-section\" id=\"Tabele\"><\/span>Tabele<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Obecnie obs\u0142uga tabel jest bardzo podstawowa. Obs\u0142ugiwane s\u0105 jedynie tabele w trybie <em>tylko do odczytu<\/em>, bez mo\u017cliwo\u015bci zaznaczania. Zaleca si\u0119, aby tabele nie mia\u0142y wi\u0119cej ni\u017c dwie lub trzy kolumny. Nie ma r\u00f3wnie\u017c gwarancji, \u017ce wszystkie typy p\u00f3l zostan\u0105 w nich poprawnie wy\u015bwietlone. Dlatego te\u017c, na chwil\u0119 obecn\u0105, zaleca si\u0119 unikanie stosowania tabel.<\/p>\n<h4 id=\"wykresy\" ><span class=\"ez-toc-section\" id=\"Wykresy\"><\/span>Wykresy<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Klasa <em>com.cisag.pgm.gui.Chart<\/em> umo\u017cliwia wstawianie wykres\u00f3w s\u0142upkowych i skumulowanych wykres\u00f3w s\u0142upkowych do interfejsu u\u017cytkownika. Dzia\u0142ania u\u017cytkownika, takie jak dotkni\u0119cie pojedynczego s\u0142upka na wykresie, mog\u0105 by\u0107 programowo analizowane. Mo\u017cna je wykorzysta\u0107 na przyk\u0142ad do wy\u015bwietlania dodatkowych, szczeg\u00f3\u0142owych informacji na temat danego s\u0142upka, na przyk\u0142ad w postaci kolejnego wykresu.<\/p>\n<section class=\"document-alert-box indicator\"><div class=\"document-alert-title\">Wskaz\u00f3wka<\/div><div class=\"document-alert-content\">Klasa <em>com.cisag.pgm.gui.Chart<\/em> mo\u017ce by\u0107 u\u017cywana tylko na urz\u0105dzeniach mobilnych. W standardowych aplikacjach dialogowych klasa ta zg\u0142asza wyj\u0105tek <em>UnsupportedOperationException<\/em>. Dlatego te\u017c, przed u\u017cyciem tej klasy, zawsze nale\u017cy sprawdzi\u0107 jej dost\u0119pno\u015b\u0107 na danej platformie za pomoc\u0105 statycznej metody <em>isSupported()<\/em>, a w razie potrzeby wybra\u0107 alternatywny spos\u00f3b wizualizacji danych.<\/div><\/section>\n<h4 id=\"nieobslugiwane-elementy\" ><span class=\"ez-toc-section\" id=\"Nieobslugiwane_elementy\"><\/span>Nieobs\u0142ugiwane elementy<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Nast\u0119puj\u0105ce elementy nie s\u0105 obecnie obs\u0142ugiwane:<\/p>\n<ul>\n<li>Grafika 2D (Canvas, Shapes, Strokes, \u2026)<\/li>\n<li>Header (tabela)<\/li>\n<li>ComboBox<\/li>\n<li>HTMLEditor<\/li>\n<li>ImageLabel<\/li>\n<li>LayeredPane<\/li>\n<li>LayeredIconField<\/li>\n<li>Menu (Menu, MenuBar, MenuManager, PoppupMenu)<\/li>\n<li>SearchView (Grid-Control)<\/li>\n<li>SmartButton<\/li>\n<li>SplitPane<\/li>\n<li>ToggleButtons<\/li>\n<li>TabbedPane<\/li>\n<li>Table<\/li>\n<li>Tree<\/li>\n<li>Upload (FileUploadElement)<\/li>\n<\/ul>\n<h4 id=\"nieobslugiwane-wlasciwosci\" ><span class=\"ez-toc-section\" id=\"Nieobslugiwane_wlasciwosci\"><\/span>Nieobs\u0142ugiwane w\u0142a\u015bciwo\u015bci<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Nast\u0119puj\u0105ce w\u0142a\u015bciwo\u015bci nie s\u0105 obecnie obs\u0142ugiwane:<\/p>\n<ul>\n<li>Pozycjonowanie absolutne (x, y)<\/li>\n<li>Accesskeys<\/li>\n<li>Background (Color)<\/li>\n<li>Border<\/li>\n<li>Pomoc kontekstowa<\/li>\n<li>Drag &amp; Drop<\/li>\n<li>Sterowanie fokusem<\/li>\n<li>Font<\/li>\n<li>Foreground (Color)<\/li>\n<li>Guides<\/li>\n<li>KeyEvents<\/li>\n<li>Margins (Insets)<\/li>\n<li>Preferowana szeroko\u015b\u0107\/wysoko\u015b\u0107, minimalna szeroko\u015b\u0107\/wysoko\u015b\u0107, maksymalna szeroko\u015b\u0107\/wysoko\u015b\u0107<\/li>\n<li>ReferenceConstraints<\/li>\n<li>Shortcuts<\/li>\n<li>TextAttribute<\/li>\n<li>Texture (Icon)<\/li>\n<li>ToolTips<\/li>\n<li>UIManager<\/li>\n<li>Warto\u015bci pomocnicze dla warto\u015bci dziesi\u0119tnych, dat oraz dokument\u00f3w\/folder\u00f3w<\/li>\n<li>Schowek<\/li>\n<\/ul>\n<h3 id=\"srodowisko-testowe\" ><span class=\"ez-toc-section\" id=\"Srodowisko_testowe\"><\/span>\u015arodowisko testowe<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Proste testy i prezentacje mo\u017cna przeprowadzi\u0107 za pomoc\u0105 przegl\u0105darki desktopowej opartej na silniku <em>WebKit<\/em>, takiej jak Google Chrome lub Safari. Infrastruktura rozpoznaje takie przegl\u0105darki i rysuje wok\u00f3\u0142 aplikacji ramk\u0119 w stylu iPhone&#8217;a. Pozwala to na wst\u0119pne oszacowanie proporcji i zajmowanej przestrzeni. Zmiana szeroko\u015bci okna umo\u017cliwia tak\u017ce symulacj\u0119 obracania urz\u0105dzenia.<\/p>\n<p>Testy na rzeczywistych urz\u0105dzeniach i w realnych warunkach pozostaj\u0105 jednak niezb\u0119dne, poniewa\u017c symulacja na komputerze stacjonarnym nie uwzgl\u0119dnia w pe\u0142ni kilku istotnych aspekt\u00f3w. Do test\u00f3w nale\u017cy u\u017cywa\u0107 zar\u00f3wno urz\u0105dze\u0144 z systemem iOS, jak i Android. Poni\u017csze kwestie powinny zosta\u0107 przetestowane na ka\u017cdym z urz\u0105dze\u0144:<\/p>\n<ul>\n<li><strong>Rzeczywista przestrze\u0144<\/strong> &#8212; uwzgl\u0119dnienie pask\u00f3w przegl\u0105darki, klawiatury ekranowej oraz rzeczywistych rozmiar\u00f3w element\u00f3w<\/li>\n<li><strong>Wydajno\u015b\u0107<\/strong> &#8212;\u00a0uwzgl\u0119dnienie procesora, przepustowo\u015bci i op\u00f3\u017anie\u0144 sieci<\/li>\n<li><strong>Ekran dotykowy<\/strong> &#8212; obs\u0142uga palcem, klawiatura ekranowa, przewijanie i sterowanie fokusem<\/li>\n<li><strong>Nawigacja\u00a0<\/strong>&#8212; nawigacja mi\u0119dzy aplikacjami<\/li>\n<\/ul>\n<h3 id=\"uwagi-techniczne\" ><span class=\"ez-toc-section\" id=\"Uwagi_techniczne\"><\/span>Uwagi techniczne<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4 id=\"obslugiwane-urzadzenia\" ><span class=\"ez-toc-section\" id=\"Obslugiwane_urzadzenia\"><\/span>Obs\u0142ugiwane urz\u0105dzenia<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Obs\u0142uga urz\u0105dze\u0144 mobilnych jest obecnie ograniczona do nast\u0119puj\u0105cych urz\u0105dze\u0144 i platform:<\/p>\n<ul>\n<li>iPhone (od 3GS, iOS 4.1 lub nowszy)<\/li>\n<li>Smartfony z Android 2.2 (lub nowszy)<\/li>\n<\/ul>\n<h5 id=\"iphone\" ><span class=\"ez-toc-section\" id=\"iPhone\"><\/span>iPhone<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<h6 id=\"ekran-glowny\" ><span class=\"ez-toc-section\" id=\"Ekran_glowny\"><\/span>Ekran g\u0142\u00f3wny<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Przegl\u0105darka (Safari) umo\u017cliwia zapisanie strony internetowej jako skr\u00f3tu na ekranie g\u0142\u00f3wnym. W tym celu na dolnym pasku narz\u0119dzi Safari znajduje si\u0119 przycisk<strong> [Dodaj]\u00a0<\/strong>(oznaczony jako +). W kolejnym wyskakuj\u0105cym okienku nale\u017cy wybra\u0107 przycisk <strong>[Do ekranu pocz\u0105tkowego]<\/strong>. Nast\u0119pnie pojawi si\u0119 dialog, w kt\u00f3rym mo\u017cna wprowadzi\u0107 lub zmieni\u0107 nazw\u0119 skr\u00f3tu. Po potwierdzeniu, skr\u00f3t z nazw\u0105 i ikon\u0105 (wygl\u0105dem przypominaj\u0105cy natywn\u0105 aplikacj\u0119) zostanie wy\u015bwietlony na ekranie g\u0142\u00f3wnym. Po uruchomieniu strony za pomoc\u0105 tego skr\u00f3tu, przegl\u0105darka ca\u0142kowicie ukrywa swoje w\u0142asne elementy steruj\u0105ce (pasek nawigacji i pasek narz\u0119dzi), dzi\u0119ki czemu ca\u0142a przestrze\u0144 ekranu jest dost\u0119pna dla strony internetowej.<\/p>\n<h6 id=\"dane-logowania\" ><span class=\"ez-toc-section\" id=\"Dane_logowania\"><\/span>Dane logowania<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>W testowanych wersjach iOS nie by\u0142o mo\u017cliwe zapisanie nazwy u\u017cytkownika i has\u0142a. Dlatego przy ka\u017cdym uruchomieniu wymagane jest ponowne wprowadzenie danych.<\/p>\n<h6 id=\"starsze-urzadzenia\" ><span class=\"ez-toc-section\" id=\"Starsze_urzadzenia\"><\/span>Starsze urz\u0105dzenia<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Na modelu 3G cz\u0119sto wyst\u0119puj\u0105 op\u00f3\u017anienia. W wersjach iOS starszych ni\u017c 4.1 wyst\u0119puj\u0105 r\u00f3wnie\u017c pewne b\u0142\u0119dy wy\u015bwietlania.<\/p>\n<h5 id=\"android\" ><span class=\"ez-toc-section\" id=\"Android\"><\/span>Android<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<h6 id=\"ekran-glowny\" ><span class=\"ez-toc-section\" id=\"Ekran_glowny-2\"><\/span>Ekran g\u0142\u00f3wny<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Na urz\u0105dzeniach z systemem Android istnieje mo\u017cliwo\u015b\u0107 umieszczenia skr\u00f3tu do strony na ekranie g\u0142\u00f3wnym, jednak jego wygl\u0105d zale\u017cy od interfejsu danego urz\u0105dzenia lub producenta. Niestety, po uruchomieniu strony za pomoc\u0105 tego skr\u00f3tu, przegl\u0105darka nadal wy\u015bwietla swoje w\u0142asne elementy steruj\u0105ce (pasek adresu).<\/p>\n<h6 id=\"interfejsy-specyficzne-dla-producenta\" ><span class=\"ez-toc-section\" id=\"Interfejsy_specyficzne_dla_producenta\"><\/span>Interfejsy specyficzne dla producenta<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Wytwarzane przez niekt\u00f3rych producent\u00f3w smartfony z systemem Android s\u0105 wyposa\u017cone we w\u0142asny interfejs i\/lub alternatywne klawiatury ekranowe. Te rozszerzenia mog\u0105 niestety prowadzi\u0107 do b\u0142\u0119d\u00f3w wy\u015bwietlania w przegl\u0105darce. Takie zachowanie zaobserwowano na przyk\u0142ad w przypadku urz\u0105dzenia <em>Desire<\/em> firmy HTC z interfejsem<em> Sense<\/em>. W tym urz\u0105dzeniu wyst\u0119puj\u0105 r\u00f3\u017cne problemy w interakcji przewijania i edytowania zawarto\u015bci p\u00f3l.<\/p>\n<h4 id=\"dostosowanie-ekranu\" ><span class=\"ez-toc-section\" id=\"Dostosowanie_ekranu\"><\/span>Dostosowanie ekranu<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Powierzchnia interfejsu dostosowuje si\u0119 automatycznie do szeroko\u015bci ekranu danego urz\u0105dzenia, co dotyczy r\u00f3wnie\u017c obracania urz\u0105dzenia z pionowej do poziomej orientacji. Zawarto\u015b\u0107 dla obu orientacji jest identyczna. R\u00f3\u017cnica polega jedynie na tym, \u017ce w orientacji poziomej jest wi\u0119cej miejsca na d\u0142ugie teksty, ale przewijanie w pionie staje si\u0119 konieczne szybciej. Ten rodzaj dostosowania ekranu dotyczy r\u00f3wnie\u017c tablet\u00f3w (iPad i Android).<\/p>\n<h4 id=\"sesje\" ><span class=\"ez-toc-section\" id=\"Sesje\"><\/span>Sesje<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Urz\u0105dzenia mobilne s\u0105 rozpoznawane przez infrastruktur\u0119 na podstawie nag\u0142\u00f3wka <em>User-Agent<\/em> ich przegl\u0105darki. Infrastruktura przypisuje urz\u0105dzeniom mobilnym specjalny typ sesji. Dla tych sesji obowi\u0105zuj\u0105 nast\u0119puj\u0105ce cechy szczeg\u00f3lne:<\/p>\n<ul>\n<li>Specjalny UI (dostosowany dla mobilnych przegl\u0105darek opartych na <em>WebKit<\/em>)<\/li>\n<li>Dla jednego u\u017cytkownika mo\u017cliwy jest tylko jeden aktywny login jednocze\u015bnie. Przy ponownym lub kolejnym po\u0142\u0105czeniu, istniej\u0105ca sesja jest albo przejmowana, albo automatycznie ko\u0144czona.<\/li>\n<li>Sesja jest utrzymywana przez serwer przez oko\u0142o godzin\u0119 w przypadku braku aktywno\u015bci. Dop\u00f3ki ten czas nie zostanie przekroczony, u\u017cytkownik mo\u017ce z \u0142atwo\u015bci\u0105 kontynuowa\u0107 swoj\u0105 prac\u0119 po przerwie lub zerwaniu po\u0142\u0105czenia.<\/li>\n<li>Dost\u0119p z urz\u0105dze\u0144 mobilnych musi by\u0107 wyra\u017anie dozwolony w panelu systemowym na zak\u0142adce <em>Przyporz\u0105dkowania u\u017cytkownika<\/em> dla typu <em>System<\/em><\/li>\n<\/ul>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Podczas dzia\u0142ania aplikacji typ sesji mo\u017cna odpyta\u0107 za pomoc\u0105 metody <em>getSessionType()<\/em> na klasie <em>CisEnvironment<\/em>.<\/div><\/section>\n","protected":false},"author":28,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"class_list":["post-9693","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-podreczniki-referencji"],"_links":{"self":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/9693","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb"}],"about":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/comments?post=9693"}],"version-history":[{"count":35,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/9693\/revisions"}],"predecessor-version":[{"id":37407,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/9693\/revisions\/37407"}],"wp:attachment":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/media?parent=9693"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}