Trafiłem ostatnio na dość dziwny problem. Potrzebowałem mianowicie wysłać z poziomu Flexa dane formularza, które po stronie serwera zostałyby odebrane przez PHP (lub inny język server-side).
Jednak cały kłopot polegał na tym, że:
dane te miały wykorzystać istniejący już kod obsługiwany przez formularz w HTML’u – czyli niejako miałem się podszyć pod zwykłą stronę www, nie wykorzystując żadnych udogodnień typu AMF, Webservice czy RemoteObject,
chciałem wysłać jednocześnie dane tekstowe (np. dane rejestracyjne) oraz binarne (np. obrazki JPG), bez limitu ilości,
obrazki nie były pobierane z dysku użytkownika przez FileReference.browse, ale tworzone w locie jako zrzuty komponentów przez ImageSnapshot i trzymane w pamięci w zmiennych typu ByteArray.
Jedyne co udało mi się znaleźć to artykuł na blogu Neer’a Friedman’a i jego projekt na Google Code. Był to dobry początek do zmian…
BTW: niejaki Mike Stead, którego komentarz widnieje pod wpisem Neer’a też zajmował się tym problemem i zdaje się, że nawet go jakoś elegancko rozwiązał, jednak jego stronka padła kompletnie i nie ma jej nawet w Google Cache…
Wywaliłem kod odpowiedzialny za używanie Socketów zamieniając go na zwykłego URLLoader’a oraz troche zrefaktoryzowałem kod (uporzadkowałem). Tym sposobem pojawiła się biblioteka MultipartRequestLoader
private function init():void { loader = new MultipartRequestLoader('http://flex.imrahil.com/work/multipart_loader/upload.php'); var variables:MultipartVariables = new MultipartVariables(); var myByteArray:ByteArray = new ByteArray();
// we will create a fake file content here, you should replace this with the binary data you want to upload for(var i:int=0; i<100;i++) { myByteArray.writeUTFBytes("123by\nAR\r\nRA\x65\x0156"); }
W zasadzie jest to ten sam build (3.4.0.9271) tyle tylko, że dorzucono do niego paczkę z komponentami do wykresów (Flex Data Visualization Component) w tejże wersji.
Największe zaskoczenie jednak to fakt, że paczka z wykresami zawiera kod źródłowy oraz nie ma klasy odpowiedzialnej za watermarki! Ok, wcześniej można było rozpakować kod źródłowy posiadając klucz licencyjny do Flex Buildera, ale brak watermarków to całkowita nowość. Teraz każdy może robić wykresy czy używać AdvancedDataGrid bez żadnych problemów.
nową wersję Adobe AIR 1.5.2 – zmiany wyłącznie kosmetyczne. Zdaje się, że zmienili tylko ekran instalacyjny tak, że już nie straszy komunikatem o zagrożeniach jakie stanowi instalowana aplikacja… Edit:pełne release notes dla developerów
Czas na stworzenie prostej aplikacji wykorzystującej Jave (BlazeDS) i Flex w jednym projekcie Flex Buildera. Będzie to klasyczne “Hello World”
Wymagane oprogramowanie:
Flex Builder 3.0.2 – dostępny do ściągnięcia w wersji trial ze stron Adobe lub w specjalnej wersji dla studentów lub bezrobotnych programistów ze strony Free RIA Tools,
BlazeDS 3.2.0.3978 – dostępny na stronach Adobe Open Source (jest to wersja z samymi binariami – dostępna jest także wersja z zintegrowanym Tomcatem) – rozpakowujemy w dowolne miejsce, np.: C:\Work\BlazeDS
Chciałbym przedstawić w jaki sposób można przygotować środowisko deweloperskie Flex Builder do kodowania Flex + Java. Chodzi oto, żeby móc tworzyć jednocześnie część aplikacji widoczną dla użytkownika (frontend) jak i backend, czyli kod Javy odpowiedzialny np.: za komunikację z bazami danych i obróbkę tych danych.
Uwaga! Poniższy sposób tworzenia aplikacji sprawdza się tylko w przypadku kodowania przez jedną osobę.
Kod Javy będzie docelowo wykorzystywał BlazeDS/LiveCycle Data Services – będzie to jednak zagadnieniem następnego tutoriala.
Wymagane oprogramowanie: Flex Builder 3.0.2 – dostępny do ściągnięcia w wersji trial ze stron Adobe lub w specjalnej wersji dla studentów lub bezrobotnych programistów ze strony Free RIA Tools.
Uwaga! Pojawił się chyba pierwszy duży projekt AIR‘owy w Polsce!. Ministerstwo Finansów zdecydowało się stworzyć aplikację do wypełniania PIT’ów-37 w technologii Adobe AIR. Do ściągnięcia ze strony www.e-deklaracje.gov.pl.
Wielkość tego projektu to jednak nie złożoność aplikacji (bo całość wypełniania i obliczeń opiera się o interaktywny formularz PDF), ale jego nadchodząca popularność. Już widzę, jak w statystykach wystrzelą słupki popularności środowiska Adobe AIR w Polsce
Appka oprócz rozliczeniowego PDF’a dodaje kilka możliwości “desktopowych”, czyli zapisywanie wersji roboczych na dysk, śledzenie statusu wysłanego rozliczenia czy z detali: kontrolę aktywności połączenia internetowego lub uruchamianie na starcie systemu.
Przydałby się jeszcze tylko lepszy system pomocy, bo ten aktualny to po prostu wielgachny PDF w którym na 30 stronach opisana jest cała aplikacja. Dla normalnego użytkownika jest to całkowicie nie do ogarnięcia…
Instalator aplikacji:
(aplikacja jest cyfrowo podpisana przez MF więc proszę się nie bać o jakieś wałki z mojej strony… )
Instalator wymaga zainstalowanej wtyczki Flash Player w wersji minimalnej 9.0.115
Lupo Flex Localization Studio będzie to narzędzie składające się z dwóch modułów z których każdy ułatwiać będzie:
Lupo Manager – proces tworzenia lokalizacji podczas pisania aplikacji, czyli: zamianę tekstów na odnośniki do resourceManager’a, dodawanie nowych jezyków, czy generowanie potrzebnego kodu AS/MXML
Lupo Translator – proces tłumaczenia kolejnych tekstów aplikacji na różne języki, coś na kształt Poedit dla plików *.po/*.mo
Niestety nie ma narazie możliwości ściągnięcia instalki Lupo ani zarejestrowania się do programu beta-testów….
Co wybrać? AMFPHP, ZendAmf, WebOrb for PHP czy może SabreAMF? A może wogóle język inny niż PHP?
Pytanie na które ciężko ostanim czasy znaleźć dobrą odpowiedź. Żeby choć trochę ułatwić sprawę polecam sprawne porównanie istniejących rozwiązań dla PHP opublikowane przez Mihai Corlan’a.
Dodatkowo dodam, że w dniu dzisiejszym pojawił się update (do wersji 1.7.8) biblioteki ZendAMF – więcej info na blogu Wade’a Arnolda, a kod można ściągnąć ze stron Zend Frameworka.