Laste ned presentasjonen
Presentasjon lastes. Vennligst vent
PublisertAndrea Lund Endret for 9 år siden
1
Persistenslag i Fakir Teori og praksis
2
Bruk av persistenslag 4 Felles interface for alle record brokere: interface IDbRecordBroker : IDispatch { HRESULT Record([in] VARIANT vID, [out, retval] VARIANT* pRecord); HRESULT Record([in, optional] VARIANT vID, [in, out] VARIANT* pvRecord); HRESULT Create([in, out] VARIANT* pvRecord); HRESULT Retrieve([in] VARIANT vID, [out, retval] VARIANT* pvRecord); HRESULT Update([in, out] VARIANT* pvRecord); HRESULT Delete([in] VARIANT* pvRecord); HRESULT Search([in, optional] VARIANT vFilter, [out, retval] VARIANT* pResults); };
3
Argumenter: 4 VARIANT* pvRecord : Skal inneholde en VARIANT med vt=VT_RECORD. Recorden er av den typen som svarer til brokeren (f.eks. AccountEntry for AccountEntryBroker). For input argumenter kan det i fremtiden være en ide å bruke VT_ARRAY|VT_RECORD. 4 VARIANT* vResult : Skal inneholde en VARIANT med vt = VT_ARRAY|VT_RECORD, eller med vt = VT_EMPTY dersom søket ikke ga noen treff. Recorden skal være av typen svarer til brokeren. 4 VARIANT vID : Skal inneholde en unik identifikator for typen som brokeren bruker. være av VT_RECORD (delvis utfylt record), VT_ARRAY|VT_VARIANT (avhengig type), eller VT_BSTR (serialisert primærenøkkel). 4 VARIANT vFilter : Skal inneholde et søkefilter. Typen er avhengig av hvilken det er snakk om. Noen brokere har egne filter-records, som kan som argument. Ellers skal det alltid være lovlig å sende inn en VT_EMPTY (hent alle records), eller en VT_BSTR (tolkning avhengig av broker). Det er også vanlig for en broker å kunne tolke en VT_ARRAY|VT_VARIANT.
4
Bruk, oppskrift: Visual C++ // Lag et filter (bruker to hjelpefunksjoner IRecordInfoPtr pRecInfo = DataLayerRecordInfo(UUID_BankTransactionFilter); BankTransactionFilter* pFilter = (BankTransactionFilter*)(RecordCreate(pRecInfo)); // Fyll opp filteret pFilter->Currency = _variant_t(L"NOK").Detach(); _variant_t vDateBegin(L"1999/01/01"); _variant_t vDateEnd(L"1999/10/10"); vDateBegin.ChangeType(VT_DATE); vDateEnd.ChangeType(VT_DATE); pFilter->DateBegin = vDateBegin.date; pFilter->DateEnd = vDateEnd.date; pFilter->Ledger = _variant_t(L"10030").Detach();
5
Visual C++ (forts.) // Lag en komponent IDbRecordBrokerPtr pBroker(__uuidof(BankTransBroker)); _variant_t vResult = pBroker->Search(toVariant(pFilter,pRecInfo); typedef ADNComUtil::CSafeArray2 BankTransArray; BankTransArray array(vResult); for ( BankTransArray::const_iterator it=array.begin(); it!=array.end(); ++it ) std::cout << *it; // Må definere egen operator<< BankTransaction* pTrans = array.front(); ::SysReallocString(pTrans->Notes, L"HELLO WORLD"); pBroker->Update(pTrans); pTrans = array.at(1); pBroker->Delete(pTrans); // Osv.
6
Bruk: Visual Basic ‘ Lag filter Dim filter As DBSEARCHLib.AccountEntryFilter filter.Currency = "NOK" filter.DateBegin = #1/1/1999# filter.DateEnd = #9/10/1999# filter.SettledStatus = 3 Dim custActs(4) As String custActs(0) = "1234" custActs(1) = "2" custActs(2) = "3" custActs(3) = "4" custActs(4) = "6" filter.CustomerAccounts = custActs
7
Visual Basic (forts) Dim search As DBSEARCHLib.AccountEntrySearch Set search = New DBSEARCHLib.AccountEntrySearch Dim res As Variant res = search.search(filter) For i = LBound(res) To UBound(res) Step 1 Dim actEnt As DBSEARCHLib.AccountEntry actEnt = res(i) Dim mystr As String With actEnt mystr = "Bilagsnr : " +.VoucherNo + "-" +.EntryNo mystr = mystr + ". Beløp : " + _ CStr(.TransactionAmount.AmountInCurrency) mystr = mystr + " " +.TransactionAmount.Currency End With List1.AddItem mystr Next
8
Implementasjon: 4 Noen nøkkelklasser 4 Strategi 4 Problemer og utfordringer 4 Andre tanker
9
Klasser 4 ConnectionManager : Tillater at man putter inn brukernavn og passord, og sørger for transaksjonshåntering. 4 CSqlQuery : En "tavle" man kan bygge et SQL kall på. Lar en lage et SQL kall uten å drive med for mye strengmanipulering. 4 CoDbRecordBroker : Gir en superklasse som man kan arve fra for å forenkle implementeringen av en broker.
10
ConnectionManager
Liknende presentasjoner
© 2024 SlidePlayer.no Inc.
All rights reserved.