Ga naar inhoud
  • 0

Data structuur voor calender/agenda systeem.


dannydv

Vraag

Kan iemand advies geven omtrent de beste manier om calender of agenda gegevens bij te houden.

Ik dacht in sommige commerciele producten zoals bvb ecOrganizer te zien dat ze records maken per week.

 

Is dit inderdaad de beste manier om dit aan te pakken.

Worden records dan op voorhand aangemaakt voor de komende jaren, of on de fly

Heeft iemand daar ervaring mee ?

 

Elk advies is welkom .

Bedankt.

Danny.

Link naar reactie

20 antwoorden op deze vraag

Aanbevolen berichten

  • 0

Murtje en Eric zullen het beamen, dit is zelfs 1 van mijn stokpaardjes... :)

 

Er zijn inderdaad nogal wat benaderingswijzes, de "record-per-week" had ik echter nog niet gehoord.

Het hangt er in de eerste plaats van af WAT je allemaal met de kalendergegevens gaat doen, en of je overzichten wil per dag/ per persoon/ per project enz.

 

Ikzelf geef de voorkeur aan een "per dag voorgeprogrammeerde" kalender, omdat dat helemaal niet zo'n grote file is, en mij de grootste soepelheid geeft.

Wist je dat je bestand exact 10MB groot is als je een tabel maakt met 1 numeriek serieel veld - met 1.000.0000 records?

Compact, tot je bedenkt dat de bijbel ook zo'n 10 MB tekst is...:)

 

Ik gebruik een kalender bestand met allerlei navigatiescripts en een grafische weergave in "horloge kalender stijl" (je weet wel die blikken dingskes die je vroeger aan je horloge kon hangen), eveneens met een mogelijke weergave op weekniveau.

De weergave op weekniveau werkt simpelweg met 7 interne relaties. De weekniveau weergave laat alleen alle maandagen van het bestand zien.

Deze file is 3 MB groot en bevat alle dagen van 1950 tot 2050.

 

Voordeel van een kalender op dag basis is dat je ook officiele feestdagen kan gaan stockeren. Zo heeft mijn kalendertje voor 100 jaar alle Belgische OF Nederlandse (andere file) officiele feestdagen, wat vooral de berekening van het aantal werkdagen tussen 2 datums vergemakkelijkt. De kalender heeft een seriele nummering die alle weekend- en feestdagen negeert. Verschil tussen de seriele nummering is het aantal werkdagen tussen 2 kalenderdagen. Simpel & Stupid.

 

Nog een tip: eens alle informatie in de kalender zit, kan die volledig "gestuurd" worden door globals. M.a.w. je kan hem read-only maken. M.a.w. je kan hem op een server zetten en niemand edit privileges geven. M.a.w. je ontloopt volledig record locking problemen want natuurlijk gaat iedereen elke dag op dezelfde record van de kalender werken.

Link naar reactie
  • 0

Aanvullend op het dagsysteem zoals dat van Peter gebruiken wij strings om de beschikbaarheid per uur bij te houden. Hiervoor gebruiken we een veld (“Time_string”) dat automatisch met 1440 nullen wordt gevuld. Elke nul stelt een periode van 1 minuut voor. Om het bestand lichter te maken kan je ook periodes van 10 minuten gebruiken.

 

Als er bijvoorbeeld een afspraak wordt geboekt van 14 tot 16 uur begruiken we de volgende script-stap:

 

Noot:

g_1 is een globaal tekstveld gevuld met 1440 ééntjes

g_0 is een globaal tekstveld gevuld met 1440 nullen.

 

Set Field (Time_string):

 

Replace(Time_string;

(starttijd / 600)+1;

(stoptijd - starttijd) / 600 ;

Left( g_1; (stoptijd - starttijd) / 600 ) )

 

Om te weten of een periode al dan niet vrij is gebruiken we de volgende formule:

 

If(

Middle(Time_string;

(starttijd / 600)+1;(stoptijd - starttijd) / 600)

=Left( g_0 ; (stoptijd - starttijd) / 600 );1;0)

 

1= vrij

0= bezet

 

Als een afspraak geannuleerd wordt moet de periode terug vrijgemaakt worden. Daarvoor de volgende script-stap:

 

Set Field (Time_string):

 

Replace(Time_string;

(starttijd / 600)+1;

(stoptijd - starttijd) / 600 ;

Left( g_0; (stoptijd - starttijd) / 600 ) )

 

Dit zijn natuurlijk de “rauwe” formules. Om dit grafisch mooi aan te kleden gebruiken we pipes “|” in rode en groene kleuren in het dag-, week- en maandoverzicht.

 

cu,

 

Stef

Link naar reactie
  • 0

Schitterend.

Op seconden basis zal het net niet lukken... tenzij we de dag inkorten tot 18 uur of zo... :wink:

 

Een notatie in een repeating field geeft dan weer andere voordelen.

Zo kan je de repetities op dezelfde manier als Stef uitlegt invullen - maar met machten van 2. Voordeel van deze notatie is dat je de repetities kan terugbrengen tot 1 getal, namelijk de som van de machten die je in de repetities zet.

Als je de som van verschillende afspraken records maakt, kan je deze som weer terug ontleden tot haar termen, omdat het allemaal machten zijn van 2. Mooi stukje praktische algebra, die resultaten kunnen weer in een herhalend veld gezet worden.

Hierdoor kan je dus eigenlijk de grafiekjes "optellen", en de dagplanning weergeven.

Screendumpje voor de duidelijkheid:

http://www.clarify.net/downloads/Qplanner1.jpg

[dit staat al een tijdje fout... :oops: heb er een grote "Q" ingezet, dit is een linux machine...]

aangepast door Gast
Link naar reactie
  • 0

Hi,

Het rekenwerk valt best wel mee, maar drag- and drop is nog steeds niet mogelijk in FileMaker 6. Er is niet zoiets als een drag and drop interface, en ook events (drag-and drop, onmouseover, ... zijn events) kunnen nog steeds geen script opstarten wat jammer is.

 

Je kunt wel met een systeem werken, waar je de gebieden aanklikt of een begin en eindpunt aanklikt.

 

Koen

Link naar reactie
  • 0

Ja, daar heb ik ook aan gedacht, maar als je dat doet met 1440 minuten, dat heb je 1440 knopjes nodig, en als dat weer in een protaal staat, dan moet er toch wat gebeuren voordat het scherm er staat. En 1440 knopjes zijn weer 1440 scriptjes of een ingewikkeld script dat het veld uitvraagt en dat 1440 if-statments achtereen.

Link naar reactie
  • 0

Je kan dit oplossen met de plug-in "Mouse Grabber" die de positie van je muis kan onderscheppen. Het vereist wat prutswerk, maar eens de finetuning gebeurd is, heb je maar één script nodig. Het is natuurlijk weeral een plug-in, hopelijk wordt dit weldra een basisfunctie, net zoals de fantastische "custom message" die we eindelijk in FM6 hebben verkregen.

 

Te vinden op: http://www.FullFunction.com

 

mvg,

Stef

Link naar reactie
  • 0

Ja, ik denk dat je gelijk hebt. Ik ben aan het experimenteren met 5-minuten blokjes en dat lukt prima. Met jullie hulp en tips ben ik nu in staat om een dagplanning per persoon te tonen en bovendien uit te zoeken of ik bepaalde personen voor een bepaalde tijd bijeen kan krijgen. Ik meende dat dat eerst heel ingewikkeld zou zijn in Filemaker maar valt best wel mee. Hartelijk dank.

Link naar reactie
  • 0

Ik vind hier een mailtje van Maloud in mijn web mailbox, met de vraag of ik niks beschikbaar kan maken.

 

Dat ligt nogal moeilijk, gezien in zo'n kalender wel wat werk kruipt, en er mag heel wat licht schijnen op de Clarify site, maar voor niets gaat de zon op... :lol:

 

Maar langs de andere kant mag je als developer niet op je kennis gaan zitten, en anderen af en toe een paar kneepjes van het vak tonen.

 

Niet dat bijgevoegde template een hoogstandje van technologie is, het laat echter wel zien hoe je in FileMaker met een minimum aan veldjes en scriptjes een werkbare kalender kan maken.

 

Het is minimalistisch - uitwerken moet je zelf doen.

kalender.fp7.zip

Link naar reactie
  • 0
Ik vind hier een mailtje van Maloud in mijn web mailbox, met de vraag of ik niks beschikbaar kan maken.

 

Dat ligt nogal moeilijk, gezien in zo'n kalender wel wat werk kruipt, en er mag heel wat licht schijnen op de Clarify site, maar voor niets gaat de zon op... :lol:

 

Maar langs de andere kant mag je als developer niet op je kennis gaan zitten, en anderen af en toe een paar kneepjes van het vak tonen.

 

Niet dat bijgevoegde template een hoogstandje van technologie is, het laat echter wel zien hoe je in FileMaker met een minimum aan veldjes en scriptjes een werkbare kalender kan maken.

 

Het is minimalistisch - uitwerken moet je zelf doen.

 

 

Haaaa !!! Daar ga ik eens lekker mee stoeien, leuk ding om t ezien, beetje nostalgisch... Bedankt, als het naar mijn idee klaar is laat ik 'm zien !!!

Link naar reactie
  • 0

Mooi, Hiker!

 

De Case-functie is in het leven geroepen om een einde te maken aan het gedoe met de geneste If's. Toch gebruik jij ze nog alsof het een If was:

 

Case(DayOfWeek(Agenda::AgendaStartdatum) = 2;Agenda::AgendaStartdatum;
Case(DayOfWeek(Agenda::AgendaStartdatum) = 3;Agenda::AgendaStartdatum+6;
Case(DayOfWeek(Agenda::AgendaStartdatum) = 4;Agenda::AgendaStartdatum+5;
Case(DayOfWeek(Agenda::AgendaStartdatum) = 5;Agenda::AgendaStartdatum+4;
Case(DayOfWeek(Agenda::AgendaStartdatum) = 6;Agenda::AgendaStartdatum+3;
Case(DayOfWeek(Agenda::AgendaStartdatum) = 7;Agenda::AgendaStartdatum+2;
Case(DayOfWeek(Agenda::AgendaStartdatum) = 1;Agenda::AgendaStartdatum+1)))))))

 

Dit kan veel eenvoudiger:

 

Case(
DayOfWeek(Agenda::AgendaStartdatum) = 2;Agenda::AgendaStartdatum;
DayOfWeek(Agenda::AgendaStartdatum) = 3;Agenda::AgendaStartdatum+6;
DayOfWeek(Agenda::AgendaStartdatum) = 4;Agenda::AgendaStartdatum+5;
DayOfWeek(Agenda::AgendaStartdatum) = 5;Agenda::AgendaStartdatum+4;
DayOfWeek(Agenda::AgendaStartdatum) = 6;Agenda::AgendaStartdatum+3;
DayOfWeek(Agenda::AgendaStartdatum) = 7;Agenda::AgendaStartdatum+2;
DayOfWeek(Agenda::AgendaStartdatum) = 1;Agenda::AgendaStartdatum+1)

 

Met de haakjes die je zo uitspaart, kan je eens fijn op vakantie gaan! :wink::wink:

Link naar reactie
  • 0
Mooi, Hiker!

De Case-functie is in het leven geroepen om een einde te maken aan het gedoe met de geneste If's. Toch gebruik jij ze nog alsof het een If was:

 

Tja, maar dat was mijn niveau 6 jaar geleden toen ik FM5 had.

Daarna altijd mee gewerkt en nooit weer naar gekeken. En zoals gezegd: het is niet ge-optimaliseerd voor FM8.5

Maar een ieder mag het vrij aanpassen, op de voorwaarde dat verbeteringen hier worden gepost.

Link naar reactie

Doe mee aan dit gesprek

Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.

Gast
Beantwoord deze vraag...

×   Geplakt als verrijkte tekst.   Plak in plaats daarvan als platte tekst

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...