"Niektórzy ludzie, kiedy napotkają problem, myślą: 'Wiem, użyję wyrażeń regularnych'.
I teraz mają dwa problemy."

Jamie Zawinski

wtorek, 30 listopada 2010

Dynamics AX: Mapa Google do sprawdzania lokalizacji odbiorców - tutorial cz. 2

W drugiej części tutoriala pokażę, jak zintegrować komponent Flash z systemem Microsoft Dynamics AX (przykład zademonstruję na wersji 4.0, ale z powodzeniem można go zastosować do nowszych wersji).

Jeśli pominąłeś część pierwszą, a chcesz zacząć od początku to zapraszam tutaj.


6. Rozpoczniemy od założenia w Dynamics AX nowego projektu i dodania do niego formularza Odbiorców (CustTable):


7. Do formularza odbiorców na zakładce "Adres" ( Tab=> TabAddress) dodajemy nową grupę - nazwijmy ją GoogleGroup. Następnie w grupie tej dodajemy komponent ActiveX i na liście dostępnych komponentów wybieramy Shockwave Flash Object (jeśli nie ma go na tej liście, musimy zadbać o to, żeby się tam znalazł :) )


8. Po potwierdzeniu informacji o bezpieczeństwie komponentu ActiveX, system dodaje go do drzewka. Teraz musimy wczytać w niego plik SWF, który jest wynikiem kompilacji aplikacji z poprzedniej części tutoriala. W tym celu w metodzie init na formularzu wstawiamy kod nie zapominając o zastąpieniu ścieżki do pliku *.swf:

ActiveX.LoadMovie(0, @"C:\dokumenty\flex\projects\GoogleMapsFlex4\bin\GoogleMapsFlex4.swf");
ActiveX.GotoFrame(1); 

Jeśli wszystko przebiegło pomyślnie wynikiem działania powinno być okienko mapy na formularzu Odbiorców w zakładce Adres:


9. Jak widać domyślnie wyświetlanym adresem jest Warszawa, al. Jerozolimskie - z aplikacji Flexowej należy usunąć kod wstawiony w poprzedniej części do celów testowych. Zmniejsza to niepotrzebnie limit ilości geokodowań. Z tego też tytułu zamiast automatycznie wczytywać mapę dla każdego klienta wraz z każdym rekordem (ActiveRecord), użyjemy przycisku do odszukiwania adresu. Przycisk najlepiej dodać w tej samej grupie. W metodzie clicked wstawiamy następujący kod:

void clicked()
{
    super();
    ActiveX.CallFunction(strfmt("<invoke name=\"doGeocode\" returntype=\"xml\"><arguments><string>%1</string></arguments></invoke>",custTable.Address));
}

Wywoływana jest tutaj funkcja doGeocode i przekazywany jest do niej adres. Argumentem funkcji CallFunction jest łańcuch znaków w postaci XML.

Próba generalna kończy się jednak błędem:

a wszystko przez to, ze w projekcie Flexowym brakuje "uzewnętrznienia" metody doGeocode. W celu publikacji tej metody należy w metodzie init dodać linijkę kodu:

ExternalInterface.addCallback("doGeocode", doGeocode);

Działa! :)

Podsumowanie


Jak widać wstawienie interesującego komponentu Flash do AX jest banalnie proste. Tak zbudowaną aplikację opartą o integrację z Flashem można oczywiście rozbudowywać, np. o zwracanie współrzędnych geograficznych do tabeli CustTable i wyświetlanie adresu z pominięciem geokodowania, na który jest limit. Można też wykorzystać Flasha do urozmaicenia Dynamicsa o efektowne komponenty np. wykresy Gantta, kalendarze itp. Może macie jakieś pomysły? Czekam na komentarze.

Zainteresowanych przeglądem możliwości komponentów w technologii Flex zapraszam na http://www.adobe.com/devnet-apps/flex/tourdeflex/web/

Brak komentarzy:

Prześlij komentarz