Tips en trucs over FileMaker met code, afbeeldingen of te downloaden bestanden. Als u zelf in FileMaker programmeert dan kunnen deze u wellicht helpen. Volg ons om nieuwe tips & trucs te ontvangen.

De bestanden openen automatisch met volledige toegang zodat u alle tabellen, velden, scripts, enzovoort kunt bestuderen, aanpassen en overnemen.

Actueel

Denk aan de Nederlandse kalender

16 januari 2018 | Niveau: FileMaker Gevorderden Training

Rekenen met een datum is in FileMaker erg eenvoudig. Maar denkt u er wel aan dat de datumfuncties van FileMaker de Amerikaanse kalender hanteren?

De Amerikanen laten week 1 altijd op 1 januari beginnen zodat een week niet altijd uit zeven dagen bestaat. Terwijl wij de ISO-standaard gebruiken waarbij de week 52 of 53 wordt afgemaakt als de meeste dagen in die week vallen. In het andere geval betekent het dat 31 december in week 1 van het volgende jaar valt. Dat heeft natuurlijk ook gevolgen voor het jaartal. Immers, 1 januari 2017 viel in week 52 van 2016.
In Nederland wijken we wel van de ISO-standaard af omdat wij niet de zondag als de eerste weekdag beschouwen maar de maandag.

Hieronder volgen drie berekeningen voor het volgens de ISO-standaard berekenen van het weeknummer, jaar en weekdag voor een gegeven datum. Deze berekeningen zijn te implementeren als Berekeningsvelden of (in FileMaker Advanced) Eigen Functie's.


WeekISO = WeekofYearFiscal ( datum ; 2 ) // 2 = maandag

YearISO =
  Year ( datum )
  - ( WeekISO ( datum ) > 51 and Month ( datum ) = 1 ) // correctie week van vorig jaar, 1 jaar lager als boolean test waar is
  + ( WeekISO ( datum ) = 1 and Month ( datum ) = 12 ) // correctie week van volgend jaar, 1 jaar hoger als boolean test waar is

DayofWeekNL = DayofWeek ( datum - 1 ) // correctie weekdag door weekdag van een dag eerder te nemen, 1 = maandag enz.

Script afsluiten overbodig

3 januari 2018 | Niveau: FileMaker Gevorderden Training

FileMaker programmeren

We zien soms databases waar in vrijwel elk script de scriptstap 'Script afsluiten' meerdere keren wordt gebruikt. Wist u dat die scriptstap vrijwel nooit nodig is en dat uw scripts beter te onderhouden zijn zonder die scriptstap?

De scriptstap 'Script afsluiten' kan handig zijn tijdens het testen van een script. Maar het is eigenlijk alleen nodig als het script een resultaat moet teruggeven aan het script dat het uitvoerde *. Een script sluit immers automatisch af als de laatste scriptstap is uitgevoerd en hoeft niet met deze scriptstap afgesloten te worden.

In vrijwel alle situaties is een net gebruik van de scriptstappen If, Else, Else If en End If voldoende om ervoor te zorgen dat bepaalde scriptstappen onder voorwaarden wel of niet worden uitgevoerd.
Bovendien blijft het script dan beter leesbaar zodat onderhoud eenvoudiger is. Bij het later toevoegen van scriptstappen hoeft u niet het hele script na te lopen om te controleren of de nieuwe scriptstappen wel uitgevoerd worden.

Met de code hieronder proberen we het verschil te laten zien. Een klein verschil maar hopelijk heeft u er wat aan.


#
# liever niet zo:
#

Aangepast dialoogvenster tonen [ ... ]
If ( Get ( KeuzeLaatsteBericht ) ≠ 1 ) // ONgelijk aan 1 !
  Script afsluiten []
End If
# andere scriptstappen

#
# de flow is beter te volgen en voorkomt vergissingen met deze opzet:
#

Aangepast dialoogvenster tonen [ ... ]
If ( Get ( KeuzeLaatsteBericht ) = 1 ) // gelijk aan 1 !
  # andere scriptstappen
End If

* Scriptresultaat komt in de FileMaker Expert Training aan bod.

Voorbeelden om van te leren: Jaarvelden

19 december 2017 | Niveau: FileMaker Basis Training

FileMaker programmeren

In de serie 'voorbeelden om van te leren' een nieuw voorbeeld: Jaarvelden. Omdat leren van andermans vergissingen leuker is dan van je eigen vergissingen, vooral omdat het tijd bespaart.

Met enige regelmaat treffen we een database waarin meerdere velden met een jaartal, volgnummer of ander getal in de naam. Eigenlijk is dit vergelijkbaar met herhalende velden met meestal dezelfde problemen en oplossing - een gerelateerde tabel - zoals in een eerder bericht is genoemd.

Een voorbeeld is de omzet van een klant over meerdere jaren waarvoor elk jaar een nieuw veld gemaakt moet worden. Voor een interne programmeur is dit geen probleem omdat die altijd even snel een veld kan toevoegen. Totdat deze programmeur een andere functie krijgt of misschien wel om heel andere redenen wegvalt.
Er zijn meerdere mogelijkheden om de database zo te maken dat je voor een oneindig aantal jaren de omzet per klant kan zien. Zoals bijvoorbeeld een rapport met de omzet per klant of met een relatie/portaal bij de klantgegevens.

Een regel zou moeten zijn dat bij normaal gebruik van een database geen aanpassingen gemaakt moeten worden in velden en dergelijke. Een programmeur is dan alleen nodig als de functionaliteit uitgebreid of verbeterd moet worden.


Heeft u vragen? Plaats uw vraag op het FMTraining Forum of neem contact op.

Tijd anders invoeren: Deel 3/3

6 december 2017 | Niveau: FileMaker Expert Training

Instellen scriptactivering

Als laatste in deze serie passen we de berekening van de vorige twee tips aan zodat het script ook gebruikt kan worden met het veldtype Tijdstempel. Weer een stapje complexer maar leuk voor liefhebbers van mooie berekeningen.

Bij een veld van veldtype Tijdstempel zullen we de ingevoerde datum en de tijd moeten scheiden, de tijd bewerken en weer samenvoegen met de datum.

De LeftWords en RightWords functies zijn niet bruikbaar voor het scheiden van datum en tijd omdat een datum ook met een schuine streep ingevoerd kan worden wat een woordscheiding is. Daarom wordt met de Left, Right en Position functies uitsluitend gekeken naar de spatie tussen datum en tijd.
Ook moeten we van het huidige veld achterhalen welk veldtype het is en dat kan met de functie FieldType. Tevens moet de volledige veldnaam bepaald worden, inclusief tabel(vermelding)naam, om ervoor te zorgen dat de berekening ook goed werkt met gerelateerde velden (bv. in een portaal).
In deze berekening zit bovendien een uitbreiding zodat zowel de komma als de punt gebruikt kan worden als decimaal scheidingsteken: 1,5 of 1.5 -> 1:30.

In de berekening zitten nog een paar toelichtingen als u de werking wilt doorgronden. Ook als u de berekening niet geheel wilt begrijpen, kunt u het gebruiken in uw eigen database. Succes!

Tijd anders invoeren: Deel 2/3

28 november 2017 | Niveau: FileMaker Expert Training

Instellen scriptactivering

In de vorige tip van deze serie gaven we een berekening om een tijd gemakkelijker in te kunnen voeren. Deze tip sluit daarop aan en laat zien hoe de berekening met scriptactivering toegepast kan worden.

Het toepassen van de eigen invoer hoeft eigenlijk alleen als een gebruiker het veld in een lay-out bewerkt zodat het niet in de Automatisch Invoeren-berekening als veldoptie hoeft te staan. Als het veld een opgezochte waarde moet krijgen dan zit dat elkaar bovendien in de weg. In dat geval is het handiger - maar ingewikkelder - om Scriptactivering te gebruiken. In dit geval betekent het dat na het wijzigen van een veld een script uitgevoerd zal worden dat de invoer aanpast.

Hiervoor kan een algemeen script (bv. 'Tijd Invoer') gemaakt worden met de scriptstap Veld Instellen[] maar zonder doelveld op te geven. Dit zorgt er voor dat de berekening wordt toegepast op het huidige veld, waar de cursor in staat, zodat er maar één script nodig is voor een oneindig aantal veldobjecten.
Bij de optie Berekend Resultaat kan nu dezelfde berekening worden ingevoerd behalve dat de functie Self wordt vervangen door Get ( InhoudActiefVeld ) dat de inhoud van het huidige veld geeft.
Omdat de BijValidatieObject gebeurtenis een scriptresultaat verwacht behoort het script afgesloten te worden met de scriptstap Script afsluiten [ True ].

Bij elk veldobject waar u deze invoer toegepast wilt hebben, stelt u bij Scriptactivering het script in (een scriptparameter is niet nodig) voor de BijValidatieObject gebeurtenis. De berekening is ook geschikt voor gebruik in de Zoeken Modus (zonder zoek-operatoren) zodat u die optie kunt inschakelen. Scriptactivering van een lay-outobject instellen kan o.a. in de Lay-out Modus via menu Opmaak, Scriptactivering instellen.

In een volgende tip wordt getoond hoe de berekening aangepast kan worden voor gebruik met een Tijdstempel veld.