En Multi-Client-ECO program example.

Søknaden vi skal bygge kan brukes til å fange arbeidstid og pauser i løpet av arbeidstid. Den arbeidstid kan fanges med flere klienter og serverprogrammet gir en visning av alle data fanget. [Klienten delen] Du starter med å sette opp en Winform eco program. Dette programmet skal være klienten. Jeg kalte det WorkTimeClient.You må ha UML klasser i en pakke slik at du kan legge dem senere til serveren application.Create følgende modell:
arbeidstid og break er spesialiserte klasser av en tidsperiode. En arbeidstid kan ha flere breaktimes.The drift calcTotal gir tilbake tidsperiode på en arbeidstid redusert med akkumulert timespans av Break. Resultatet av calctotal ligger i diff egenskap av arbeidstid klassen. Sørg for at du endre klassene etter følgende kodesnutter: funksjon timestartend.calcTotal (): tidsrom, begynner Resultat: = Tidsrom (Self.endtime-Self.starttime); end; funksjon worktime.calcTotal (): Tidsrom; varib: IbreaktimeList, jeg: Integer; beginib: = get_breaktime; for i: = 0 til ib.Count-en ikke starter Self.diff: = Self.diff - ib.Item [i] .calcTotal; end, end, funksjon breaktime.get_diff: Timespan, begynner //Hvis du legger til brukerkode her, må du fjerne den [EcoAutoMaintained] attributt //fra eiendommen erklæring i grensesnittet delen Resultat: = Tidsrom (Self._endtime-Self._starttime ); end; funksjon worktime.get_diff: Timespan, begynner //Hvis du legger til brukerkode her, må du fjerne den [EcoAutoMaintained] attributt //fra eiendommen erklæring i grensesnittet delen Resultat: = Timespan (Self._endtime - Self._starttime ); end;
nå kompilere programmet, gå til ecospace designer og legge pakken til ecospace. Sett en PersistenceMapperXml komponent på ecospace slik at du kan utvikle klienten uten behov for server-delen så langt. Sett filnavnet til persistencemapper å data.xml eller hva suiter du well.Switch nå til Winform og lage en frontend som ligner på dette: Legg to uttrykk håndterer og valuta leder Håndtak for datagrids.In for å få den siste raden av Datagrid valgt å sette inn følgende kode i datagrids Paint hendelsen:
prosedyre TWinForm.DataGrid1_Paint (avsender: System.Object; e: System.Windows.Forms.PaintEventArgs);beginDataGrid1.BindingContext[dataGrid1.DataSource,dataGrid1.DataMember].Position : = EhWorkTime.GetList.Count; cmhWorktime.Position: = ehWorkTime.GetList.Count; end;
Det kan trolig være smartere steder å sette det - men jeg vet ikke dem;-) Men kan du gi meg beskjed i Hvis du know.For det enkelt klient test av programmet kan du bare tilordne Update Database EcoAction til Update DB Button - mens i Multi Client innstillingen du trenger følgende kode: varc: IEndre; begynne EcoSpace.PersistenceService.RetrieveChanges; for ci EcoSpace.PersistenceService.GetChanges gjøre hvis c.IsDirectConflict deretter c.Action: = ChangeActionKind.Discard annet c.Action: = ChangeActionKind.Keep; EcoSpace.PersistenceService.ApplyAllChanges; end;
Denne koden henter via EcoSpace utholdenhet service alle vedvarte endringer. Det kan i en multiklientmiljøet skje at noen endrede data som du allerede hadde vært skiftende i din lokale ecospace cache. Utholdenhet tjenesten gir deg muligheten til å håndtere konflikter hvis det er tilfelle. Jeg vårt tilfelle (innlogging arbeidstid) det bør ikke skje though.Nevertheless etter at du har hentet de endringene du går via for ... i løkke over dem for å sjekke om du har en konflikt eller ikke. Du må sette for hver IEndre grensesnittet i GetChanges listen handlingen som skal brukes når ApplyAllChanges prosedyren er called.If du ferdig klienten på denne måten er det eneste igjen for å aktivere den for klient-server er å endre persistencemapper. Vi trenger en PersistenceMapperClient komponent på vår ECOSpace siden dette ikke er på ECO componet Palette som standard. Vi må legge det på følgende måte:

høyreklikk på verktøypaletten og velg "Installerte NET komponenter» fra lokalmenyen.
Deretter drar du den til øko category.Delete den PersistenceMapperXML klienten fra ecospace og slippe PersistenceMapperClient på den. Sett url egenskapen til "tcp: //localhost: 8000 /TestServer1" - siden vi vil ha serveren en klient som kjører på vår lokale maskinen før distribusjon. Lagre prosjektet og lukke den eller la den stå åpen hvis du vil ha klient og server i en prosjektgruppe. Siden det ikke vil kjøre så lenge vi har vår server utviklet -. Oppe og går fordi kontakten den peristencemapperclient prøver å koble til vil ikke bli registrert product: [Serveren del] Opprett en ny ECO Winform prosjekt. Jeg kalte det WorkTimeServer.Add den Arbeidstid klasser pakke og en utholdenhet mapper leverandør:
I vårt eksempel bruker vi Interbase med BDP. Så slippe en PersistenceMapperBdp og en BdpConnection komponent på PersistanceMapperProvider ECOSpace. Sett opp PersistenceMapperBDP for Interbase og konfigurere tilkoblingen av BDPConnection i henhold til din lokale miljøet. Du trenger bare å sette opp en tom database. Tabellene vil bli opprettet senere via utholdenhet mapper provider.Go til ecospace (ikke persistencemapperprovider men den som er koblet til Winform) og velg arbeidstid pakken fra listen tilgjengelige pakker:
kompilere prosjektet og velger EcoSpaceType som skal brukes for utholdenhet mapper leverandøren. (Klikk på overflaten av utholdenhet mapper leverandør og velger den fra rullegardinlisten i objektet inspektør) .Du kan nå klikke på Generer skjema nederst på EcoPersistanceMapper Provider. Resultatet skal se slik ut:
Du må nå uncomment koden for remoting i utholdenhet mapper leverandøren. Ikke glem å uncomment erklæringen av prosedyren og for å legge den nødvendige gjennomføringen bruker-erklæring som nevnt i kommentarfeltet.
//Eksempelkode for registrering av leverandøren som en server ved hjelp //binær formatering på en TCP channel.//legge til følgende i implementeringen nivået bruker-erklæringen når uncommenting kode //System.Runtime.Serialization.Formatters, System.Runtime.Remoting, System.Runtime.Remoting.Channels, System.Runtime.Remoting.Channels.Tcp; klasse prosedyren TEcoPersistenceMapperProvider.RegisterTcpServer (Port: integer); Var leverandør: BinaryServerFormatterSinkProvider; rekvisitter: IDictionary; chan: TcpChannel, begynner leverandør: = BinaryServerFormatterSinkProvider.Create; provider.TypeFilterLevel: = TypeFilterLevel.Full; //Trengs for seriefunksjoner rekvisitter: = Hashtable.Create; rekvisitter [ 'port']: = Port; chan: = TcpChannel.Create (rekvisitter, null, leverandør); ChannelServices.RegisterChannel (chan); RemotingConfiguration.RegisterWellKnownServiceType (typeof (TEcoPersistenceMapperProvider), 'TestServer1', WellKnownObjectMode.Singleton); end;
å fullføre konfigurasjonen Persistence Mapper operatøren konfigurere attributtet SyncActive til sann. Du kan også øke verdien av attributtene MaxOpenConnections og MaxPoolConnections hvis du har en rekke klienter som kobler seg til server.Now legge en PersistanceMapperClient til Ecospace. Sett url eiendom til tcp: //localhost: 8000 /TestServer1 eller hvis du endret RegisterTCPServer prosedyren til verdiene du følger med det.Vi har må ringe RegisterTCPServer komponent før PersistenceMapperClient er initialisert. For å gjøre dette endrer konstruktøren av EcoSpace som følger:
konstruktør TWorkTimeServerEcoSpace.Create; begynne arvet Opprett; EcoPersistenceMapperProvider.TEcoPersistenceMapperProvider.RegisterTcpServer (8000); InitializeComponent; //TODO: Legg noen konstruktør kode hereend;
Serveren delen er nå allerede i full drift. Hvis du vil legge litt innsikt i dataene levert av våre arbeider kunder vi skaper følgende frontend: I timer tick tilfelle du koden Persistence Servicekode allerede kjent fra klienten: prosedyre TWinForm.Timer1_Tick (avsender: System.Object; e: System. EventArgs); varc: IEndre; begynne EcoSpace.PersistenceService.RetrieveChanges; for ci EcoSpace.PersistenceService.GetChanges gjøre hvis c.IsDirectConflict deretter c.Action: = ChangeActionKind.Discard annet c.Action: = ChangeActionKind.Keep; EcoSpace.PersistenceService.ApplyAllChanges; end;
Sett timeren aktivert eiendom til sann. Lagre og starte prosjektet og løsne den fra Delphi.
Åpne klienten prosjektet igjen. Start klientprosjektet løsne den og starte en ny klient. Endre brukernavn i andre klient og eksperimentere. Det skal jobbe, og det er veldig lett når oppnådd - ECO kan gjøre deg virkelig happy.Please gi meg beskjed hvis jeg savnet noen viktige skritt for å forstå hvordan du gjør det, eller hvis jeg gjorde noe ikke beste praksis like. Jeg vil endre artikkelen da i henhold til tilbakemeldingene.


    samplecode av serveren og klienten kan bli funnet her.