16. januar 2006 - 12:25Der er
20 kommentarer og 1 løsning
Forhindre at flere arbejder i samme side.
Hej Alle Jeg ved ikke rigtig om dette skal løses via PHP el. MySQL. Jeg har en side hvor man kan se- og redigere en sag. Flere kan se den samme sag og foretage diverse handlinger. Problemet er at det er meget vigtigt at logikken i den rækkefølge handlingerne på sagen udføres er helt afgørende. Et eksempel: For at afslutte sagen skal man tege sagen. Hvis en medarbejder tager sagen for at afslutte den er det helt afgørende at en anden medarbejder ikke derefter tager sagen og afslutter den før den første bliver færdig. Så bliver den jo afsluttet 2 gange! Hver gang en sag afsluttes autogenereres en mail til klienten om at deres sag er afsluttet, og så vil de jo modtage 2 mail. Har nogle et godt forslag til hvordan man sikrer at kun 1 medarbejder kan læse/arbejde på en sagen af gangen.
Der bliver investeret massivt i AI. Teknologien er mere tilgængelig end nogensinde, og ambitionerne er høje. Alligevel oplever mange virksomheder, at resultaterne udebliver.
P.s. Først tænkte jeg på noget i retning af at sætte lock på posten i tabellen, men det kan jo være at man bare afslutter sit arbejde ved at lukke browseren, og så vil der ikke komme nogen kommando til MySQL om at udføre unlock.
Jeg kan ikke præcist huske hvordan sessionID anvendes. Sender browseren besked til serveren om at den bliver lukket, og dermed stopper session? Medarbejderne kan have sagerne åbnet i timevis. Er der ikke noget med at sessions har en udløbstid? Kan man anvende sessions således at f.eks. en variabel $aktiv = true kan anvendes til at give andre tilladelse til nogle handlinger men ikke til andre? Altså en slags delvist read-only. Mvh Christian
Mit bud, lav to nye felter, "locked" datetime/int og "byuser" som er brugerens id. Hvis locked er udfyldt, og nyere end 1 minut så er den låst. Brugeren der arbejder med sagen, skal nu bare have et lille javascript på siden, der opdaterer feltet mindst én gang i minuttet. Javascriptet kunne laves sådan:
<script type="text/javascript"> function updLock() { upd = new Image; d = new Date; upd.src = "http://example.dk/updatelock.php?sagnr=123&" + d.getTime(); setTimeout( "updLock()", 45000 ); } window.onload = updLock; </script>
Ideen med opdatering af siden hvert minut el. så virker umiddelbart hel fin. Men der er det problem at hvis medarbejderen arbejder på siden (f.eks. udfylder et tekstfelt) vil han blive afbrudt midt i sit arbejde. Hvis man på den anden side ikke løbende opdaterer vil tidsvariablen i kolonnen "locked" udløbe. Kan man med en form af JavaScript teste om der. f.eks. ikke har været arbejdet på siden i et kvarter? Altså at medarbejderen ikke har skrevet i tekstfelter udført scroll el. lign. Mvh Christian
Jeg ved at 'AJAX gør rent som en hvid tornado'. Vi kaldte nemlig min farmor for 'Den hvide tornado'! Men nej - jeg kender ikke AJAX. Er det et programmeringssprog? Session stopper når browser lukkes! Javascript reloader ikke siden! Jamen så har jeg noget at arbejde med. Tak til coderdk og avminarm. Hvad med om i begge lægger et SVAR? Mvh Christian
Ok :) AJAX kan man læse lidt om her: http://en.wikipedia.org/wiki/AJAX - Det handler primært om at gøre tingene mere brugervenlige og hurtige. Opdatere indhold på siden uden at reloade og så videre :) Det er mest javascript, DHTML og XML :)
Jeg er endnu ikke helt sikker på hvilken løsning jeg vælger. Det er bl.a. et spørgsmål om belastningen af serveren. I sidste ende vil det komme an på en beta-test. Den kan ikke udføres pt. da Active Directory er under forandring, og inden for de nærmeste måneder vil 10-dobles i størrelse. mine side hedder sag.php og der kaldes til siden sag_action_ex.php. Hver gang en side kaldes skal brugerne godkendes som værende en del af domænet Active Directory, og deres rettighed fastsættes gennem MySQL. Det sker ved:
Hvorefter $username slås op i Active Directory og samtidig korigeres brugerens rettigheder i MySQL. Der er nemlig tale om 3 typer brugere af siden.
Jeg er nået frem til at de brugere som er blokeret vil få en kraftig fremhævet beskrivelse af at sagen er blokeret. De ansatte og administrator vil kunne se hvilken medarbejder som blokerer, mens almindelige brugerne ikke kan. Siden skal kun blokeres for aktioner der ændrer sagens status. En hvilken som helst bruger skal til hver en tid kunne tilføje notater i sagen. For at sikre at en bruger ikke skal blive 'revet' ud af arbejdet med at skrive et notat vil jeg i mit textarea indføre et onkeydown() der nulstiller tidsvariablen for opdatering. Min kode vil blive noget i stil med:
Jeg glemte lige: Jeg vil - som i foreslog sætte en attribut timeout i MySQL. Desuden skal resultatet af reload sikre at kun de funktioner som er tilladt (altså notat) overhovedet vil være tilgængelige.
Ok, lyder fint synes jeg :) Men er du sikker på at din onkeydown er nødvendig? Jeg har før brugt det, og det har ikke været nødvendigt at gøre noget - Man bliver ikke afbrudt i arbejdet, hvis du bruger den metode som jeg beskrev...
Ang. updLock(): Jeg har splittet den op i 3 funktioner og tilført lidt ekstra. Ang. onkeydown(): Jeg opdager pludselig at du skrev image - ikke location. Du har nok ret, men hvis en anden bruger tilføjede et notat skulle siden meget gerne opdateres fuldstændig. Alle tidligere notater til sagen vises nemlig på siden, og så er det jo ikke nok med et image. Også i forhold til evt. senere tilføjelse af funktionaliteter tror jeg løsningen er bedst. Man får en frisk side. Ingen kompliserede mellemveje. Iøvrigt burde eksperten.dk måske bruge noget der ligner vores løsning. Har du lagt mærke til at hvis man venter for længe med at sende den kommentar/svar man skriver i denne tekstbox, så kommer den ikke med. Jeg laver altid ctrl-c på denne tekst for at sikre mig. Mvh Christian
Nåe ja. Ang. updLock(): Jeg har nok gjort mere end at splitte den op, men den var ihvertilfælde udgangspunktet. Bl.a. en formular fordi det er mest praktisk i forhold til andre ting som siden indeholder. Mvh Christian
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.