integracja aplikacji opartych n Nieznany

background image

V Konferencja PLOUG
Zakopane
Październik 1999

Integracja aplikacji opartych na Forms 5.0 z narzędziem

do prezentowania map – MapInfo Professional

Tomasz Ostrowski

Tomasz.Ostrowski@itti.com.pl

Instytut Technik Telekomunikacyjnych i Informatycznych, Poznań

Autor

Absolwent Akademii Techniczno-Rolniczej w Bydgoszczy. Od roku członek Zespołu Systemów
Informatycznych i Multimediów, Instytutu Technik Telekomunikacyjnych i Informatycznych w Poznaniu.

Streszczenie

MapInfo jest popularnym programem do prezentowania i przetwarzania danych geograficznych. ITTI
w ramach realizacji systemu informatycznego do zarządzania firmą opracowało technikę integracji MapInfo
Professional z aplikacjami stworzonymi przy użyciu Forms 5.0. Prezentowane rozwiązanie opiera się
specjalne do tego celu zaprojektowanym komponencie ActiveX wykorzystującym możliwości serwera OLE
udostępniane przez MapInfo od wersji 4.0. W efekcie - użytkownik za pośrednictwem aplikacji zarządzania
może przeglądać, modyfikować, drukować mapy oraz wykonać na nich szereg operacji specyficznych dla
wzmiankowanego systemu zarządzania. Wiele firm i instytucji w Polsce używa już MapInfo do różnych
celów i zapewne byłyby zainteresowane wykorzystaniem jego możliwości z poziomu innych aplikacji.

background image

2

1. Wstęp

Autor niniejszego artykułu miał przyjemność uczestniczyć w pracach nad tworzeniem systemu do

zarządzania wynajmem tablic ogłoszeniowych dedykowanego firmie o ogólnopolskim zasięgu. Powstający

system miał stanowić jednolitą platformę realizującą funkcje spełniane wcześniej przez osiem różnych

aplikacji oraz udostępniać nowe funkcje wyspecyfikowane przez klienta. Do wizualizacji położenia tablic

ogłoszeniowych na planach miast klient używał programu MapInfo Professional (w chwili rozpoczęcia prac

nad systemem w użyciu były wersje 3.0 i 4.0 programu). Nowy system miał przejąć między innymi funkcje

MapInfo. Rdzeń systemu miał być oparty na rozwiązaniach firmy Oracle. Dane przechowuje centralna baza

danych (System Zarządzania Bazą Danych Oracle 8.0.5), do których dostęp jest realizowany za pomocą

aplikacji klienckiej stworzonej w środowisku Developer/2000. Do opracowania aplikacji użyto Oracle Forms

5.0. Aplikacje tworzone z użyciem Oracle Forms 5.0 mogą zostać wyposażone w zdolność współpracy z

komponentami ActiveX. Aplikacja taka może też być klientem OLE.

Jako ogniwo pośredniczące w komunikacji między aplikacją a MapInfo Professional wykorzystano

komponent ActiveX własnej produkcji. Jakkolwiek wspomniany komponent powstał na potrzeby

konkretnego systemu – zaprojektowano go tak aby można go było w przyszłości wykorzystać w innych

aplikacjach.

2. Opis rozwiązania

Prezentowane rozwiązanie jest oparte na technologii OLE. MapInfo Professional oferuje możliwości

serwera OLE od wersji 4.0. Pakiet udostępnia jeden obiekt OLE, który może zostać wykorzystany do

sterowania MapInfo z innej aplikacji zgodnej z OLE. Producent MapInfo proponuje pakiet w dwóch

wersjach: wersja pełna sprzedawana pod nazwą MapInfo Professional (jest to w pełni wyposażona aplikacja

dla MS Windows), oraz wersja MapInfo Runtime – obejmująca wszystkie funkcje oferowane przez pełną

wersję, ale całkowicie pozbawiona interfejsu graficznego (wersja Runtime jest dedykowana właśnie

systemom nastawionym na wykorzystanie możliwości MapInfo, które realizują własny interfejs użytkownika

lepiej przystosowany do potrzeb klienta). Zastosowanie wersji Runtime pozwoliłoby na obniżenie kosztów

systemu (koszt MapInfo przypadający na jedno stanowisko jest ponad 2-krotnie niższy przy zastosowaniu

wersji Runtime).

Dzięki temu że zdecydowano się na integrację systemu z MapInfo w oparciu o technologię OLE, uzyskano

następujące korzyści:

• Pełna integracja systemu z MapInfo. Aplikacja kliencka systemu udostępnia możliwość przeglądania i

modyfikowania map wprost w oknie aplikacji (oczywiście przetwarzanie map jest realizowane przez

MapInfo, ale pozostaje ono „aktorem poza sceną”). Jest to wykorzystanie idei Visual Editing leżącej u

podstaw OLE.

• Użytkownicy systemu w firmie klienta nie muszą zmieniać przyzwyczajeń, nawigowanie w oknie

udostępniającym funkcje MapInfo jest zbliżone do pracy z MapInfo.

background image

3

• Dzięki integracji system udostępnia nowe funkcje, których samo MapInfo nie realizuje (są to np. funkcje

realizujące powtarzalne, czasochłonne sekwencje czynności, funkcje prezentujące na mapach obiekty

wybrane z bazy danych według dowolnych kryteriów itd.

• Zastosowanie MapInfo pozwala na bezbolesne przejście od jednego systemu do drugiego – używane

przed wprowadzeniem nowego systemu mapy mogą zostać wykorzystane wprost w nowym systemie

(nie jest wymagana żadna konwersja ani inne modyfikacje map, ponieważ obowiązek przetwarzania map

nadal spoczywa na MapInfo, chociaż pośrednikiem jest nowa aplikacja)

Dzięki temu że MapInfo jako serwer OLE udostępnia praktycznie wszystkie swoje możliwości klientom

OLE – nie było ryzyka że nie uda się usatysfakcjonować klienta jeśli nie udałoby się zrealizować wszystkich

funkcji MapInfo.

3. Komponent MapiX

MapiX jest komponentem ActiveX umożliwiającym wykorzystanie możliwości MapInfo Professional

(w wersji 4.0 lub późniejszej) przez dowolną aplikację która może być klientem OLE. Początkowo zakładano

wykorzystanie możliwości MapInfo Professional bezpośrednio z klienta Forms 5.0 (aplikacje Forms mogą

być klientami OLE). W fazie projektowania rozwiązania okazało się, że korzystne byłoby wykorzystanie

przewidzianej przez producenta MapInfo możliwości definiowania narzędzi użytkownika. Technika narzędzi

użytkownika w MapInfo opiera się na tzw. OLE Callbacks. Definiowanie narzędzia użytkownika składa się z

dwóch kroków:

1. Rejestracja interfejsu IDispatch, który będzie otrzymywał powiadomienia o zdarzeniach

powodowanych przez użytkownika. Dla implementacji MapiX interesujące było tylko jedno

zdarzenie „użyto narzędzia użytkownika”. W każdej chwili MapInfo pozwala na zarejestrowanie

najwyżej jednego takiego interfejsu.

2. Właściwa rejestracja narzędzia użytkownika. MapInfo pozwala na obsłużenie narzędzia

użytkownika przez inną aplikację. Składnia definicji narzędzia użytkownika obejmuje m. in.:

• Nazwę metody która ma zostać wywołana jeśli użytkownik użyje narzędzia. Między innymi można

zażądać, żeby użycie narzędzia powodowało wywołanie OLE Callback – w takim razie kiedy

narzędzie zostanie użyte MapInfo podejmie próbę wywołania metody o podanej nazwie z interfejsu

zarejestrowanego w punkcie 1.

• Tryb rysowania (np. linia, okrąg, punkt)
• Typ kursora skojarzonego z narzędziem

background image

4

Obiekt MapInfo.Application

Komponent MapiX

Klient OLE

Metody (interfejs IMapInfo)

OLE Callbacks

Metody (interfejs DMapiX)

Zdarzenia komponentu

Rys. 1 Komunikacja między aplikacją Forms a obiektem MapInfo.Application

Jak powiedziano wyżej – aby obsłużyć narzędzie użytkownika MapInfo, trzeba zarejestrować interfejs

IDispatch przez który MapInfo prześle powiadomienia o zdarzeniach drogą wywoływania metod interfejsu.

Aplikacja która udostępnia interfejs IDispatch jest serwerem OLE. Niestety aplikacje oparte na Forms 5.0 nie

mają takich możliwości. Oznacza to, że przy wykorzystaniu MapInfo jako serwera OLE bezpośrednio z

klienta Forms 5.0 możliwa byłaby komunikacja tylko w jedną stronę (wywoływanie metod udostępnianych

przez interfejs

IMapInfo

). Aby umożliwić wykorzystanie techniki narzędzi użytkownika zdecydowano się

zastosować komponent ActiveX. Aplikacje stworzone w Forms 5.0 mogą być kontenerami OLE (to znaczy –

można w nich osadzać obiekty ActiveX). Kontener OLE może wywoływać metody komponentu, ma dostęp

do jego własności oraz, co ma szczególne znaczenie z punktu widzenia prezentowanego rozwiązania, może

obsługiwać zdarzenia generowane przez komponent. Z kolei komponent ActiveX z definicji jest serwerem

OLE, to znaczy może udostępniać metody przez interfejs IDispatch.

Wobec powyższego – możliwe jest zrealizowanie dwustronnej komunikacji z wykorzystaniem

komponentu pośredniczącego ActiveX.

Ostatecznie rozwiązanie oparto o komponent ActiveX owijający funkcje MapInfo. Komponent

otrzymał nazwę MapiX. MapiX w szerokim zakresie wykorzystuje technikę określaną w specyfikacji COM

jako containment/delegation (zawieranie/delegacja) – wiele z funkcji komponentu sprowadza się do

przekazywania wywołań bez żadnej obróbki do obiektu MapInfo.Application. Komponent wykorzystuje też

aktywację in-place – udostępnia powierzchnię swojego okna tak, że MapInfo może wyświetlać na niej obraz

mapy.

Komponenty ActiveX (zwane dawniej OLE controls) stanowią przykład elastyczności standardu COM.

Są to autonomiczne kontrolki oparte na standardzie COM których idea powstała długo po wejściu tego

standardu w wiek dojrzały. Technologia ActiveX stanowi przedłużenie i rozwinięcie technologii Visual

Basic Controls (VBX). Metody i właściwości wspomnianych komponentów są udostępniane przez interfejsy

zgodne ze standardem COM. Komponent ActiveX może działać tylko wyłącznie w kontekście innej

aplikacji. Aplikacja taka dla celów komunikacji z komponentem utrzymuje tzw. kontener OLE, w którym

zostanie umieszczony komponent ActiveX. Za pośrednictwem kontenera aplikacja uzyskuje dostęp do

background image

5

własności komponentu (odzwierciedlających jego stan) a także może wywoływać jego metody udostępniane

za pośrednictwem (często wielu) interfejsów. Technologia ActiveX jest rozwijana od przełomu lat 1995/96 i

nierozerwalnie wiąże się z Internetem. W ramach ActiveX zdefiniowano takie pojęcia jak dokumenty

złożone (compound documents), Automation, itd.

4. Zalety technologii COM na przykładzie prezentowanego

komponentu

Komponent MapiX pokazuje jedną z podstawowych zalet technologii opartych na COM –

skomplikowany obiekt realizujący przetwarzanie map stworzony przez jednego producenta

(MapInfo.Application) współpracuje z aplikacją stworzoną za pomocą narzędzi innego producenta (Oracle

Forms 4.5), zaś pośredniczeniem w tej współpracy zajmuje się komponent stworzony przez autora niniejszej

pracy. Z powyższego widać że COM oraz technologie na nim oparte (między innymi OLE – w przypadku

prezentowanego rozwiązania) zapewniają możliwość korzystania w jednolity sposób z usług obiektów

niekoniecznie stworzonych przez jednego producenta. Wobec tego – jeśli zachodzi potrzeba wzbogacenia

oprogramowania o nowe funkcje – można to uczynić nabywając gotowe obiekty innego producenta które

realizują te funkcje. Korzyść jest obustronna – potencjalni nabywcy komponentów rozwijanych w oparciu o

standard zyskują możliwość bardzo łatwego rozszerzania swoich produktów, zaś producentom łatwiej jest

sprzedać komponenty, jeśli sposób korzystania z ich usług jest przemysłowym standardem. Standard

rozwiązuje także problem wersji – zastrzegając że nowa wersja komponentu zawsze musi zachowywać

zgodność ze starą; wprowadzanie nowej wersji komponentu wiąże się na ogół z dodaniem nowych

interfejsów do komponentu – modyfikacje interfejsu obiektu takie jak zmiana porządku metod, czy usunięcie

metody są niedozwolone. Z punktu widzenia producentów komponentów COM i pochodne technologie mają

tę zaletę, że komponenty COM są dystrybuowane w postaci binarnej (COM definiuje binarny standard

zgodności komponentów), bez kodu źródłowego co automatycznie rozwiązuje problem własności

intelektualnej (nie ma możliwości bezprawnego użycia kodu źródłowego komponentu – nie ma potrzeby

rozprowadzania kodu źródłowego z komponentem). COM jest standardem o ustalonej pozycji i bardzo

dużym stopniu penetracji rynku produktów dla MS Windows. Wszystkie liczące się aplikacje dla MS

Windows opierają się na OLE. Duże aplikacje są projektowane jako szereg niezależnych komponentów

(aplikacje w rodzaju MS Word rejestrują kilkanaście obiektów OLE, mniejsze aplikacje typowo rejestrują

jeden obiekt zwany Application – tak jest w przypadku MapInfo), zarządzanych przez główną aplikację.

COM stanowi model programowania obiektowego dedykowany współdziałaniu oprogramowania, to

znaczy: umożliwia on dwóm lub więcej aplikacjom (komponentom) łatwą współpracę nawet jeśli zostały one

stworzone w przez różnych producentów, w różnym czasie, w różnych językach programowania a nawet dla

różnych systemów operacyjnych. Aby umożliwić taką współpracę w ramach COM zdefiniowano i

zrealizowano mechanizmy które pozwalają aplikacjom komunikować się z innymi aplikacjami traktowanymi

jako obiekty (specyfikacja COM używa pojęcia software objects). Obiekt w rozumieniu COM jest określony

przez funkcje które może realizować oraz przez stan (struktura danych związana z obiektem). Innymi słowy

– COM, podobnie jak API w tradycyjnych systemach, dostarcza funkcji za pomocą których odbiorca jakiejś

usługi (klient) może nawiązać połączenie z dostawcą (dostawcami) usług (szczegóły implementacyjne usługi

background image

6

są niejawne dla klienta – istotne jest tylko aby w ramach usługi klient otrzymał dokładnie to czego się

spodziewa, bez względu na to w jaki sposób zostanie ona zrealizowana). Inaczej niż w tradycyjnych

systemach – w chwili kiedy połączenie zostało już nawiązane rola COM się kończy. COM umożliwia

połączenie klienta i obiektu świadczącego usługę, ale kiedy połączenie już istnieje klient i usługodawca

komunikują się bezpośrednio bez pośrednictwa centralnego API.

Jak wiele współczesnych technologii COM opiera się na modelu klient-serwer. Przez

klienta w tym kontekście należy rozumieć aplikację korzystającą z usługi dostarczanej przez obiekt COM. Z

kolei usługodawcę określa się jako serwer COM. Na ogół obiekty COM w zależności od doraźnych potrzeb

spełniają na przemian rolę klienta lub serwera COM.

Intencją przyświecającą tworzeniu COM było zapewnienie zbioru technologii umożliwiających

budowanie niezawodnych grup usług zarówno w systemach jak w aplikacjach przy założeniu że tak usługi

jak i usługobiorcy (klienci) mogą zmieniać się w czasie. Wobec tego COM sprawia, że tworzenie, używanie

oraz ewolucja odbywająca się bez koordynacji (tj. np. bez porozumień między producentami

oprogramowania) obiektów są możliwe. Celem COM nie było stworzenie modelu programowania, który

sprawiłby że programowanie stałoby się znacznie prostsze – w istocie niektóre ostre wymagania nałożone na

model sprawiają, że może wydawać się on złożony. Z drugiej strony COM stanowi podstawę dla rozszerzeń

zorientowanych na łatwość użycia, bazę dla przyjaznych środowisk tworzenia oprogramowania, itd.

Budowa oprogramowania w oparciu o komponenty oparte na standardzie COM umożliwia między

innymi osiągnięcie następujących korzyści:

Ö

modularna struktura oprogramowania umożliwia łatwą rozbudowę (dodawanie nowych funkcji) a także

modyfikowanie starych funkcji

Ö

unifikacja sposobów komunikacji między komponentami czyni integrację niezależnych produktów

realną

Ö

wykorzystanie gotowych, dostępnych komercyjnie rozwiązań jest na ogół bardziej opłacalne niż

rozwijanie wszystkich niezbędnych dla aplikacji modułów własnymi siłami (znikają koszty

wyczerpującego projektowania i testowania modułów oprogramowania)

Ö

nie ma znaczenia w jakich językach programowania zostały stworzone moduły składające się na

aplikację

COM nie stanowi środowiska rozwijania aplikacji. Został pomyślany jako architektura umożliwiająca

integrację usług świadczonych przez obiektowe oprogramowanie. Aplikacja stworzona w zgodzie ze

standardem może korzystać z niemałego już potencjału komponentów opartych na standardzie. Oracle Form

Builder 5.0 oferuje częściową zgodność ze standardem COM. Aplikacje stworzone przy użyciu Form Builder

mogą być klientami COM – nie mogą spełniać funkcji serwerów. Niniejszy artykuł opisuje rozwiązanie

umożliwiające zniesienie ograniczeń wynikających z ograniczenia możliwości aplikacji Forms do klienta

OLE.

Każda z usług COM jest dostarczana przez konkretną aplikację zwaną serwerem. Usługa angażuje

przynajmniej jeden komponent COM. Przykładami obiektów COM są Word.Basic (związany z Microsoft

background image

7

Word) oraz MapInfo.Application, z tym ostatnim współpracuje komponent MapiX. Logicznie powiązane

metody i własności są organizowane w grupy zwane interfejsami. Komunikacja pomiędzy obiektami odbywa

się wyłącznie za pośrednictwem interfejsów. Interfejs COM jest niezależny od szczegółów

implementacyjnych obiektu COM. Standard gwarantuje, że zmiana implementacji obiektu (dodanie nowych

cech czy też ulepszenie istniejących metod) może nastąpić tylko na zasadzie zachowania kompatybilności w

dół (to znaczy: aplikacje i komponenty przystosowane do współpracy ze starszą wersją będą funkcjonować

nadal bez przeszkód). W ramach standardu definiuje się pojęcie kontraktu – usługobiorca spodziewa się

określonego zachowania po usługodawcy, to zaś w jaki sposób usługa zostanie wykonana (szczegóły

implementacyjne) nie jest mu znane i nie stanowi przedmiotu kontraktu. Zarejestrowanie obiektu COM w

systemie (odzwierciedlone w rejestrze systemowym) jest jednoznaczne z ogłoszeniem dostępności usługi

oferowanej przez obiekt.

5. MapiX w akcji

Opisywany komponent z powodzeniem został zastosowany w aplikacji opracowanej przez ITTI na

potrzeby firmy o ogólnopolskim zasięgu zajmującej się reklamą zewnętrzną. Implementacja obejmuje dwie

grupy funkcji:

I. Proste funkcje MapInfo

W tej grupie plasują się funkcje które mają za zadanie umożliwić programiście opierającemu swoją

aplikację na MapiX dostęp do komend z menu MapInfo. Komponent w aktualnej wersji nie obejmuje

wszystkich komend z menu MapInfo, lecz ich podzbiór określony autorytatywnie przez autora niniejszej

pracy. Nie ma technicznych przeszkód aby komponent realizował wszystkie funkcje - wywołanie

funkcji z menu MapInfo polega bowiem na wywołaniu metody

IMapInfo::RunMenuCommand

z

argumentem identyfikującym pożądaną metodę.

background image

8

Rys. 2 Przykład zastosowania komponentu. Widoczne okno z mapą oraz okno podglądu wydruku (w

tle)

II. Funkcje złożone

Do tej grupy należą np. funkcje mające na celu automatyzację żmudnych, powtarzalnych czynności,

oraz te funkcje które wykorzystują dane pobrane z bazy danych.

Przykładem zastosowania funkcji złożonych jest następujący scenariusz: użytkownik wykorzystując

mechanizmy typowe dla Forms dokonuje selekcji obiektów (w przypadku wspomnianej aplikacji są to

tablice ogłoszeniowe), po czym za jednym naciśnięciem klawisza przechodzi do formularza z mapą na

której wybrane obiekty zostaną automatycznie podświetlone. Jeśli wybrane obiekty są związane z

wieloma mapami – istnieje możliwość wygodnego wybrania mapy spośród tych na których odwzorowano

wybrane obiekty. Opisany proces może przebiegać także w drugą stronę, tzn. po dokonaniu wyboru

obiektów na mapie można przejść do formularza prezentującego szczegółowe informacje o tych

obiektach.

background image

9

Rys. 3 Przykład prezentacji danych: formularz z danymi obiektów i ich położenie na mapie

Inny przykład to automatyczne przygotowanie map tematycznych. Mapy w reprezentacji MapInfo

mają strukturę warstwową, typowa mapa w systemie składa się z czterech lub pięciu warstw. Przyjęto, że

obiekty klienta zawsze skupione są w jednej warstwie. System przewiduje możliwość tworzenia na

podstawie map zawierających np. wszystkie obiekty użytkownika w pewnym mieście warstw, które

zawierają obiekty dobrane podług określonych kryteriów. Tak przygotowana mapa może zawierać

dowolny podzbiór obiektów, co stwarza możliwość wygodnego przygotowania danych do prezentacji.

6. Podsumowanie

Integracja typowych mechanizmów aplikacji nad bazą danych takich jak wybór obiektów według

szeregu warunków z możliwościami wizualnej prezentacji danych oferowanymi przez MapInfo stwarza

nowe możliwości dla użytkowników systemu. W firmie dla której powstał opisywany system jak dotąd

używano MapInfo w oderwaniu od danych przechowywanych w bazie danych. Kontrola spójności

danych nie istniała, dane dotyczące obiektów (adres i inne atrybuty) wprowadzano dwukrotnie – raz do

bazy danych i raz przy umieszczaniu punktu oznaczającego punkt na mapie. Nowy system eliminuje

opisane niedogodności, wprowadzając dodatkowe możliwości związane z automatyzacją niektórych prac.

Zamiast kilku wysp oprogramowania (MapInfo, stara baza danych) między którymi komunikacja prawie

nie istniała – powstał jeden system, który mam nadzieję ułatwi życie swoim użytkownikom.


Wyszukiwarka

Podobne podstrony:
05 Komunikacja aplikacji z ser Nieznany
2008 06 Java Microedition – metody integracji aplikacji [Inzynieria Oprogramowania]
Integralnosc konstrukcji kolokw Nieznany
2 1 Idee integracji 3 4id 1985 Nieznany (2)
Jezyk XML w aplikacjach z bazam Nieznany
integracja id 218002 Nieznany
Projektant aplikacji multimedia Nieznany
Idea integracji spolecznej osob Nieznany
Operator aplikacji komputerowyc Nieznany
05 Komunikacja aplikacji z ser Nieznany
Tworzenie mobilnych aplikacji opartych o Adobe Flex
Wskazówki dotyczące integrowania aplikacji Matlaba z C
integracyjne procenty id 218148 Nieznany
integracja sensoryczna5 id 2181 Nieznany
Aplikacyjna mapa wiedzy id 6708 Nieznany (2)

więcej podobnych podstron