Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Persistenslag i Fakir Teori og praksis. Bruk av persistenslag 4 Felles interface for alle record brokere: interface IDbRecordBroker : IDispatch { HRESULT.

Liknende presentasjoner


Presentasjon om: "Persistenslag i Fakir Teori og praksis. Bruk av persistenslag 4 Felles interface for alle record brokere: interface IDbRecordBroker : IDispatch { HRESULT."— Utskrift av presentasjonen:

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


Laste ned ppt "Persistenslag i Fakir Teori og praksis. Bruk av persistenslag 4 Felles interface for alle record brokere: interface IDbRecordBroker : IDispatch { HRESULT."

Liknende presentasjoner


Annonser fra Google