Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Opzet webapplicatie en historie

Pagina: 1
Acties:

  • SvMp
  • Registratie: September 2000
  • Niet online
Ik ben bezig met het ontwerp van een handige web-applicatie (backoffice bij website), maar ik loop vast.

Wat ik graag wil is dat er een geschiedenis van dialoogvensters bijgehouden wordt.

Stel je het volgende voor: Je voert gegevens van een gebouw in. Je gaat de architect selecteren, maar die blijkt niet in de database te staan. Je kunt een nieuwe architect toevoegen. Dat kan gelijk vanuit de gebouwen-dialoog. Alle gegevens die je hebt ingevoerd, worden inhouden. Een klik op een button, levert dus altijd een POST-request op.

Als je op annuleren klikt bij het invoeren van de architect, dan kom je netjes terug bij je invoer van een gebouw. Als je de architect hebt ingevoerd, kom je ook weer bij de invoer van het gebouw, maar dan met de nieuwe architect geselecteerd. Hetzelfde verhaal kan gelden voor het onderdeel geboorteplaats, een gegeven van de architect.

Klinkt simpel, maar dat is het niet. Ik heb zo iets al eens succesvol gemaakt door alle forms van voorgaande dialogen in hidden-fields te plaatsen, een soort stack. Als je vanuit het hoofdmenu een architect invoert, dan kom je na die tijd terug in het hoofdmenu (lege stack). Als je vanuit een andere dialoog een architect invoer (of een plaats, of een bron, etc..etc..) kom je weer terug in de voorgaande dialoog.

Aan de hand van de stack worden ook kopjes opgebouwd.
Je ziet bijvoorbeeld: Gebouw toevoegen -> Architect toevoegen -> Plaats toevoegen

Nadeel: Mensen (inclusief ik zelf) hebben de neiging om de back-button van de browser te gebruiken, om terug te gaan. Vaak om te annuleren. Dat wordt erg vervelend met al die post-requests. Oplossing: Post/Redirect/Get-pattern. Zie ook Wikipedia: Post/Redirect/Get

Ik heb het volgende bedacht: Alle dialogen worden in een sessie-array gezet (PHP). Een Post resulteert in het plaatsen van alle data in de sessie-array en een redirect. Aan de hand van de gegevens van het form in de sessie worden deze verwerkt en uit de sessie verwijderd, zodat zaken slechts één keer plaatsvinden. Een refresh (op F5 drukken) is geen enkel probleem, alle gegevens van dialoog en invoer staan in de sessie. Ook de back-button is geen probleem.

Wat wel een probleem is dat mensen twee vensters naast elkaar willen gebruiken. Soms is dat handig. Een sessie hoort bij één browser, maar maakt geen onderscheid tussen verschillende browservensters. Een ander probleem is afsplitsing: Een link kan geopend worden in een nieuw venster, in beide vensters worden dingen ingevoerd en verstuurd, hoe moet er dan gehandeld worden? Bij de eerste invoer na verwerking alle gegevens uit de sessie, zodat een klik in venster 2 resulteert in een foutmelding? Of aan elke link een uniek ID hangen en de complete sessie steeds kopiëren? Ik loop vast in het bedenken van de meest praktische oplossing. Moet gemakkelijk zijn met programmeren, niet afhankelijk van AJAX, maar ook tegen F5-en, back-buttons en het gebruik van meerdere vensters kunnen. Ik ben dan ook benieuwd naar suggesties voor praktische oplossingen.

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 11:26

leuk_he

1. Controleer de kabel!

SvMp schreef op maandag 25 april 2011 @ 12:49:
hoe moet er dan gehandeld worden? Bij de eerste invoer na verwerking alle gegevens uit de sessie, zodat een klik in venster 2 resulteert in een foutmelding?
Dit is (IMHO) het meest gebruikeliijk. Na een klik verwerk je de data(het woord sessie lijkt me in dit verband minder van belang). Je vangt de logica af zo dicht mogelijk bij de database. Als er een actie gedaan wordt waardoor het Model ongeldig wordt wordt een foutmelding gegeven.

Denk ook aan multiuser omgeving, als 2 gebruikers op 1 dataset werken.

Als je data automatisch moet verversen op het scherm als je database/model veranderd heb je wel veel meer werk, vooral als het ook nog schaalbaar moet zijn.

[ Voor 10% gewijzigd door leuk_he op 25-04-2011 12:58 ]

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


  • SvMp
  • Registratie: September 2000
  • Niet online
@leuk_he: Lijkt mij ook. Er valt wel wat voor te zeggen om het openen van dialogen in nieuwe vensters niet te ondersteunen. Hier vergissen gebruikers zich niet zo snel in, als ze het eenmaal doorhebben.
Maar hoe pak je het aan als mensen in twee browservensters tegelijk willen werken? Ik vind wel dat ik dat moet ondersteunen.

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 11:26

leuk_he

1. Controleer de kabel!

Om te beginnen: heb je al een web framework gezocht, en is er daar een oplossing voor.

De gebruiker kan kiezen uit 2 oplossingen:

* 2e webpagina updaten als onderliggende data in ander venster gewijzigd wordt. Push updates van server, complexer, maar heel mooi)
* 2e webpagina krijgt een foutmelding als de data die hij probeert te updaten anders is dan het getoond was op scherm ( "other user/window changed data", update set field1="ingetiktewaarde" where field1="oldwaarde" and key = 'X" and foreign key en andere business rules kloppen nog) .. er zijn VEEL meer mechnismen mogelijk, maar belangrijk is dat de gerbruiker een foutmelding krijgt als hij iets 2x probeert, of aan data komt die in een ander venster is gewijzingd.

HOE je dit implementeerd ligt ook weer sterk aan je framework, ik denk dat het framework wat je kiest er voorzieningen voor heeft als je er van te voren aan denkt.

[ Voor 13% gewijzigd door leuk_he op 25-04-2011 17:14 ]

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 19:16
Je kan met Javascript het formulier gewoon uitbreiden naar een formulier met daarin een deel voor het aanmaken van een nieuwe architect. Dus zonder uberhaupt het formulier te verlaten o.i.d. Dat formulier kan je met bijvoorbeeld javascript vanaf de server halen.

Bij het opslaan herken je het nieuwe record, maak je dit aan en sla je de verwijzing er naartoe op bij het gebouw.