Kode Avledet kolonner i ECO II

Forklarer hva Kode Avledet Kolonner er, og hvordan du bruker dem https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848
fokus i denne artikkelen vil være ". Hendelses avledet kolonner " https://computer.sciencearticles.cc/no/ { $ UploadDir} /201512/2015120416471848. Jan Nord é n (Borland) pekte meg i retning av disse tingene nylig da jeg spurte ham hvordan han skulle løse et GUI problemet jeg hadde https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848. Når jeg brukte Fet for Delphi var det dette virkelig hyggelig GUI komponent kalt en BoldSelectionListBox https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848. Denne komponenten ville la meg vise en liste over elementer med boksen ved siden av hver rad, sette /fjerne kryss en boks ville legge til /fjerne en tilknytning element mellom det valgte elementet og et annet objekt i mitt valg https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512 /2015120416471848. Det er ikke den beste forklaringen i verden, så ta en titt på følgende UML diagram:
Dette diagrammet er noe jeg har jobbet med nylig i ECO II https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848. Det er min tolkning av informasjonen som er nødvendig for å skape en induktiv User Interface https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848. Ser på UML diagram nøye vil du se at hver oppgave har null eller mange PermittedRoles (Role) referanser https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848. Ideen om at ved å angi rollen til den aktuelle brukeren kan jeg lett få en liste over oppgaver som de har lov til å utføre https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848.
Ved hjelp av denne BoldSelectionListBox jeg ville være i stand til å angi en oppgave som kontekst, og deretter har en liste over alle roller i et slags CheckListBox https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848. Flått ville dukke opp i alle avmerkingsboksene der rollen har tillatelse til å utføre handlingen oppført, og ingen kryss der det ikke er https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848. Den ekstra smarte delen av kurset er at ved å krysse av i en avmerkingsbokser Fet ville skape lenken objektet nødvendig å knytte Rollen til oppgaven, og legge den til Rolle https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848.AllowedTasks (og selvfølgelig Taskhttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.PermittedRoles)https://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.
Seeing at ECO II ikke innføre noen GUI-kontroller (den i stedet gir https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848.net databinding grensesnitt, slik at du kan bruke standardkontroller), mistenkte jeg at jeg ikke ville være i stand til å oppnå den samme typen av effekt https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848. Jan ber sendt meg en liten demo som viser hvordan man skal oppnå dette ved hjelp av bare DataGrids https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848. Jeg hadde snart denne logikken skrevet inn i min egen app, og det fungerte vakkert!
jeg lagt uttrykk håndtak for mine roller (ehRoles) og oppgaver (ehTasks), koblet dem opp til et rutenett hver og lagt Legg til /slett knappene https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848 . jeg satt hver av disse uttrykk håndterer å hente alle tilfeller, " Roller https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848.allInstances", og "Taskshttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.allInstances"https://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.
On venstre side av GUI mitt hadde jeg alle mine oppgaver er oppført, og på høyre jeg hadde alle mine roller https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848. jeg nå ønsket å legge til en avkrysningsboks ved siden av hver rolle, slik at Jeg kunne angi om rollen fikk lov til å utføre gjeldende valgte oppgave eller ikke https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848 Det første problemet å takle er å vite hvilke oppgave er ". øyeblikket er valgt " én https://computer.sciencearticles.cc/no/ { . $ UploadDir} /201512/2015120416471848 å gjøre dette jeg lagt en CurrencyManagerHandle heter ". chTasks ", satt sin RootHandle til ehTasks, og dens BindingContext å TasksDataGrid https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848 Nå chTasks innehar den aktuelle oppgaven , fin og enkel https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848.
Neste jeg trengte å få en avkrysnings kolonne i min RolesDataGrid og satt AllowNull til False https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848. For å gjøre dette Jeg har lagt en falsk TaskPermitted kolonne for å ehRoles og sette sitt slag til Systemhttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.Booleanhttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848. Merk:. Den " Legg til " -knappen i kolonner redaktøren har en dropdown-ikonet ved siden av den, klikker det og velge EventDerivedColumn https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848 Jeg deretter lagt ekstra kolonne til min RolesDataGrid, for å være sikker det var en avkrysnings jeg valgte nedtrekksliste på knappen Legg til og valgt DataGridBoolColumn https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848. stiller jeg MappingName å TaskPermitted https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848.
Så langt vi har alt vi trenger å se av i rutene, men ingen måte å fortelle Datagrid om avkrysnings skal være krysset eller ikke https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848. For å gjøre dette må vi skrive litt kode inn i ehRoles 'DeriveValue hendelse, men først vil jeg legge til noe for å gjøre koden litt lettere å skrive https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848. la jeg en ny ExpressionHandle ehTasksPermittedRoles, den RootHandle var CurrencyHandle (chTasks) og uttrykket var "selfhttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.PermittedRoles"https://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848. Dette ville tillate meg å enkelt sjekke hvilke roller har tillatelse til å kjøre " nåværende Task " https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848
nå å skrive noen kode for å beregne verdien av. ehRoleshttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.TaskPermittedhttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848. Dette gjøres i ehRoles https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848.DeriveValue hendelse, som så:
private void ehRoles_DeriveValue (objekt avsenderen, Borlandhttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.Ecohttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.Handleshttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.DeriveEventArgs e) {switch (e https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848.Name) //En begivenhet for alle som stammer kolonner {case " TaskPermitted ": //Få en liste over tillatte roller for denne oppgaven
IElementCollection roller = ehTasksPermittedRoles https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848.Element som IElementCollection;
//Unngå en nullreferanse unntak
if (roller == null) {//returnerer et element som representerer den konstante " false " e https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848.ResultElement = EcoSpacehttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.VariableFactoryServicehttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.CreateConstant(false); return;}
//Observer ehTaskPermittedRoles element, dette forteller oss når element //endringer slik at vi kan oppheve GUI ehTasksPermittedRoleshttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.SubscribeToElement(ehttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.ResubscribeSubscriber);
//Observere Også elementene i listen roleshttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.SubscribeToValue(ehttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.ValueChangeSubscriber);
//Hvis de tillatte roller inneholder nåværende rolle så tilbake //et element som representerer den konstante " ekte "
hvis (roleshttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.Contains(ehttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.RootElement)) e https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848.ResultElement = EcoSpacehttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.VariableFactoryServicehttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.CreateConstant(true); ellers //Ellers returnere et element som representerer den konstante " false " e https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848.ResultElement = EcoSpacehttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.VariableFactoryServicehttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.CreateConstant(false); break;
standard: kaster nytt unntak (e https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848.Name + " ikke avledet riktig ");} //bryter} //ehRoles_DeriveValue
Og til slutt vi må ha en måte å tillate brukeren å tikke /rotete en avkrysningsboks og har relevant tilknytning til eller fjernes fra Taskhttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.PermittedRoleshttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848. Dette gjøres i ehRoles https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848.ReverseDeriveValue hendelse, som soprivate void ehRoles_ReverseDeriveValue (objekt avsenderen, Borlandhttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.Ecohttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.Handleshttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.ReverseDeriveEventArgs e) {switch (e https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848.Name) //En begivenhet for alle som stammer kolonner {case " TaskPermitted ": //Få en liste over tillatte roller for den aktuelle oppgaven IElementCollection roller = (IElementCollection) ehTasksPermittedRoles https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848.Element;
//Unngå en nullreferanse unntak hvis (roller == null) tilbake;
//typecast verdien blir satt til en boolsk (fra Datagrid avmerkingsbokser) if ((boolsk) e https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848.Value) {//Hvis avmerkingsboksen er blitt kontrollert, og haket rolle er ikke i //Task https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848.PermittedRoles liste deretter legge det hvis (!roleshttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.Contains(ehttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.RootElement)) roleshttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.Add(ehttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.RootElement); } Else {//Hvis avmerkingsboksen har vært ukontrollert, og det tikket Rolle finnes i listen //Taskhttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.PermittedRoles deretter fjerne den hvis (roleshttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.Contains(ehttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.RootElement)) roleshttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.Remove(ehttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471848.RootElement); } Break;} //bryter} //ehRoles_ReverseDeriveValue
Det kan ta litt tid å venne seg til, men hvis du leser det gjennom et par ganger du skal kunne få like ved av det https://computer.sciencearticles.cc/no/ {$ UploadDir } /201512/2015120416471848. Dette gir i utgangspunktet utvikleren kraften av revers avledet attributter for bruk utelukkende innenfor GUI https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848. Dette betyr at vi kan gjøre noen smarte ting med ECO II objekter uten å ha å inkludere omvendt avledet attributter i modellen for å tilfredsstille kravene GUI https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471848.



Previous:
Next Page: