Generowanie aplikacji Borland Delphi w oparciu
o repozytorium CASE – Oracle Designer
®
-DQXV]3HUHN0LFKDá:LQLHZVNL
&RP$UFK±3R]QD6S]RR
e–mail:
Janusz.Perek@ComArch.pl
,
Michal.Wisniewski@ComArch.pl
Abstrakt
$UW\NXáSRZLFRQ\MHVW]DSUH]HQWRZDQLXQDU]G]LDÄGandalf” do generowania aplikacji Borland
'HOSKL Z RSDUFLX R GHILQLFM PRGXáX ]DSDPLWDQ Z UHSR]\WRULXP &$6( Borland Delphi 5.0 jest
zaawansowanym pakietem do tworzenia klienckich aplikacji bazodanowych. Nie wspiera on jednak etapu
SURMHNWRZDQLDDSOLNDFMLQDSRGVWDZLHDQDOL]\Z\PDJDX*\WNRZQLNyZ:DUW\NXOHRSLVDQRVSRVyELQWHJUDFML
URGRZLVND Borland 'HOSKL ] UHSR]\WRULXP 2UDFOH 'HVLJQHU RUD] DUFKLWHNWXU V\VWHPX
Z\NRU]\VWXMFHJR Z\JHQHURZDQH DSOLNDFMH 1D ]DNRF]HQLH SU]HGVWDZLRQR SURFHV EXGRZ\ SU]\NáDGRZHM
DSOLNDFML]Z\NRU]\VWDQLHPSUH]HQWRZDQHJRUR]ZL]DQLD
1. Wprowadzenie
3RP\Vá ]EXGRZDQLD QDU]G]LD GR JHQHUDFML DSOLNDFML Borland Delphi w oparciu o informacje
]DSLVDQHZUHSR]\WRULXPSRMDZLáVLSRGF]DVZ\NRQ\ZDQLDSUDFSURMHNWRZ\FK]áR*RQHJRV\VWHPX
informatycznego.
= MHGQHM VWURQ\ PDP\ QDU]G]LH 2UDFOH 'HVLJQHU SRVLDGDMFH PR*OLZRü JHQHURZDQLD
PRGXáyZ QD SRGVWDZLH SURMHNWX ]DSDPLWDQHJR Z UHSR]\WRULXP -HGQDN GRFHORZH URGRZLVNR
Z\JHQHURZDQ\FK PRGXáyZ 2UDFOH )RUPV SRVLDGD W\ONR SURVW\ LQWHUIHMV X*\WNRZQLND L QLH
SR]ZDOD QD áDWZH GRGDZDQLH QRZ\FK NRPSRQHQWyZ PRJF\FK JR UR]V]HU]\ü
1
. Poza tym nie
LVWQLHMH*DGQDPHWRGDUR]V]HU]HQLDIXQNFMRQDOQRFLVDPHJRURGRZLVNDSURJUDPLVW\F]QHJR
= GUXJLHM VWURQ\ PDP\ QDU]G]LH Borland 'HOSKL EGFH ]DDZDQVRZDQ\P SDNLHWHP
do tworzenia klienckich aplikacji
ED]RGDQRZ\FK FKDUDNWHU\]XMFH VL RWZDUWRFL DOH QLH
SRVLDGDMFH PR*OLZRFL JHQHUDFML PRGXáyZ &R SUDZGD LVWQLHM JHQHUDWRU\ DSOLNDFML GOD Delphi
(np.: Rational Rose 2000, Microgold
:LWK&ODVVDOHQLHVRQH]LQWHJURZDQH]SURGXNWDPLILUP\
2UDFOH 1D V]F]FLH RWZDUWRü 'HOSKL SR]ZDOD QD áDWZ LPSOHPHQWDFMH JHQHUDWRUD GOD WHJR
URGRZLVND
.RPSLODFM SRZ\*V]\FK IDNWyZ MHVW Ä*DQGDOI´ QDU]G]LH SR]ZDODMFH QD JHQHURZDQLH
PRGXáyZDelphi w oparciu o repozytorium Oracle Designer.
3U]HJOGLQWHUIHMVyZ
2.1. Oracle Designer API
2UDFOH 'HVLJQHU XGRVWSQLD LQWHUIHMV SURJUDPRZ\ $3, XPR*OLZLDMF\ GRVWS ]HZQWU]Q\P
QDU]G]LRP GR UHSR]\WRULXP ,QWHUIHMV WHQ MHVW ]ELRUHP SHUVSHNW\Z L SDNLHWyZ PL/SQL’owych
]QDMGXMF\FKVLZVFKHPDFLHZáDFLFLHODUHSR]\WRULXPL]DSHZQLDEH]SLHF]QHPHWRG\GRVWSXGR
metadanych.
0HWDGDQH V SU]HFKRZ\ZDQH Z QLHZLHONLHM OLF]ELH WDEHO SRPLG]\ NWyU\PL LVWQLHMH
ZLHOH]áR*RQ\FKSRZL]DNWyUHQLHVXGRNXPHQWRZDQH2UDFOHQLHZVSLHUDEH]SRUHGQLFKPHWRG
GRVWSXGRW\FKWDEHO]DSRPRFLQVWUXNFML'0/,QIRUPDFMH]DZDUWHZWDEHODFKVSUH]HQWRZDQH
SRSU]H]SHUVSHNW\Z\NWyUHVWDQRZLEDUG]RZD*Q\HOHPHQWLQWHUIHMVX
1
Oracle Forms Developer i Oracle Forms
6HUYHU SR]ZDOD QD WZRU]HQLH UR]V]HU]H SU]\ X*\FLX
JavaBeans i Pluggable Java Components (PJCs) oraz zastosowaniu komponentów OCX.
48
Janusz
3HUHN0LFKDá:LQLHZVNL
Kolejnym elementem, z którego zbudowany jest interfejs to pakiety PL/SQL’owe,
NWyUHXPR*OLZLDMZVSRVyEEH]SLHF]Q\GRNRQ\ZDQLHPRG\ILNDFMLZ]DZDUWRFLWDEHOUHSR]\WRULXP
SU]H] QDU]G]LD ]HZQWU]QH -HGQ ] QDMLVWRWQLHMV]\FK U]HF]\ MHVW WR L* 2UDFOH 'HVLJQHU X*\ZD
GRNáDGQLH WHJR VDPHJR LQWHUIHMVX SU]\ ZVWDZLDQLX PRG\ILNDFML XVXZDQLX L SRELHUDQLX GDQ\FK ]
UHSR]\WRULXP 5\VXQHN SRND]XMH Z MDNL VSRVyE QDU]G]LD ]HZQWU]QH PRJ SU]HFKRZ\ZDü L
SRELHUDüLQIRUPDFMH]UHSR]\WRULXP
5\V'RVWSGRUHSR]\WRULXP]X*\FLHPLQWHUIHMVXSURJUDPRZHJR2UDFOH
Designer’a
7DEHOH]QDMGXMFHVLZUHSR]\WRULXPPDMQD]Z\UR]SRF]\QDMFHVLRG6''BOXE&',B
QS 6''B(/(0(176 &',B7(;7 =DZLHUDM RQH LQIRUPDFMH R ZLHOX Uy*Q\FK W\SDFK
HOHPHQWyZZ\VWSXMF\FKZ2UDFOH'HVLJQHU¶]H'ODSU]\NáDGXGHILQLFMHWDEHOVSU]HFKRZ\ZDQH
Z WDEHOL 6''B(/(0(176 SU]\ F]\P DWU\EXW (/B7<3(B2) PD ZDUWRü µ7$%¶ D DWU\EXW
(/B2&&85B7<3(ZDUWRüµ7$%/(¶
1D]Z\ SHUVSHNW\Z VWDQRZLF\FK LQWHUIHMV SURJUDPRZ\ ]DF]\QDM VL RG &,B L ]DZLHUDM
OLF]E PQRJ QD]Z\ HOHPHQWX 1S SHUVSHNW\ZD SRND]XMFD GHILQLFMH HQFML PD QD]Z
&,B(17,7,(6DSHUVSHNW\ZDSUH]HQWXMFDGHILQLFMHPRGXáyZDSOLNDF\MQ\FK&,B02'8/(6
2UDFOH 'HVLJQHU ]DZLHUD V\VWHP DSOLNDFML Z NWyU\P ]QDMGXM VL GHILQLFMH ZV]\VWNLFK
SHUVSHNW\Z ZUD] ] SRZL]DQLDPL SRPLG]\ QLPL 6\VWHP DSOLNDFML PR*QD ]DáDGRZDü GR
UHSR]\WRULXP]SOLNX25$&/(B+20('(6B02'(/02'(/B'$7OXE]DLPSRUWRZDü]
pliku ORACLE_HOME/DES2_71/MODEL/MODEL_60.DMP (dla wersji Oracle Designer 6.0).
Informacje na temat interfejsu programowego Oracle
'HVLJQHU¶D ]QDMGXM VL Z NDWDORJX
ORACLE_HOME/CDOC70/api.
%DUG]LHMV]F]HJyáRZHLQIRUPDFMHQDWHPDWNRU]\VWDQLD]2UDFOH'HVLJQHU$3,]QDMGXMVLZ>@
2.2. Biblioteka Open Tools API (Borland Delphi)
Biblioteka Open
7RROV $3, 27$ XPR*OLZLD GRGDZDQLH QRZHM IXQNFMRQDOQRFL
GR ]LQWHJURZDQHJR URGRZLVND SURJUDPLVW\F]QHJR DQJ ,'( ± Integrated Development
Environment) Borland Delphi oraz Borland C++ Builder. OTA definiuje zbiór interfejsów COM (
Common
2EMHFW 0RGHO XGRVWSQLDMF\FK X*\WNRZQLNRZL LQIRUPDFMH RUD] PHFKDQL]P\ ]H
URGRZLVND,'(SR]ZDODMFHQDZ\NRQDQLHQDVWSXMF\FKF]\QQRFL
•
tworzenie kreatorów form i projektów,
•
tworzenie aplikacji pomocniczych,
Generowanie aplikacji Borland Delphi w oparciu o repozytorium CASE – Oracle Designer
®
49
•
UR]V]HU]DQLHPHQXOLVWDNFMLSDVNyZQDU]G]LRZ\FKHG\WRUD
•
tworzenie nowych skrótów klawiszowych oraz makr,
•
manipulowanie zasobami projektu,
•
PDQLSXORZDQLHPRGXáDPLSURMHNWX±WZRU]HQLHRWZLHUDQLH]DP\NDQLHGRGDZDQLHQRZ\FK
PRGXáyZGRSURMHNWXLLFKXVXZDQLH
5R]V]HU]HQLH URGRZLVND SURJUDPLVW\F]QHJR Z\NRU]\VWXMF LQWHUIHMV\ 27$ VSURZDG]D VL
GRLPSOHPHQWDFMLSRWU]HEQ\FKLQWHUIHMVyZ5R]V]HU]HQLDWDNLHPDMSRVWDüELEOLRWHNG\QDPLF]QLH
áDGRZDQ\FK0RJWRE\ü]DUyZQRELEOLRWHNLW\SX'//MDNL%3/
2
.
6]F]HJyáRZHLQIRUPDFMH]QDMGXMVLZ>@
5R]ZL]DQLH
1DU]G]LH Ä*DQGDOI´ ]RVWDáR ]DLPSOHPHQWRZDQH MDNR ELEOLRWHND %3/ L ]LQWHJURZDQH
]H URGRZLVNLHP Borland 'HOSKL Z\NRU]\VWXMF LQWHUIHMV 27$ 3RELHUDQLH LQIRUPDFML ]
UHSR]\WRULXP ]RVWDáR ]UHDOL]RZDQH ] Z\NRU]\VWDQLHP 2UDFOH 'HVLJQHU $3, : FHOX ]DSHZQLHQLD
GX*HMHODVW\F]QRFLUR]ZL]DQLDPRGXá\JHQHURZDQHVZRSDUFLXRV]DEORQ\']LNL]DVWRVRZDQLX
komponentu firmy Dream Company – Dream
6FULSWHU GR V]DEORQyZ ]RVWDáD GRGDQD PR*OLZRü
umieszczania kodu wykonywalnego w postaci skryptowej.
3URFHVJHQHUDFMLPRGXáXSRG]LHORQ\MHVWQDQDVWSXMFHHWDS\
1.
8*\WNRZQLNRNUHODSDUDPHWU\SURFHVXJHQHUDFMLZ\ELHUDQDMHVWGHILQLFMDPRGXáX]DSDPLWDQD
Z UHSR]\WRULXP RUD] V]DEORQ JáyZQ\ QD SRGVWDZLH NWyUHJR WZRU]RQH V ZV]\VWNLH SOLNL
projektu Delphi.
2.
*HQHUDWRU SRELHUD RGSRZLHGQLH LQIRUPDFMH ] UHSR]\WRULXP RUD] ZF]\WXMH ZVND]DQ\ JáyZQ\
szablon projektu.
3.
1DSRGVWDZLHLQIRUPDFML]JáyZQHJRV]DEORQXSURMHNWXRGF]\W\ZDQHVV]DEORQyZGRJHQHUDFML
plików DFM i PAS.
4.
*HQHUDFMDNRGXSOLNL')0L3$6GODEORNXQDGU]GQHJRLEORNyZGHWDOL
3RZ\JHQHURZDQLXSOLNyZ]DZLHUDMF\FKNRG\(UyGáRZHPRGXáXPR*QDSU]\X*\FLXURGRZLVND
'HOSKLZSURZDG]LüNRQLHF]QHPRG\ILNDFMHQS]PLDQDSRáR*HQLDNRQWUROHNNROHMQRüQDZLJDFML
GRGDQLHQRZHMIXQNFMRQDOQRFLGRPRGXáXDQDVWSQLHXWZRU]\üELEOLRWHN%3/
2
BPL ( Borland Package
/LEUDU\MHVWVSHF\ILF]QLHVNRPSLORZDQELEOLRWHN'//
50
Janusz
3HUHN0LFKDá:LQLHZVNL
5\V3URFHVJHQHUDFMLPRGXáX
3.1 Struktury danych
8*\WH VWUXNWXU\ GDQ\FK VWDQRZL RG]ZLHUFLHGOHQLH FHFK L SRZL]D MDNLH Z\VWSXM
SRPLG]\HOHPHQWDPLGHILQLXMF\PLPRGXáZUHSR]\WRULXP2UDFOH'HVLJQHU=HZ]JOGXQDIDNW
*HDNWXDOQLHÄ*DQGDOI´JHQHUXMHSRMHG\QF]HPRGXá\QLH]RVWDáDVWZRU]RQDNODVDRGSRZLDGDMFD
PRGXáRZL
Klasa
7JQG:LQGRZ UHSUH]HQWXMH RNQD MDNLH ]QDMGXM VL Z JHQHURZDQ\P PRGXOH .ODVD
7JQG%ORFNVWDQRZLUHSUH]HQWDFMHEORNXGODNWyUHJRRNUHORQHVGR]ZRORQHRSHUDFMHRUD]OLF]ED
Z\ZLHWODQ\FK UHNRUGyZ .ODVD 7JQG/D\RXW ]DZLHUD LQIRUPDFMH QD WHPDW SRáR*HQLD L UR]PLDUX
ND*GHJR EORNX RUD] SRZL]DQLH ] RNQHP 7JQG:LQGRZ Z NWyU\P PD VL ]QDOH(ü JHQHURZDQ\
EORN=ND*G\PEORNLHP SRZL]DQH V (UyGáD GDQ\FK 7JQG6RXUFH NWyUH SRG]LHORQH V QD GZD
W\S\ (UyGáD SRGVWDZRZH DQJ EDVH RUD] (UyGáD GRF]\W\ZDQH DQJ ORRNXS .D*GH ]H (UyGHá
posiada kolumny (
7JQG&ROXPQ3RZL]DQLHáF]FHNROXPQ]H(UyGáHPGDQ\FKForeignSource)
]DZLHUDLQIRUPDFMRUHODFMDFKW\SX0DVWHU'HWDLO=DOH*QRFLSRPLG]\(UyGáDPLGRF]\W\ZDQ\PL
V ]GHILQLRZDQH SU]\ X*\FLX NODV\ TgndArch. Klasa TgndConstraint zawiera informacje na
SRGVWDZLHNWyU\FKZID]LHJHQHUDFMLPR*H]RVWDüXWZRU]RQ\SOLNGHILQLXMF\NRPXQLNDW\REVáXJL
EáGyZZSU]\SDGNXQDUXV]HQLDRJUDQLF]HLQWHJUDOQRFLRZ\FK
Generowanie aplikacji Borland Delphi w oparciu o repozytorium CASE – Oracle Designer
®
51
Rys. 3. Diagram klas
3.2 Struktura projektu w Delphi
.D*GDIRUPDWNDVWZRU]RQDZURGRZLVNX'HOSKLVNáDGDVL]GZyFKSOLNyZ
•
SOLNX]UR]V]HU]HQLHP3$6]DZLHUDMF\NRGZ\NRQ\ZDOQ\LGHNODUDFMNODV\
•
SOLNX ] UR]V]HU]HQLHP ')0 ]DZLHUDMF\P XVWDZLHQLD ZáDVQRFL ZV]\VWNLFK NRPSRQHQWyZ
umieszczonych na formatce.
Od wersji 5 Borland
'HOSKL]DSLVXMHSOLNL')0MDNR]Z\NáHSOLNLWHNVWRZHZHZF]HQLHMV]\FK
ZHUVMDFKE\á\WRSOLNLELQDUQH']LNLWHPXJHQHUDFMDPRGXáXVSURZDG]DVLGRVWZRU]HQLDGZyFK
SOLNyZWHNVWRZ\FKRRGSRZLHGQLHMVWUXNWXU]HL]DZDUWRFL
52
Janusz
3HUHN0LFKDá:LQLHZVNL
'RGDWNRZR Z\PDJDQH MHVW SRVLDGDQLH SOLNX SURMHNWX NWyU\ RNUHOD Z MDNL VSRVyE PD ]RVWDü
XWZRU]RQ\SOLNZ\QLNRZ\LMDNLHIRUPDWNLPD]DZLHUDü0R*HWRE\üSOLNZ\NRQ\ZDOQ\ELEOLRWHND
%3/ELEOLRWHND'//OXERELHNW&205yZQLH*SOLNSURMHNWXMHVWSOLNLHPWHNVWRZ\P3HáHQSURFHV
JHQHUDFML PR*QD ZLF VSURZDG]Lü GR Z\JHQHURZDQLD SDU SOLNyZ 3$6 L ')0 GOD ND*GHJR
3
PRGXáXRUD]SOLNXSURMHNWX
3.3 Komponent Dream Scripter
Komponent Dream
6FULSWHUMHVWSURGXNWHPNWyU\SR]ZDODZEXGRZ\ZDüZDSOLNDFMHIUDJPHQW\
VNU\SWyZX*\ZDMFGRWHJRFHOXVBScript, JScript, Perl’a, 3\WKRQ¶DDWDN*HDelphi Script. Skrypty
Z\NRQ\ZDQH ]D SRPRF WHJR NRPSRQHQWX PDM GRVWS GR ZV]\VWNLFK ]DUHMHVWURZDQ\FK NODV
]GDU]H SURFHGXU IXQNFML L VWDá\FK 3U]\NáDGRZR PR*QD QDSLVDü SURFHGXU REVáXJL ]GDU]HQLD
w
-6FULSWZNWyUHMPDP\GRVWSGRZV]\VWNLFKNRPSRQHQWyZ]NWyU\FK]EXGRZDQ\MHVWPRGXá
napisany w
'HOSKL 0R*QD UyZQLH* Z\NRU]\VWXMF QS 9%6FULSW G\QDPLF]QLH PRG\ILNRZDü WDNL
IRUPXODU]±QS]PLHQLüSHZQHZáDVQRFLSyO
Zastosowanie komponentu Dream Scripter pozwala na zdefiniowanie szablonów, na podstawie
NWyU\FK JHQHURZDQH V Z\QLNRZH PRGXá\ 6]DEORQ WDNL MHVW SOLNLHP WHNVWRZ\P ]DZLHUDMF\P
RSUyF]VWDá\FKLQIRUPDFML]QDMGXMF\FKVLZSOLNDFK'HOSKLUyZQLH* IUDJPHQW\ NRGX R]QDF]RQH
VSHFMDOQ\PL]QDF]QLNDPLNWyUHVáDGRZDQHLSU]HWZDU]DQHSU]H]NRPSRQHQWDream Scripter. Te
IUDJPHQW\ NRGX QD SRGVWDZLH LQIRUPDFML SREUDQHM ] UHSR]\WRULXP ZVWDZLDM GR SOLNyZ
wynikowych kod w
'HOSKLRGSRZLHG]LDOQ\]DSRVWDüJHQHURZDQHJRPRGXáX
3.4 Szablony
:QDU]G]LXÄ*DQGDOI´V]DEORQ\VSOLNDPLWHNVWRZ\PL:FHOXZ\Uy*QLHQLDIUDJPHQWyZNWyUH
PDM ]RVWDü Z\NRQDQH ]RVWDá\ ZSURZDG]RQH GZD ]QDF]QLNL ^ SRF]WHN VNU\SWX RUD] ` ±
NRQLHFVNU\SWX3RPLG]\W\PL]QDF]QLNDPLPR*QDXPLHFLüNRGQDSLVDQ\ZDelphi Script. Oprócz
WHJR ]RVWDá\ ZSURZDG]RQH GZLH ]PLHQQH GR NWyU\FK PR*QD VL RGZRá\ZDü SR]D IUDJPHQWDPL
VNU\SWyZ SRSU]H] ]QDF]QLNL 02'8/(B1$0( QD]ZD JHQHURZDQHJR PRGXáX RUD]
%UNIT_NAME% - nazwa aktualnego pliku wynikowego.
3URFHV JHQHUDFML Z RSDUFLX R V]DEORQ RGE\ZD VL GZXHWDSRZR : SLHUZV]\P HWDSLH
SRGPLHQLDQH V ZV]\VWNLH Z\VWSLHQLD ]PLHQQ\FK : GUXJLP HWDSLH ZV]\VWNLH OLQLH WHNVWX QLH
EGFH VNU\SWHP NRSLRZDQH V GR SOLNX Z\QLNRZHJR =DPLDVW VNU\SWX GR SOLNX Z\QLNRZHJR
NRSLRZDQHVOLQLHWHNVWX±DUJXPHQW\Z\ZRáDQLDSURFHGXU\Print.
: QDU]G]LX Ä*DQGDOI´ ]RVWDá\ Z\Uy*QLRQH GZD W\S\ V]DEORQyZ V]DEORQ JáyZQ\ R QD]ZLH
]JRGQHM ] QD]Z NDWDORJX Z NWyU\P MHVW XPLHV]F]RQ\ ± ]DZLHUDMF\ LQIRUPDFMH R SURFHVLH
JHQHUDFML RUD] V]DEORQ\ JHQHUXMFH ± ]DZLHUDMFH LQIRUPDFM SRWU]HE GR Z\JHQHURZDQLD
NRQNUHWQHJRIUDJPHQWXPRGXáX
:WUDNFLHJHQHUDFMLRGF]\W\ZDQ\MHVWV]DEORQJáyZQ\=DSRPRFVNU\SWXRSLVDQHMHVWZQLP
MDNLHSOLNLLQDSRGVWDZLHMDNLFKV]DEORQyZSRZLQQ\VLZ\JHQHURZDü']LNLWDNLHPXUR]ZL]DQLX
PR*OLZH MHVW Z\JHQHURZDQLH RSUyF] GHILQLFML IRUPDWNL WDN*H SOLNX SURMHNWX L GRZROQHM OLF]E\
SOLNyZ SRPRFQLF]\FK QS SOLNX ] NRPXQLNDWDPL REVáXJL EáGyZ Z SU]\SDGNX QDUXV]HQLD
RJUDQLF]HLQWHJUDOQRFLRZ\FK6]DEORQJáyZQ\]DZLHUDW\ONRF]üVNU\SWRZQLHMHVWWZRU]RQ\
GODQLHJR*DGHQSOLNZ\QLNRZ\
3U]\NáDGRZ\V]DEORQJáyZQ\
3
W obecnej wersji „
*DQGDOI´XPR*OLZLDJHQHUDFMW\ONRMHGQHJRPRGXáX
Generowanie aplikacji Borland Delphi w oparciu o repozytorium CASE – Oracle Designer
®
53
{#
const
DETAIL_PAS_TEMPLATE = 'DETAIL_PAS.tpl'; // szablon dla bloków detali
DETAIL_DFM_TEMPLATE = 'DETAIL_DFM.tpl';
MASTER_PAS_TEMPLATE = '
0$,1B3$6WSOV]DEORQGODEORNXJáyZQHJR
MASTER_DFM_TEMPLATE = 'MAIN_DFM.tpl';
PROJECT_TEMPLATE = 'PROJECT.tpl'; // szablon projektu
CONSTRAINTS_TEMPLATE = 'CONSTRAINTS.tpl'; // szablon dla komunikatów
var
i:integer;
begin
JHQHUDFMDEORNXJáyZQHJR
Gen(0,MASTER_PAS_TEMPLATE,TgndBlock(ModuleBlocks.Items[0]).Name+'_m.pas');
Gen(0,MASTER_DFM_TEMPLATE,TgndBlock(ModuleBlocks.Items[0]).Name+'_m.dfm');
// generacja bloków detali
i := 1;
while (i < blocks.count) do begin
Gen(i,DETAIL_PAS_TEMPLATE,TgndBlock(ModuleBlocks.Items[0]).Name+'_u.pas');
Gen(i,DETAIL_DFM_TEMPLATE,TgndBlock(ModuleBlocks.Items[0]).Name+'_u.pas');
Inc(i);
end;
//generacja projektu
Gen(0,PROJECT_TEMPLATE,ModuleName+'.dpk');
// generacja komunikatów
Gen(0,CONSTRAINTS_TEMPLATE,'Messages.sql');
end
;
#}
6]DEORQ\ JHQHUXMFH V V]DEORQDPL Z RSDUFLX R NWyUH WZRU]RQH V ZáDFLZH SOLNL RSLVXMFH
IRUPDWNLSURMHNW,FK]DZDUWRüMHVWFLOH]DOH*QDRGSU]\MW\FKVWDQGDUGyZRUD]RGW\SXSURMHNWX
SOLNZ\NRQ\ZDOQ\ELEOLRWHND%3/LWG']LNLPR*OLZRFLXPLHV]F]DQLDVNU\SWyZZV]DEORQDFK
PR*QDGRVWRVRZDüZ\QLNJHQHUDFMLGRZáDVQ\FKSRWU]HE
)UDJPHQW\VNU\SWXJHQHUXMFHJRPROJECT.tpl):
package
%MODULE_NAME%;
{$R *.RES}
^$/,*121`UHV]WD]RVWDáDXVXQLWDGODFHOyZSU]\NáDGX
requires
vcl50,
&RP$UFKSUHV]WD]RVWDáDXVXQLWDGODFHOyZSU]\NáDGX
contains
{#
var
i:integer;
s:string;
begin
for i := 0 to ModuleBlocks.count-1 do begin
s := TgndBlock(ModuleBlocks[i]).Name;
s := s+' in '''+s+'.pas'' {'+s+'}';
if i = ModuleBlocks.count-1 then
print(s+';')
else
print(s+',');
end
;
#}
54
Janusz
3HUHN0LFKDá:LQLHZVNL
end
.
4. Zastosowanie
Proces przygotowywania „
*DQGDOID´ GR JHQHUDFML IRUPDWHN QDOH*\ UR]SRF]ü RG VWZRU]HQLD
V]DEORQyZJHQHUDFML:]DOH*QRFLRGDUFKLWHNWXU\UHDOL]RZDQHMDSOLNDFMLUy*QDEG]LH]DZDUWRü
V]DEORQX JáyZQHJR RUD] V]DEORQX JHQHUXMFHJR SURMHNW =DZDUWRü V]DEORQyZ JHQHUXMF\FK
IRUPDWNL Z ZLNV]RFL SU]\SDGNyZ EG]LH QLH]DOH*QD OXE EDUG]R PDáR ]DOH*QD RG SU]\MWHM
architektury.
$UFKLWHNWXUDV\VWHPXGRNWyUHMJHQHURZDQHVIRUPDWNL]Z\NRU]\VWDQLHPÄGandalfa” oparta
MHVWR]DáR*HQLH*HND*G\PRGXáMHVWRVREQELEOLRWHN%3/7DNLH]DáR*HQLHGDMHGX*HODVW\F]QRü
Z UHDOL]DFML SURMHNWX ± áDWZRü G]LHOHQLD ]DGD QD SRV]F]HJyOQ\FK Z\NRQDZFyZ MDN UyZQLH* Z
UR]V]HU]DQLXDSOLNDFML±ZV]\VWNLHPRGXá\áDGRZDQHVG\QDPLF]QLHDOLVWDGRVWSQ\FKPRGXáyZ
MHVW ]DSDPLWDQD Z ED]LH (IHNWHP WDNLHJR ]DáR*HQLD MHVW RGSRZLHGQL V]DEORQ JHQHUXMF\ SOLN
SURMHNWXSU]\NáDG±SDWU]UR]G]LDá
: ND*G\ PRGXOH SU]HJOGDQLH GDQ\FK RGE\ZD VL Z EORNX ZLHORUHNRUGRZ\P D PRG\ILNDFMH
L ZVWDZLDQLH Z EORNX MHGQRUHNRUGRZ\P EORN V]F]HJyáyZ NWyU\ ]QDMGXMH VL SRQL*HM EORNX
wielorekordowego.
5\V6WUXNWXUDZL]XDOQDJHQHURZDQ\FKPRGXáyZ
&]VWR ]GDU]D VL WDN *H EORN V]F]HJyáyZ MHVW ]DJQLH*G*RQ GUXJ IRUPDWN RVDG]RQ Z
IRUPDWFHJáyZQHM-H*HOLIRUPDWNDSRVLDGDGX*RV]F]HJyáyZQLHPLHV]F]VLQDMHGQHMIRUPDWFH
DOERSRVLDGDGHWDOHWRVRQHGRGDZDQHQDNROHMQ\FK]DNáDGNDFKEORNX
3URFHV SURMHNWRZDQLD PRGXáX Z 2UDFOH Designer’ze wymaga zwrócenia uwagi na fakt,
*HVWDQGDUGPRGXáXZ\PDJDDE\PLHFLáVLRQZMHGQ\PRNQLH
:QLRVNLLSODQ\QDSU]\V]áRü
Zastosowanie „Gandalfa” w procesie tworzenia systemu informatycznego spowoduje skrócenie
F]DVX SRWU]HEQHJR GR Z\NRQ\ZDQLD QRZ\FK PRGXáyZ RUD] XáDWZL ]DFKRZDQLH ZHZQWU]Q\FK
VWDQGDUGyZ 3RáF]HQLH NRU]\FL MDNLH Z\QLNDM ] OHSV]HM GRNXPHQWDFML SURFHVX SURGXNFML
RSURJUDPRZDQLDZRSDUFLXRUHSR]\WRULXP]PR*OLZRFLDPLQDU]G]LDMDNLPMHVWBorland Delphi
pozwoli na stworzenie lepszego produktu.
*HQHUDFMDPRGXáyZ'HOSKLQDED]LHUHSR]\WRULXP2UDFOH'HVLJQHUMHVWGRSLHURSRF]WNRZ\P
HWDSHP WZRU]HQLD ]DDZDQVRZDQHJR URGRZLVND SURJUDPLVW\F]QHJR : SU]\V]áRFL SODQXMH VL
Generowanie aplikacji Borland Delphi w oparciu o repozytorium CASE – Oracle Designer
®
55
UR]EXGRZDQLH PR*OLZRFL Ä*DQGDOID´ R JHQHURZDQLH ZLHOX PRGXáyZ QD UD] Z\NRU]\VWXMF
GRGDWNRZH LQIRUPDFMH ] UHSR]\WRULXP R SRZL]DQLDFK SRPLG]\ PRGXáDPL Z\NRQDQLH GDOV]HM
LQWHJUDFMLQDU]G]LXPR*OLZLDMFGRVWSSU]HJOGDQLHLPRG\ILNDFMHGRGLDJUDPyZ]DSLVDQ\FKZ
UHSR]\WRULXP EH]SRUHGQLR ]H URGRZLVND Borland Delphi, oraz rozszerzenie zestawu danych
SRELHUDQ\FK]UHSR]\WRULXP]ZL]DQ\FK]GHILQLFMPRGXáX
5R]ZD*DQDMHVWWDN*HZVSyáSUDFD]F]FLRELHNWRZ2UDFOHDesigner’a – tworzenia diagramów
80/ GOD Z\JHQHURZDQ\FK PRGXáyZ 5R]SDWUXMHP\ UyZQLH* PR*OLZRü LQWHJUDFML 2UDFOH
'HVLJQHUD]LQQ\PLQDU]G]LDPLSURJUDPLVW\F]Q\PLILUP\Inprise np.: JBuilder.
Bibliografia
1.
Scherer D., Koletzke P.: Oracle Designer API: Multiline Text and Other Secrets, IOUG-A Conf.,1999
Paper#705
2.
Kinas R. : Open
7RROV$3,±UR]EXGRZDQLHPR*OLZRFL
Delphi, Borland Developer’s Days, Warszawa,
16 - 17 maj 2000
3.
www.dreamcompany.com