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

Slides:



Advertisements
Liknende presentasjoner
std::basic_string En oversikt over C++ Standard bibliotekets streng-klasse.
Advertisements

ADA 95 – del3 Foreleser: Olaf Hallan Graven Bok: Programming in ADA95 (2nd) John Barnes.
Triggere Mutasjoner i basen. Triggers Triggers are stored procedures that execute automatically when something (event) happens in the database: : data.
Forelesning 9 Are Raklev.
Den epigenetiske klokken
Arbeidsgiver skal utføre risikovurdering.
AST En kosmisk reise Forelesning 2:
Nye Bildrivstoff Rotary Skien Nye Bildrivstoff Rotary Skien
Forsering av fag og fraværsgrense i videregående skole
Lokal organisering STUDIELEDERE
Påskeminicamp kunstløp 8-10 April i Tromsø.
Hvilke spørsmål har dere etter å sett denne rullen?
SAB Arbeidsgruppe 4 – organisasjons- og beslutningsstruktur
Ungdomstrinn i utvikling på Volda ungdomsskule
Informasjonsmøte
Are Raklev Teoretisk fysikk, rom FØ456,
Lecture 10.
Are Raklev Teoretisk fysikk, rom FØ456,
ELEVER, FORELDRE OG DE SOM JOBBER PÅ EKROM OG KRINGSJÅ
Østensjøvannet. Det virkelig levende vassdraget.
Fagkonferansen om karriereveiledning 3.og4.mai 2017.
Student-IT våren 2001 Studenter og IT ved Universitetet i Oslo
- Ladningenes rundreise
Krefter og trafikk Gjere reie for omgrepa fart og akselerasjon
Are Raklev Teoretisk fysikk, rom FØ456,
Are Raklev Teoretisk fysikk, rom FØ456,
Are Raklev Teoretisk fysikk, rom FØ456,
Overføringsflyktninger
Forelesning 10 Are Raklev.
Forelesning 9 Are Raklev.
Forelesning 27 Are Raklev.
Orientering for Komité for teknikk, kultur og fritid 4. mai 2017
Litt historikk.
Utdanningsavdelingen Inntak og fagopplæring
Brevet til menigheten i Smyrna, Åp 2:8-11
Hvorfor ikke satse på helse? Hva vet vi, og hva kan vi gjøre?
Velkommen til foreldremøte
Hva er en utrydningstrua art?
Periodeplan for Sommerly uke 6 og 7 AKSJON FORUT
INNOVASJONSCAMP November 2016 i Oppdal Kulturhus
Lecture 9.
Are Raklev Teoretisk fysikk, rom FØ456,
Omvendt proporsjonale storleikar
Forelesning 6 Are Raklev.
Are Raklev Teoretisk fysikk, rom FØ456,
Forelesning 17 Are Raklev.
Are Raklev Teoretisk fysikk, rom FØ456,
Forelesning 15 Are Raklev.
Are Raklev Teoretisk fysikk, rom FØ456,
Forelesning 12 Are Raklev.
Are Raklev Teoretisk fysikk, rom FØ456,
Forelesning 5 Are Raklev.
Forelesning 11 Are Raklev.
Forelesning 24.
Fraksjoneringsrespons
Are Raklev Teoretisk fysikk, rom FØ456,
Introduksjon til Partikkelfysikk
Ytre Nordfjord Turlag 2017.
Rettssikkerhet i digital forvaltning - og litt om forholdet til personvern Dag Wiese Schartum.
Posisjoneringsprosessen
Sitat fra Sorgenfri av Jo Nesbø
Matematikk i ungdomsskolen
Prosent Læringsmål Eksempler.
Tro og vitenskap En historisk utvikling
Klarer du oppgavene, og kan dere forklare løsningene?
Diagnostisk undervisning B – Samarbeid
Diagnostisk undervisning B – Samarbeid
Makroøkonomi for økonomer BI Trondheim Johannes Mauritzen K4.3 Steigum
Makroøkonomi for økonomer BI Trondheim Johannes Mauritzen K3 Steigum
Utskrift av presentasjonen:

Persistenslag i Fakir Teori og praksis

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); };

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.

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();

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.

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

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

Implementasjon: 4 Noen nøkkelklasser 4 Strategi 4 Problemer og utfordringer 4 Andre tanker

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.

ConnectionManager