Magic eDeveloper Piotr Zawadzki konsultant Magic Komtech Sp. z o.o.
Plan prezentacji Wprowadzenie do Magic eDeveloper Obszary zastosowań Obsługiwane platformy i bazy danych Proces tworzenia aplikacji Komponenty Serwer aplikacji Podsumowanie Live Demo Wprowadzenie do Magic eDeveloper Obszary zastosowań Obsługiwane platformy i bazy danych Proces tworzenia aplikacji Komponenty Serwer aplikacji Podsumowanie Live Demo
Czym jest platforma Magic eBusiness? Rewolucyjna podstawa do projektowania, tworzenia i rozwoju kompleksowych rozwiązań Klient/Serwer, eBusiness oraz CRM szybciej niż jakakolwiek inna technologia dostępna obecnie na rynku
Obszary zastosowań Pomost integracyjny Przetwarzanie danych Raporty eBusiness mBusiness
Platformy: Windows 9x/ME/NT/2000/XP UNIX Linux iSeries (AS/400) Bazy danych: Oracle MS SQL Informix Pervasive.SQL ODBC DB2 Obsługiwane platformy
Tworzenie aplikacji Tradycyjny model tworzenia aplikacji Analiza Przyrostowy w Magic eDeveloper Projektowanie Prototypowanie Testowanie i Modyfikacja Uruchomienie Projekt Kodowanie Kompilacja Testowanie Uruchomienie Analiza Biznesowa
Tworzenie aplikacji polega na wypełnianiu wzajemnie połączonych tabel wartościami, które zostały zdefiniowane na wcześniejszym etapie tworzenia systemu Modele Tabele Programy Proces tworzenia aplikacji
Cykl dzia ł ania zadania Prefiks Sufiks 1 Pobierz pierwszy rekord 2 Sprawdź EOF 3 Otwórz Transakcję 4 1 Pobierz pierwszy rekord 2 Sprawdź EOF 3 Otwórz Transakcję 4 Główny 1 Select 2 Select 3 Select 4 Select 1 Select 2 Select 3 Select 4 Select Pętla Rekordu Pętla Zadania Otwórz pliki 3 Przygotuj Data View 4 Sortuj dane lub wybierz indeks 1 2 Otwórz pliki 3 Przygotuj Data View 4 Sortuj dane lub wybierz indeks Zamknij pliki Zamknij pliki Porównaj, zalokuj, uaktualnij rekord 2 Zamknij Transakcję 3 Sprawdź EOF 1 Porównaj, zalokuj, uaktualnij rekord 2 Zamknij Transakcję 3 Sprawdź EOF Programista musi jedynie określić operacje logiczne, które motor Magica ma wykonać na DANYCH
Etap3GL4GLeDeveloper 1Projektowanie Prototyp 100%50%25-35% 2Tworzenie100%50%15-25% 3Integracja Uruchomienie 100%50%20-35% 4Utrzymanie Rozwój 100% % 15-25% Źródło: Magic Marketing Cykl tworzenia systemu
Interaktywne aplikacje WEB – eDeveloper Browser Client Inteligentny klient – zdarzenia – odświeżenie Data View – sprawdzenie warunków – wykonywanie operacji i funkcji Magica – obsługa transakcji – lokalnie przechowywane dane – jeden aplet Javy Przeglądarka Internetowa + Magic Aplet Javy =
Porówanie kodów Jak można wykonać poniższe? –Eksport danych z baz SQL Visual Basic czy eDeveloper? –eCommerce Order-entry dla Duty-Free Shop Java czy eDeveloper? –Strona domowa dla Virtual Plant Shop Lansa czy eDeveloper?
Dim record As Recordset Dim nI As Long Dim nJ As Long Dim nFile As Integer Dim sTmp As String On Error GoTo Err_Handler Set record = db.OpenRecordset (sSQL, DAO.dbOpenDynaset DAO.dbReadOnly) ' *** Open output file nFile = FreeFile Open sDest For Output As #nFile ' *** Export fields name For nI = 0 To record.Fields.Count - 1 sTmp = "" & (record.Fields(nI).Name) Write #nFile, sTmp; ' *** Export fields name For nI = 0 To record.Fields.Count - 1 sTmp = "" & (record.Fields(nI).Name) Write #nFile, sTmp; Next Write #nFile, If record.RecordCount > 0 Then record.MoveLast record.MoveFirst For nI = 1 To record.RecordCount For nJ = 0 To record.Fields.Count - 1 sTmp = "" & (record.Fields(nJ)) Write #nFile, sTmp; Next Write #nFile, record.MoveNext Next End If Close #nFile CSVExport = True Exit Function Err_Handler: MsgBox ("Error: " & Err.Description) CSVExport = False End Function Visual Basic Eksport danych z bazy SQL Definicja Data ViewEksport do pliku ASCII Magic eDeveloper
eCommerce Order-Entry Nagłówek zamówienia Tabela produktów
eCommerce Order-Entry (1) Definicja Nagłówka zamówienia Nagłówek Produkty
eCommerce Order-Entry (2) 1.Wyświetlenie produktów - umożliwia również ich modyfikację 2. Przy wyjściu z danego produktu – Uaktualnienie całego zamówienia 3. Podwójne kliknięcie na produkcie - Call program do wyboru produktu Nagłówek Produkty
Kod Javy - eCommerce Order-Entry Nagłówek Produkty
Nagłówek Produkty i więcej kodu Javy...
Strona główna dla Virtual Plant-Shop
eDeveloper – strona główna Plant-Shop Każdy odnośnik na stronie wywołuje osobny program
Lansa 4GL – strona główna Plant-Shop ENDIF ELSE /* Continued Job */ ********** Get User Info FETCH FIELDS((#FRU_JOBUS) (#FRU_JOBPW)) FROM_FILE(FRUJOBID) WITH_KEY(#FRU_JOBID) ENDIF ********** Set Title (If signed-in, persoanlize the Title) IF COND('#FRU_JOBUS *EQ *BLANK') CHANGE FIELD(#FRU_CMNT1) TO('''Welcome to Plants 4 U''') ELSE FETCH FIELDS((#FRU_USRID)) FROM_FILE(FRUUSER) WITH_KEY(#FRU_JOBUS) USE BUILTIN(TCONCAT) WITH_ARGS(#FRU_USRID ''', enjoy your stay at Plants 4 U''') TO_GET(#FRU_CMNT1) ENDIF ********** Create today's look of the page SELECT FIELDS((*ALL)) FROM_FILE(P4USTYLE) LEAVE IF('#DAY *LT #P4U_NEWDY') ENDSELECT ENDROUTINE FUNCTION OPTIONS(*DIRECT *WEBEVENT) ********** EXECUTE SUBROUTINE(USER_INFO) EXECUTE SUBROUTINE(GET_ORDERS) EXECUTE SUBROUTINE(GET_CART) ********** Retrieve Monthly tip and special FETCH FIELDS((*ALL)) FROM_FILE(P4UMONTH) WITH_KEY(#MONTH) FETCH FIELDS((#PACKDES)) FROM_FILE(PACKTAB) WITH_KEY('ENG' #PACKTYP) ********** DISPLAY FIELDS((#FRU_IMGUP) (#COMMONNM) (#PLANTTIP) (#FRU_CMNT1) (#DAY *HIDDEN) (#FRU_JOBID *HIDDEN) (#P4U_NEXTF *HIDDEN)) EXIT_KEY(*NO) MENU_KEY(*NO) PROMPT_KEY(*NO) SUBROUTINE NAME(USER_INFO) FETCH FIELDS((*ALL)) FROM_FILE(P4USYS) IF COND('#FRU_JOBID *EQ *BLANK') /* New Job */ ********** Update JobId file CHANGE FIELD(#FRU_JOBID) TO(*LW3SESSIONID) CHANGE FIELD(#FRU_JOBUS #FRU_JOBPW) TO(*BLANK) INSERT FIELDS((*ALL)) TO_FILE(FRUJOBID) ********** Update LANSA Web Site counter CHANGE FIELD(#LWS_HITDT) TO(*YYMMDD) CHANGE FIELD(#LWS_HITKW) TO('Plants 4 U Newspaper Main Page') FETCH FIELDS((#LWS_HITNO)) FROM_FILE(LWSHITS) WITH_KEY(#LWS_HITKW #LWS_HITDT) IF_STATUS IS(*OKAY) CHANGE FIELD(#LWS_HITNO) TO('#LWS_HITNO + 1') UPDATE FIELDS((#LWS_HITNO)) IN_FILE(LWSHITS) ELSE CHANGE FIELD(#LWS_HITNO) TO(1) INSERT FIELDS((*ALL)) TO_FILE(LWSHITS) ********** Subroutine....: GET_ORDERS ********** Description....: Get User's Order Totals ********** ============================= SUBROUTINE NAME(GET_ORDERS) ********** If User not signed-in, display sign-in component IF COND('#FRU_JOBUS *EQ *BLANK') CHANGE FIELD(#FRU_COMP1) TO('FRU_NEWS05') ELSE /* User is Signed in */ CHANGE FIELD(#FRU_ORDQT) TO(0) ********** Retrieve Order totals SELECT FIELDS((#ORDTOT)) FROM_FILE(PORDSTS) WITH_KEY(#FRU_JOBUS #FRU_JOBPW) CHANGE FIELD(#FRU_ORDQT) TO('#FRU_ORDQT + 1') ENDSELECT CHANGE FIELD(#FRU_COMP1) TO('FRU_NEWS04') ENDIFENDROUTINE ********** Subroutine....: GET_CART ********** Description....: Get Shopping Cart Totals ********** ==================================================== === SUBROUTINE NAME(GET_CART) ********** Total up the number and amount of shopping cart CHANGE FIELD(#FRU_SHPQT #FRU_SHPTL) TO(0) SELECT FIELDS((#PRICE) (#QTY)) FROM_FILE(PORDER) WITH_KEY(#FRU_JOBID) CHANGE FIELD(#FRU_SHPQT) TO('#FRU_SHPQT + #QTY') CHANGE FIELD(#FRU_SHPTL) TO('#FRU_SHPTL + (#PRICE * #QTY)') ENDSELECT ENDROUTINE ********** End of RDML commands **********
Plants 4 U <!-- function SetButton(btnvalue) { document.LANSA._BUTTON.value = btnvalue; } function HandleSubmit() { document.LANSA.submit(); } function pathOnly(InString) { LastSlash=InString.lastIndexOf('/',InString.length-1); OutString=InString.substring(0,LastSlash+1); return(OutString); } function RDML() { var ref = pathOnly(location.href); var lweb = "LANSAWEB?PROCFUN+FRUPROC60+FRU6010+WEB+ENG +FUNCPARMS+FRU_FUNC(A010):NEW0101"; var opt = "width=640,height=400,directories=no,toolbar=no,"; var win; opt += "menubar=no,scrollbars=yes,resizable=yes"; ref += lweb; win = window.open(ref,"ViewCode", opt); } function SetSelect(HTMLName, Name,Row,Column,Select) { document.LANSA._SELECT.value=Select; SetNameLocation(Name,Row,Column); document.LANSA._CALFLD.value=HTMLName; return; } function SetNameLocation(Name,Row,Column) { document.LANSA._NAME.value=Name; document.LANSA._ROW.value=Row; document.LANSA._COLUMN.value=Column; document.LANSA._CALFLD.value=Name; return; } function HandleEvent(Proc,Func) { document.LANSA._PROCESS.value=Proc; document.LANSA._FUNCTION.value=Func; document.LANSA.submit(); } function NextFunction(Function) { document.LANSA.AP4U_NEXTF.value=Function; HandleEvent('FRUPROC30', 'FRU3001') } function ViewDetail(Number) { document.LANSA.PFRU_RBNBR.value=Number; HandleEvent('FRUNEWS01', 'NEW0111'); } function NextButton(Mode) { document.LANSA.AMODE.value=Mode; HandleEvent('FRUNEWS01', 'NEW0112'); } function PopUp(Proc, Func, Menu, Title) { var lweb = " var opt = "width=600,height=400,scrollbars=yes,resizable=yes,directories=no"; var Plus = "+" var win; lweb += Proc + Plus + Func; lweb += "+WEB+ENG"; if (Menu == "Y") opt += ",toolbar=yes,menubar=yes,status=yes"; else opt += ",toolbar=no,menubar=no,status=no"; win = window.open(lweb,"Title",opt); } function NextLook() { if (document.LANSA.SDAY.value >= 24) document.LANSA.SDAY.value = 1; else document.LANSA.SDAY.value = Math.abs(document.LANSA.SDA Y.value) + 8; HandleEvent('FRUNEWS01', 'NEW0101'); } function NextMonth() { if (document.LANSA.SMONTH.value == 12) document.LANSA.SMONTH.value=1; else document.LANSA.SMONTH.value = Math.abs(document.LANSA.SMON TH.value) + 1; HandleEvent('FRUNEWS01', 'NEW0101'); } function Feedback() { var ref = pathOnly(location.href); var lweb = "LANSAWEB?PROCFUN+FRUPROC70+FRU7010+WEB+ENG+F UNCPARMS+FRU_JOBID(A024):L03990A3E DA051+FRU_FEEDC(A00 7):NEW0101"; var opt = "width=540,height=350,directories=no,toolbar=no,"; var win; opt += "menubar=no,scrollbars=yes,resizable=yes"; ref += lweb; win = window.open(ref,"Feedback", opt); } HTML & JavaScript dla strony głównej Plant-Shop
// --> <FORM METHOD="POST" NAME="LANSA" ACTION="/CGI-BIN/ LANSAWEB?WEBEVENT+L03990A3E DFA051+WEB+ENG"> <!-- if (((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) >= 3 )) || ((navigator.appName == "Microsoft Internet Explorer") && (parseInt(navigator.appVersion) >= 4 ))) {p4u_1on = new Image(); p4u_1on.src = "/images/p4usrch2.gif"; p4u_1off = new Image(); p4u_1off.src = "/images/p4usrch1.gif"; p4u_2on = new Image(); p4u_2on.src = "/images/p4ucart2.gif"; p4u_2off = new Image(); p4u_2off.src = "/images/p4ucart1.gif"; p4u_3on = new Image(); p4u_3on.src = "/images/p4ucout2.gif"; p4u_3off = new Image(); p4u_3off.src = "/images/p4ucout1.gif"; p4u_4on = new Image(); p4u_4on.src = "/images/p4uords2.gif"; p4u_4off = new Image(); p4u_4off.src = "/images/p4uords1.gif"; p4u_5on = new Image(); p4u_5on.src = "/images/p4ugary2.gif"; p4u_5off = new Image(); p4u_5off.src = "/images/p4ugary1.gif"; bar_0on = new Image(); bar_0on.src = "/images/p4ubar0b.gif"; bar_0off = new Image(); bar_0off.src = "/images/p4ubar0a.gif"; bar_1on = new Image(); bar_1on.src = "/images/p4ubar1b.gif"; bar_1off = new Image(); bar_1off.src = "/images/p4ubar1a.gif"; bar_2on = new Image(); bar_2on.src = "/images/p4ubar2b.gif"; bar_2off = new Image(); bar_2off.src = "/images/p4ubar2a.gif"; bar_3on = new Image(); bar_3on.src = "/images/p4ubar3b.gif"; bar_3off = new Image(); bar_3off.src = "/images/p4ubar3a.gif"; bar_4on = new Image(); bar_4on.src = "/images/p4ubar4b.gif"; bar_4off = new Image(); bar_4off.src = "/images/p4ubar4a.gif"; bar_5on = new Image(); bar_5on.src = "/images/p4ubar5b.gif"; bar_5off = new Image(); bar_5off.src = "/images/p4ubar5a.gif"; bar_6on = new Image(); bar_6on.src = "/images/p4ubar6b.gif"; bar_6off = new Image(); bar_6off.src = "/images/p4ubar6a.gif"; } function image_on(imgName) { imgOn = eval(imgName + "on.src"); document.LANSA [imgName].src = imgOn; } function image_off(imgName) { imgOff = eval(imgName + "off.src"); document.LANSA [imgName].src = imgOff; } if (window != window.top) top.location.href = location.href; // --> <INPUT NAME="_NAME" TYPE="HIDDEN" SIZE=20 MAXLENGTH=20 VALUE="&NULL"> <INPUT NAME="_ROW" TYPE="HIDDEN" SIZE=2 MAXLENGTH=2 VALUE="01"> <INPUT NAME="_COLUMN" TYPE="HIDDEN" SIZE=2 MAXLENGTH=2 VALUE="01"> <INPUT NAME="LFRU_JOBID" TYPE="HIDDEN" SIZE="024" MAXLENGTH="024" VALUE="L03990 A3E DA051"> < B>Shopping Cart Status <IMG SRC="/images/p4u _cart.gif" ALIGN=LEFT HSPACE=0 VSPACE=0 BORDER=0> Currently, you have 0 items totaling $0.00. Welcome to Plants 4 U <A HREF=" onMouseover="image_on('bar_0') ; window.status='Framed Version of Plants 4 U' ; return true" // --> <FORM METHOD="POST" NAME="LANSA" ACTION="/ CGI-BIN/LANSAWEB?WEBEVENT+L03990A3E DFA051+WEB+ENG"> <!-- if (((navigator.appName == "Netscape") && (parseInt(navi gator.appVersion) >= 3 )) || ((navigator.appName == "Microsoft Internet Explorer") && (parseInt(navigator.appVersion) >= 4 ))) {p4u_1on = new Image(); p4u_1on.src = "/images/p4usrch2.gif"; p4u_1off = new Image(); p4u_1off.src = "/images/p4usrch1.gif"; p4u_2on = new Image(); p4u_2on.src = "/images/p4ucart2.gif"; p4u_2off = new Image(); p4u_2off.src = "/images/p4ucart1.gif"; p4u_3on = new Image(); p4u_3on.src = "/images/p4ucout2.gif"; p4u_3off = new Image(); p4u_3off.src = "/images/p4ucout1.gif"; p4u_4on = new Image(); p4u_4on.src = "/images/p4uords2.gif"; p4u_4off = new Image(); p4u_4off.src = "/images/p4uords1.gif"; p4u_5on = new Image(); p4u_5on.src = "/images/p4ugary2.gif"; p4u_5off = new Image(); p4u_5off.src = "/images/p4ugary1.gif"; bar_0on = new Image(); bar_0on.src = "/images/p4ubar0b.gif"; bar_0off = new Image(); bar_0off.src = "/images/p4ubar0a.gif"; bar_1on = new Image(); bar_1on.src = "/images/p4ubar1b.gif"; bar_1off = new Image(); bar_1off.src = "/images/p4ubar1a.gif"; onMouseout = "image_off('bar_0') ; window.status='' ; return true"> <A HREF="JavaScript:PopUp('FRUPROC60', 'FRU6015', 'Y', 'Site Tour')" onMouseover="image_on('bar_1') ; window.status='View the Site Tour' ; return true" onMouseout = "image_off('bar_1') ; window.status='' ; return true"> <A HREF="JavaScript:PopUp('FRUPROC60', 'FRU6050', 'Y', 'Features')" onMouseover="image_on('bar_2') ; window.status='Check out our Features Page' ; return true" onMouseout = "image_off('bar_2') ; window.status='' ; return true"> <A HREF="JavaScript:PopUp('FRUPROC60', 'FRU6060', 'Y', 'Starter Pack')" onMouseover="image_on('bar_3') ; window.status='Check out our Starter Pack applications' ; return true" onMouseout = "image_off('bar_3') ; window.status='' ; return true"> <A HREF="JavaScript:PopUp('FRUPROC60', 'FRU6040', 'N', 'Whats New')" onMouseover="image_on('bar_4') ; window.status='Check out the Whats New page' ; return true" onMouseout = "image_off('bar_4') ; window.status='' ; return true"> <A HREF="JavaScript:Feedback()" onMouseover="image_on('bar_5') ; window.status='Send us Feedback' ; return true" onMouseout = "image_off('bar_5') ; window.status='' ; return true"> <A HREF=" onMouseover="image_on('bar_6') ; window.status='LANSA Web Site' ; return true" onMouseout = "image_off('bar_6') ; window.status='' ; return true"> iwięcej kodu HTML i JavaScript... i więcej kodu HTML i JavaScript...
<A HREF="JavaScript:HandleEvent('FRUNEWS01', 'NEW0103')" onMouseover="image_on('p4u_1') ; window.status='Search the Plants 4 U catalog' ; return true" onMouseout = "image_off('p4u_1') ; window.status='' ; return true"> <IMG SRC="/images/p4usrch1.gif" ALIGN=CENTER BORDER=0 NAME="p4u_1" A LT="Search the Plants 4 U catalog"> <A HREF="JavaScript:HandleEvent('FRUNEWS01', 'NEW0110')" onMouseover="image_on('p4u_2') ; window.status='View the items in your Shopping Cart' ; return true" onMouseout = "image_off('p4u_2') ; window.status='' ; return true"> <IMG SRC="/images/p4ucart1.gif" ALIGN=CENTER BORDER=0 NAME="p4u_2" ALT ="View the items in your Shopping Cart"> <A HREF="JavaScript:HandleEvent('FRUNEWS01', 'NEW0108')" onMouseover="image_on('p4u_3') ; window.status='Check out and pay for your order' ; return true" onMouseout = "image_off('p4u_3') ; window.status='' ; return true"> <IMG SRC="/images/p4ucout1.gif" ALIGN=CENTER BORDER=0 NAME="p4u_3" ALT= Check out and pay for your order"> <A HREF="JavaScript:HandleEvent('FRUNEWS01','NEW0111')" onMouseover="image_on('p4u_4') ; window.status='Check the status on a previous order' ; return true" onMouseout = "image_off('p4u_4') ; window.status='' ; return true"> <IMG SRC="/images/p4uords1.gif" ALIGN=CENTER BORDER=0 NAME="p4u_4" ALT="Check the status on a previous order"> <A HREF="JavaScript:HandleEvent('FRUNEWS01','NEW0112')" onMouseover="image_on('p4u_5') ; window.status='Ask Gary a question' ; return true" onMouseout = "image_off('p4u_5') ; window.status='' ; return true"> <IMG SRC="/images/p4ugary1.gif" ALIGN=CENTER BORDER=0 NAME="p4u_5" ALT="Ask Gary a question"> <FONT FACE="Arial" SIZE=2 COLOR= WHITE> Find all your needs with Plants 4 U <IMG ALIGN=LEFT SRC="/IMAGES/FRU_FBED3. JPG" HSPACE=0 VSPACE=0>Thinking about replanting your flower garden? Let Plants 4 U find all of the flowers you desire. For a quick search, choose a flower type and click t he Search button. Daisy Lilies Orchid Rose Tulip <INPUT TYPE="BUTTON" NAME="&USER1" VALUE="Search" onClick="HandleEvent('FRUNEWS01,'NEW0104')"> Plants 4 U offer a variety of search criteria. For a more detailed search, click <A HREF="JavaScript:Handl eEvent('FRUNEWS01', 'NEW0103')">here now. <FONT FACE="Arial" SIZE=2 COLOR=WHITE > Today's Tip <IM G SRC="/IMAGES/FRUFLASH.GIF" ALIGN=LEFT BORDER=0> By January, houseplants need a littls change in their environment, such as more light and humidity. If a nice sunny warm day comes along, set the plants under indirect sunlight on the porch or patio. For more hints and tips for this month, as well as other months, just Ask Gary. <TABLE BORDER=0 CELLSPACING=0 CELL PADDING=0> Gardening <IMG SRC ="/images/p4usbar.gif"> <A HREF="JavaScript:HandleEvent('FRUNEWS01','NEW0112 ')"> Do you have a lot of questions about your plants? Need them answered? Help is on the way! < A HREF="JavaScript:HandleEvent('FRUNEWS01','NEW0112')">Ask Gary and he will lend you a helping hand! <IMG SRC="/images/p4ufbar.gif "> Sign In <IMG SRC= "/images/p4usbar.gif"> <IMG SRC="/imag es/p4ulock.gif " ALIGN=LEFT HSPACE=0 VSPACE=0 BORDER=0> If you <A HREF= JavaScript:NextFunction('NEW0101')">Sign In now, you will gain full access to the Plants 4 U demonstration site. Today's Special <IMG SRC ="/images/p4usbar.gif"> <FONT FACE="Arial " SIZE=2> Flower:   FOREVER RED Price:  $ for EACH Buy Me! <INPUT TYPE="BUTTON" NAME="Add" VALUE="Add to Cart onClick="HandleEvent('FRUNEWS01','NEW0102')"> <FONT COLOR="DARKGREEN > LANSA gives your Home Page a new look every week. Automatically! <A HREF="JavaScript:NextLook()">Click here to see the new look. LANSA< /B> promotes a new Special Offer every month. Automatically! Click here to see the new special. <TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%"> <A HREF= target="_blank"><IMG BORDER=0 SRC= "/IMAGES/Ebim_sc.gif" ALT="e-Business Mark"> <A HREF= target="_blank">Click for IBM Mark meaning and disclaimers. IBM and e-business Mark are TM's of IBM Corp. <IMG BORDER=0 SRC="/IMAGES/LANLOGO.GIF" ALT="LANSA"> To wszystko bez kodu RPG! i jeszcze więcej kodu HTML i JavaScript...
Podsumowanie Szybkość tworzenia i utrzymania istniejących aplikacji Przenaszalność miedzy platformami i bazami danych Komponenty Magic Browser Client Skalowalność dopasowana do potrzeb Zgodność ze standardami J2EE, XML, WEB Services COM, ActiveX, EJB, JAVA
Przykładowa konfiguracja Przeglądarka WWW Internet Linux Apache Magic Requester Magic Request Broker Serwery Aplikacji HP-UX Baza danych Strona HTML ORACLE WINDOWS
Dziękuję za uwagę Piotr Zawadzki konsultant Magic