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.

Jaar 2017

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.

Tijd anders invoeren: Deel 1/3

21 november 2017 | Niveau: FileMaker Gevorderden Training

Het intypen van een tijd kan in FileMaker maar op één trage manier. Deze truc geeft een berekening waarmee ook een tijd als 1,5 én als 130 ingevoerd kan worden.

Standaard vereist FileMaker de invoer van tijd met dubbele punten als scheidingsteken tussen uren, minuten en seconden. Snel invoeren van tijden is dan slecht mogelijk en vooral als er veel tijden ingevoerd moeten worden is dat vervelend.

Als u de tijd op een andere wijze wilt invoeren dan kan onderstaande berekening geplaatst worden bij de veldopties, tabblad Automatisch Invoeren, optie Berekende Waarde. Denk er aan dat de bijbehorende optie 'Bestaande waarde van veld niet vervangen' uit staat. Door het gebruik van de functie Self hoeft de berekening niet aangepast te worden.

De berekening negeert seconden en accepteert de invoer als uren en minuten. Een invoer van 1,5 wordt omgezet naar 1:30, 2,25 wordt 2:15 enzovoort.
Bij een invoer zonder dubbele punt en komma neemt de berekening de rechter twee cijfers als minuten en de andere als uren. De minuten mogen groter zijn dan 59 waarbij de uren verhoogd worden en ook mag de invoer korter zijn dan drie tekens. Een paar voorbeelden van invoer en het resultaat:
1 -> 0:01
12 -> 0:12
90 -> 1:30
112 -> 1:12
2112 -> 21:12
12112 -> 121:12

Dit voorbeeld gaat uit van een veld van veldtype Tijd, voor het veldtype Tijdstempel werkt het nog niet. Uiteraard kan een Eigen Functie (FileMaker Pro Advanced vereist) gemaakt worden om de berekening op één centrale plaats te hebben.
De berekening kan ook op een veld toegepast worden met scriptactivering en ook kan het aangepast worden voor het veldtype Tijdstempel, daarover meer in twee volgende tips.


Let ( [
  veldinhoud = Self ] ; 

  Case (
    // invoer bevat geen dubbele punt en wel een komma van decimale waarde
    Position ( veldinhoud ; ":" ; 1 ; 1 ) = 0 and Position ( veldinhoud ; "," ; 1 ; 1 ) > 0 ;
      GetAsTime ( Truncate ( GetAsNumber ( veldinhoud ) * 3600 ; 0 ) ) ;

    // invoer bevat geen dubbele punt van tijd waarde
    Position ( veldinhoud ; ":" ; 1 ; 1 ) = 0 ;
      GetAsTime ( Replace ( "000" & veldinhoud ; Length ( veldinhoud ) + 3 - 1 ; 0 ; ":" ) ) ;

    veldinhoud
  )
)

Voorbeelden om van te leren: Jaarlijks nieuwe bestanden

14 november 2017 | Niveau: FileMaker Basis Training

FileMaker programmeren

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

Vroeger was er soms de noodzaak om elk jaar de database leeg te maken zodat het bestand snel in het gebruik bleef. Dan kreeg op 1 januari het bestand met bijvoorbeeld de facturen een jaartal in de naam en werd een lege kopie gemaakt voor het nieuwe jaar.

Het nadeel hiervan is dat informatie in meerdere bestanden of tabellen opgezocht moest worden. Een gebruiker moest een oude factuur op een andere plek zoeken maar ook is het niet eenvoudig om omzetgegevens over meerdere jaren te zien.

De computers zijn zo snel geworden dat het probleem niet meer bestaat. Bovendien zijn de databases veel meer relationeel geworden en gaat het niet meer om enkele tabellen. Toch zien we, ook recent gemaakte, databases waar dit wordt gedaan.
Bespaar uzelf tijd en ergernis door de gegevens van meerdere jaren in één tabel te houden. Als uw database al van een paar duizend records traag wordt dan ligt de oplossing ergens anders.


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

FM Boodschappen app mét schuifknoppen

7 november 2017 | Niveau: FileMaker Kenniswerkers Training

FM Boodschappen app

Verrast dat het zo lang geleden was, maar in 2013 publiceerden we de Boodschappen app als een voorbeeld voor FileMaker Go op iPhone en iPad. Het was hoog tijd voor vernieuwing van opmaak en techniek: FileMaker 16 maakte de schuifknop eenvoudiger.

De opmaak is gemoderniseerd maar niet identiek aan iOS 11 zodat het ook met FM WebDirect toonbaar is op niet iOS-apparaten. Het thema waarin de opmaak is vastgelegd kunt u importeren in uw eigen database.

Er zijn verder kleine wijzigingen zoals extra velden voor aantal en prijs, om op te geven of om bij te houden. Ook krijgt de regel van een afdeling een groene kleur als alle boodschappen in die afdeling zijn gehaald (GetSummary functie). Als alle boodschappen zijn gehaald dan wordt het kopgedeelte groen als teken dat u naar de kassa kan gaan.

De schuifknop is niet standaard beschikbaar in FileMaker en in deze database zit een eigen implementatie die u eenvoudig in uw database kan overnemen.
Er zijn nieuwe afbeeldingen gebruikt, dankzij FileMaker 16 kon het vereenvoudigd worden en met de nieuwe lay-out objecten kiezer is het makkelijker aan te passen. Tevens is een algemeen script gemaakt dat er voor zorgt dat in de Zoeken Modus het veld leeg gemaakt kan worden terwijl in de Bladeren Modus alleen aan en uit mogelijk zijn.
Een uitgebreide toelichting over opbouw en aanpassen is te vinden in een tekst in de lay-out 'Boodschappen Formulier'.

Deze voorbeelddatabase kunt u gebruiken als inspiratie voor uw eigen mobiele database. Maar u kunt het natuurlijk ook gebruiken om thuis uw boodschappenlijstje samen te stellen en in de supermarkt af te vinken wat u gehaald hebt. Als u de database met Samengebruik deelt kunnen huisgenoten zelfs boodschappen toevoegen!

Voorbeelden om van te leren: Herhalende velden

17 oktober 2017 | Niveau: FileMaker Gevorderden Training

FileMaker programmeren

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

Ons advies werd gevraagd over een database waarin maar één tabel bleek te zitten met daarin groepjes herhalende velden. Alle onmogelijkheden van herhalende velden wat betreft exporteren, sorteren en verwijderen waren uiteraard van toepassing.

FileMaker 3.0 (1995) was de eerste versie waarin relaties mogelijk waren en sindsdien zijn de mogelijkheden verder uitgebreid. Gerelateerde tabellen hebben het gebruik van herhalende velden voor data-opslag volledig overbodig gemaakt. Relaties zijn niet eenvoudig maar hebben veel voordelen en zijn daarom de moeite waard om zich in te verdiepen, bijvoorbeeld met een training en veel oefenen.


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

Voorbeelden om van te leren: Losse bestanden

3 oktober 2017 | Niveau: FileMaker Basis Training

FileMaker programmeren

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

Een facturatie-database was zo opgezet dat elke factuur in een apart FileMaker bestand (kloon) werd ingevoerd. Het lukte de programmeur niet om een totaalbedrag van meerdere facturen uit te rekenen...

Het is de bedoeling om alle gegevens als meerdere records in één tabel te bewaren, onder andere omdat rapportages met (sub)totalen over meerdere records dan mogelijk zijn.


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

Voorbeelden om van te leren: Beperk globale velden

5 september 2017 | Niveau: FileMaker Basis Training

FileMaker programmeren

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

Aansluitend op het vorige artikel over 'Veel globale velden' willen we kort wat voorbeelden geven van onnodig gebruik van globale velden.

Zo zijn er databases waar de gebruiker eerst alle gegevens in globale velden invoert waarna ze op een knop drukken en een script het record aanmaakt of bijwerkt. Op deze manier een transactie-systeem opzetten is niet nodig omdat FileMaker dit zelf al biedt met de scriptstappen Record openen (Begin), Vorige versie record (Rollback) en Records vastleggen (Commit). Bovendien vereist het voor elk veld een extra globaal veld. Beter is om te kijken of het probleem, bijvoorbeeld lege records of sleutelnummers in ongewenste volgorde, niet op een andere manier is op te lossen.

Ook zagen we een script waarin adressen stuk voor stuk in een globaal veld werden gestopt. Dit globale veld stond op een lay-out voor een etiketprinter en werd stuk voor stuk afgedrukt terwijl het ook rechtstreeks uit de adresveld(en) kan. In dit geval bespaart het maar één globaal veld maar dit zal vaker optreden binnen dezelfde database.

We hopen dat duidelijk is dat het gebruik van globale velden elke keer overwogen moet worden om niet op de lange termijn in de problemen te komen. Weet u geen oplossing zonder globale velden, vraag dan gerust om hulp.


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

Eenvoudig openen van externe bestanden

16 augustus 2017 | Niveau: FileMaker Gevorderden Training

Vanuit een FileMaker database kunt u ook eenvoudig bestanden en mappen openen. Of die net vanuit de database zijn geëxporteerd, door een ander programma gemaakt zijn of bij het besturingssysteem horen.

Het bijgesloten voorbeeldbestand laat zien dat als het bestandspad bekend is, met de scriptstap URL Openen[] een bestand geopend kan worden met het standaard programma. Mappen, waarvan het bestandspad geen bestandsnaam bevat en eindigt op /, worden geopend met de Finder/File Explorer.

De bestandspaden kunnen van afbeeldingen zijn, waarvan alleen het pad en de thumbnail daadwerkelijk geïmporteerd zijn, die buiten de database zijn opgeslagen.
Het kan ook gaan om een berekend pad naar een gedeelde map met een verzameling documenten die bij een relatie of project horen. Met een knop in een lay-out kan deze map eenvoudig vanuit de database geopend worden.

Als extra toevoeging bevat het script een voorbeeld om bestanden met .html en .php niet met een standaard programma te laten openen maar met een code-editor zoals BBEdit of Adobe Dreamwaver. De werking hangt sterk af van het gekozen programma en is niet gegarandeerd.

We hopen dat dit voorbeeld kan helpen om eenvoudig de database te koppelen met een foto-beeldbank, projectmappen of gewoon een eerder geëxporteerd PDF of ander document te openen.

Voorbeelden om van te leren: Veel globale velden

8 augustus 2017 | Niveau: FileMaker Gevorderden Training

FileMaker programmeren

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

Zeker, je kan velden met globale opslag, zoals ze formeel heten, voor heel veel dingen gebruiken. Een veld waarvan de inhoud niet wordt opgeslagen en elke gebruiker zijn eigen waarde heeft klinkt volkomen onbruikbaar maar is dat juist niet. Vooral in scripts, en met name voor de communicatie met de gebruiker, zijn ze erg nuttig.

Als FileMaker Server wordt gebruikt dan wordt de zoekopdracht door de server uitgevoerd en daarvoor wordt de inhoud van alle globale velden van de tabel gekopieerd van de gebruiker naar de server. Er kan immers gezocht worden op niet-opgeslagen berekeningen die gebruik maken van die globale velden. Bij veel globale velden en grote inhoud, denk aan containervelden met documenten, kost het kopiëren veel tijd.

In de praktijk troffen we een database met honderden globale velden die op zich goed werkte met een normale FileMaker applicatie voor samengebruik. Zoals door ons voorspelt werd de snelheidswinst die men hoopte te krijgen door FileMaker Server te gaan gebruiken volledig teniet gedaan. Het zoeken ging zo traag dat men stopte met FileMaker Server en de database moest worden aangepast. Ook hier geldt, hou het eenvoudig en alles met mate...


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

Zoeken in Relaties schema

18 juli 2017 | Niveau: FileMaker Gevorderden Training

Een relatie-schema

Wordt het Relaties schema wat vol en onoverzichtelijk? Of het nu netjes is of een rommeltje, door te zoeken vindt u altijd een tabelvermelding terug. Er blijkt een soort snel zoeken verborgen te zijn...

In het Bestand menu, dan het Beheren vervolgmenu vindt u Database... om het 'Database beheren' venster te openen. De derde knop/tab in dat venster is Relaties waarin alle tabelvermeldingen met hun onderlinge relaties worden getoond. Helaas zit er rechtsboven in het venster geen 'Snel zoeken' mogelijkheid maar die is er wel...

Zoekt u een specifieke tabelvermelding? Type dan vrij snel achter elkaar de naam van die tabelvermelding. Afhankelijk van de naam kunnen drie letters genoeg zijn en soms meer.
De eerst gevonden tabelvermelding waarvan de naam begint met de letters die u typte, wordt geselecteerd en verschijnt in beeld.
Is het toch niet de goede? Gebruik dan de toetscombinaties control-g (Win) of command-g (Mac) om een 'opnieuw zoeken' te doen en de volgende tabelvermelding met de beginletters te selecteren. Dit kan uiteraard herhaald worden om verder te zoeken.

Hiermee vindt u snel de tabelvermelding die u moet hebben!

Voorbeelden om van te leren: SQL Samengebruik

4 juli 2017 | Niveau: FileMaker Gebruikers Training

FileMaker programmeren

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

Iemand had zelf een database gemaakt en wilde dat met een paar medewerkers delen zodat ze aan dezelfde gegevens werkten. Omdat deze programmeur de twee schakelaars voor Samengebruik niet wist te vinden kreeg hij dat niet werkend.

In plaats van hulp in te roepen werden alle tabellen en velden op een SQL-server geplaatst. Het FileMaker-bestand werd omgebouwd tot de interface van die SQL-server en elke medewerker kreeg een kopie van dat bestand.
Op zich een indrukwekkende prestatie en het werkt op zich goed. Behalve dat het veel meer tijd moet hebben gekost zijn er ook een paar nadelen zoals bij wisselen van SQL-server of het aanpassen van het interface-bestand.

Het advies is niet om die FileMaker-SQL techniek niet te gebruiken maar wel om de goede redenen. Het is goedkoper om een training te volgen of een externe programmeur in te huren en dat heeft de betrokkene alsnog gedaan.


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

Voorbeelden om van te leren: Rode en groene knoppen

20 juni 2017 | Niveau: FileMaker Gevorderden Training

FileMaker programmeren

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

Een database bevat groene en rode knoppen. Elke gebruiker mag op de groene knoppen drukken. Maar de rode knoppen zijn gevaarlijk en mogen alleen ingedrukt worden als de gebruiker goed weet wat de knop doet.

Als per ongeluk een rode knop ingedrukt wordt dan kan op een verkeerd moment iets gebeuren. Of worden records verwijderd. Ook als ervaren gebruiker kan je vergeten zijn waarom de knop gevaarlijk is. In plaats dat de kleurtjes de database duidelijk en veiliger maken, maken ze het juist onduidelijk en de gebruiker onzeker.

In de scripts achter de knoppen kan de scriptstap 'Aangepast dialoogvenster tonen' gebruikt worden om de gebruiker een mededeling te doen. Maar ook om een vraag te stellen en de keuze via de functie Get ( KeuzeLaatsteBericht ) te bepalen. Dit is dé manier om de gebruiker op iets gevaarlijks te wijzen en te laten kiezen tussen doorgaan en annuleren.


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

Script starten op een locatie met regiobewaking

13 juni 2017 | Niveau: FileMaker Kenniswerkers Training

Beacon

De onlangs verschenen FileMaker Go 16 bevat een nieuwe scriptstap om bij locaties en beacons een script te laten uitvoeren. Na een praktijktest gedaan te hebben willen we in dit artikel de nieuwe Regiobewaking-scriptstap uitgebreid uitleggen.

Het was al langer mogelijk om een script naar een locatie of beacon te laten kijken, bijvoorbeeld elke 60 seconden, en een taak uit te voeren. Nu is het mogelijk om locaties en beacons op te geven en een script uit te voeren zodra het apparaat een locatie of beacon bereikt of verlaat.

Met de scriptstap Regiobewakingsscript-configureren kunnen per venster maximaal 20 locaties (geofences) en beacons (iBeacons) met een unieke naam ingesteld worden. Ook wordt het script opgegeven dat uitgevoerd moet gaan worden als de geofence of iBeacon gesignaleerd wordt. De scriptparameter is van geen nut omdat deze geëvalueerd wordt bij het daadwerkelijk aanroepen van het script en dat kan op elk punt in de database zijn.

Geofences zijn minder nauwkeurig en binnen slecht bruikbaar, maar er is geen extra hardware nodig. iBeacons zijn nauwkeuriger en er moet wel extra hardware aangeschaft worden met prijzen vanaf 30 euro per stuk en vervangende batterijen. Bovendien kunnen beacons binnen gebruikt worden, bijvoorbeeld voor locatiebepaling in een magazijn of tentoonstelling.

Voor een geofence moet een locatie met lengte- en breedtegraad en de radius in meters opgegeven worden. Die radius bepaalt de afstand rond de locatie die gebruikt wordt als grens van de locatie.
Bij een iBeacon moeten de UUID, primaire en secundaire getallen opgegeven worden van de beacons die verwacht worden. Al uw iBeacons hebben bijvoorbeeld dezelfde UUID maar per locatie een eigen primair getal en de ruimten een eigen secundair getal. Deze drie waarden kunnen met andere software in de beacons ingesteld worden.

Zodra een gebruiker met zijn iPhone of iPad met FileMaker Go het bereik van de locatie of een beacon verlaat of nadert, dan wordt het opgegeven script uitgevoerd. Per locatie en beacon kunnen dat verschillende scripts zijn.
In het script kan de functie Get ( GebeurtenissenRegiobewaking ) gebruikt worden om te bepalen welke locatie of beacon het betreft en het tijdstip (als tekst!). Ook wordt met een getal aangegeven of de locatie of beacon werd bereikt (1, Waar) of verlaten (0, Niet Waar). Als u meer informatie van de beacon wilt weten, zoals de afstand, dan moet de RangeBeacons functie gebruikt worden.

Het uitvoeren van een script gebeurd echter alleen als FM Go de actieve app is en niet als het in de achtergrond zit. Zodra FM Go weer de actieve app wordt dan wordt alsnog het script gestart maar kan het resultaat van Get (GebeurtenissenRegiobewaking) meerdere regels bevatten van meerdere tijdstippen dat de locatie of beacon werd bereikt en verlaten.
Voor een waarschuwing dat u iets moet ophalen als u langs een winkel rijdt, is het dus niet geschikt.
Als bij het instellen met de Regiobewakingsscript-configureren-scriptstap blijkt dat de gebruiker die al eerder opgegeven locatie of beacon bereikte of verliet, dan wordt het opgegeven script al meteen uitgevoerd.

Heel mooi, maar wat kan je er mee? Een paar voorbeelden:
- record met informatie tonen over een met een beacon uitgeruste vrachtwagen, heftruck, draaibank, elektrische installatie e.d. als de gebruiker ernaast gaat staan,
- een webpagina of film vertonen als de gebruiker een deel van een magazijn, showroom of tentoonstelling bezoekt waar een specifieke beacon hangt,
- als een magazijn of werkplek betreedt wordt, zorgen dat dit de standaard locatie wordt als iemand nieuwe records maakt voor ontvangst van goederen e.d.,
- afhankelijk van de huidige locatie andere printers, mail servers e.d. gebruiken in scripts,
- bij het binnenrijden van een tankstation uw database een nieuw record voor een tankbeurt met kosten e.d. laten maken.

Veel succes met het toepassen in uw database! Heeft u daar hulp bij nodig, neem dan gerust contact met ons op.

Voorbeelden om van te leren: Handmatige berekeningen

6 juni 2017 | Niveau: FileMaker Gevorderden Training

FileMaker programmeren

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

In een facturatie-database moesten de medewerkers niet alleen het aantal en de stukprijs van artikelen invoeren maar ook alle (sub)totalen zelf uitrekenen en typen.

Op een rekenmachine zaten de gebruikers getallen over te typen en de uitkomst over te nemen. Bij het wijzigen van het aantal of de stukprijs moest alles handmatig nagerekend worden en dat zal niet altijd gebeurd zijn met gevolgen voor de inkomsten.

Met berekeningsvelden en resumé-velden kunnen ingevoerde getallen gebruikt worden om automatisch (sub)totalen uit te rekenen. Dan wordt er efficiënter gewerkt en minder fouten gemaakt.


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

Voorbeelden om van te leren: Driedubbele lay-outs

23 mei 2017 | Niveau: FileMaker Basis Training

FileMaker programmeren

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

Sommige programmeurs halen hun inspiratie uit 'echte' databases en bouwen dat in FileMaker na terwijl het vaak eenvoudiger kan. Een voorbeeld daarvan is dat er voor elke tabel drie aparte lay-outs zijn voor bekijken, wijzigen en zoeken van de gegevens.

Een van de sterke punten van FileMaker is dat je maar één lay-out nodig hebt om alles met de gegevens te doen. Dat maakt het voor de gebruiker eenvoudiger, vooral omdat er in alle velden gezocht kan worden. En de programmeur hoeft maar één lay-out te maken en, belangrijker, maar één lay-out te onderhouden. Als er bijvoorbeeld een nieuw veld bij komt dan hoeft dat niet op drie lay-outs geplaatst te worden.

Het bespaart dus tijd en ergernis om één lay-out te gebruiken. En als de drie lay-outs gedaan waren om transacties in FileMaker te implementeren, dat is al aanwezig voor de gebruiker en in scripts: Record openen (Begin), Vorige versie record (Rollback) en Records vastleggen (Commit).


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

Tekstbestand importeren in tekstveld

16 mei 2017 | Niveau: FileMaker Gevorderden Training

Importeren van meerdere tekstbestanden in records was al langer mogelijk maar wist u dat het mogelijk is om één tekstbestand in één record te krijgen? Zonder plug-in!

FileMaker 12 introduceerde de scriptstap 'Invoegen vanuit URL' en die is niet alleen geschikt voor http of ftp URLs. Een URL met het file protocol is ook mogelijk en kan ook gebruikt worden om tekstbestanden zoals .txt, .log, .xml, .svg en .rtf in een tekstveld te importeren.

Het voorbeeldbestand is wat uitgebreider door de tekstbestanden in een containerveld te bewaren en de inhoud ervan te importeren in een tekstveld. Het script bevat commentaar als toelichting op de scriptstappen en berekening.

Een andere toepassing is om een lokaal XML-bestand te importeren, te bewerken en weer te exporteren. Iets soortgelijks kan met de grafische SVG bestanden van bijvoorbeeld een landkaart waarin je een tekst opneemt of een provincie een kleur geeft.
En zo zijn er meer mogelijkheden.

Voorbeelden om van te leren: 5.500 velden

8 mei 2017 | Niveau: FileMaker Gevorderden Training

FileMaker programmeren

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

We zagen ooit een database met maar één tabel en slechts negen records, die onwerkbaar traag was geworden. Het bevatte ruim 5.500 velden omdat elk jaar ongeveer 500 velden werden gedupliceerd waar in berekeningen velden van het jaar ervoor werden gebruikt.

Een groot aantal van deze velden waren door een vergissing niet-opgeslagen berekeningsvelden geworden. Door het grote aantal velden en omdat het merendeel steeds uitgerekend werd, was de database extreem traag.

Door (interne) relaties te gebruiken was het aantal velden beperkt gebleven en was ook de inzet van een programmeur eenmaal per jaar niet nodig. Overigens bevat een goed ontworpen database alleen tabellen met minder dan 150 velden.


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

Voorbeelden om van te leren: Foutafvanging

25 april 2017 | Niveau: FileMaker Gevorderden Training

FileMaker programmeren

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

In te veel databases zien we dat er in scripts geen foutafvanging wordt gedaan. Zodra een database door meerdere personen gebruikt wordt en/of met beveiliging de toegangsrechten worden beperkt dan treden er gegarandeerd problemen op.

Als er niet op fouten wordt gecontroleerd dan gebeuren er rare dingen. Facturen die spontaan aan een ander bedrijf zijn gekoppeld omdat het maken van een nieuwe record mislukte. Of een record dat plotseling is verdwenen. Een verkeerd export-bestand in een e-mail aan een klant. Mogelijk wordt het heel lang niet opgemerkt maar is er wel (financiële) schade.

Gebruik daarom in scripts de If-scriptstap met Get ( LaatsteFout ) = 0 om te bepalen of de vorige scriptstap goed is gegaan en de volgende scriptstappen veilig uitgevoerd kunnen worden.


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

Opletten bij loops met records

18 april 2017 | Niveau: FileMaker Gevorderden Training

Voorbeeldscript met loop

Als een loop wordt gebruikt om in een script meerdere records te bewerken of een actie uit te voeren, dan moet de programmeur er rekening mee houden dat handelingen van andere gebruikers daar effect op hebben.

Door record-locking is het geen probleem als een gebruiker een record bewerkt dat niet tegelijk door het script wordt bewerkt. Voor het geval dat gebruiker en script hetzelfde record willen bewerken is het belangrijk dat de scriptstap 'Record openen' wordt gebruikt en bijvoorbeeld wacht totdat dat lukt.

Wanneer de loop door alle records van de tabel gaat, dan kan er een probleem ontstaan als andere gebruikers nieuwe records maken. Door voorafgaand aan de loop tweemaal de scriptstap 'Alleen weggelaten records tonen' te gebruiken voorkomt u dat.

Als een van de records tijdens het uitvoeren van het script wordt verwijderd is dat meestal geen probleem als de scriptstappen worden gebruikt die ervoor zijn: Loop, Ga naar record [ Volgende ; Afsluiten na laatste: Aan ] en End Loop. Met een eigen teller en tussendoor naar andere records gaan kan het mis gaan.
Het script moet er ook rekening mee houden dat het met minder records kan eindigen dan waarmee het begint.

Hoe meer gebruikers er in de database werken en hoe meer records de loop bewerkt, des te groter is het gevaar.

Zelf de zontijden berekenen

15 februari 2017 | Niveau: FileMaker Expert Training

Als u in uw database wilt weten hoe laat de zon opkomt en ondergaat dan is deze berekening voor u nuttig. Daarmee kunt u bepalen of een activiteit voor zonsopgang begint, berekenen hoeveel uren daglicht er op een dag zijn, de interface aanpassen op licht en donker enzovoort.

Doel
De onderstaande berekening kan als Eigen Functie (met FileMaker Advanced) toegepast worden en eventueel als berekening(sveld) met resp. parameters en velden volgens deze functiebeschrijving:

Opmaak
SunTimes ( latitude ; longitude ; datum ; timezone ; sunrise ; sunset )

Parameters
latitude en longitude - Twee decimale getallen met de WGS84 kaartcoördinaten van de gewenste locatie, resp. breedtegraad en lengtegraad.
datum - De datum waarvan u de zontijden voor een locatie wilt weten.
timezone - Een getal waarmee de tijdzone in aantal uren verschil met GMT/UTC wordt aangegeven, zowel positief als negatief. In geval van zomertijd met één te verhogen.
sunrise en sunset - Twee logische waarden (True/False) waarmee u aangeeft of u de tijd van zonsopgang (sunrise) of zonsondergang (sunset) als resultaat wilt. Als beide parameters True zijn dan worden beide tijden gegeven in een waardenlijst.

Resulterend gegevenstype
tijd of tekst met twee tijden

Vereist
Eigen functie of berekeningsvelden met Atan2 (ook hieronder gegeven).

Voorbeeld
SunTimes ( 52,37307 ; 4,892647 ; Get ( HuidigeDatum ) ; 1 ; True ; False )
Geeft de tijd van zonsopgang voor de Dam in Amsterdam voor vandaag in tijdzone GMT+1 zonder zomertijd. Resultaat op 15 februari 2017: 07:55:44.

Bron
Dit is een voor gebruik in FileMaker aangepaste versie van een Excel-document met berekeningen die te vinden was op de website van US NOAA.


SunTimes ( latitude ; longitude ; datum ; timezone ; sunrise ; sunset ) =

Let ( [
  DatumGetal = GetAsNumber ( Datum ) - 693594 ;
  TijdGetal = GetAsNumber ( Time ( 12 ; 0 ; 0 ) ) / 86400 ;
  JulianDay = DatumGetal + 2415018,5 + TijdGetal - TimeZone / 24 ;
  JulianCentury = Round ( ( JulianDay - 2451545 ) / 36525 ; 13 ) ;
  GeomMeanLongSun = Mod ( 280,46646 + JulianCentury * ( 36000,76983 + JulianCentury * ,0003032 ) ; 360 ) ;
  GeomMeanAnomSun = 357,52911 + JulianCentury * ( 35999,05029 - ,0001537 * JulianCentury ) ;
  EccentEarthOrbit = ,016708634 - JulianCentury * ( ,000042037 + ,0001537 * JulianCentury ) ;
  SunEqOfCtr = Sin ( Radians ( GeomMeanAnomSun ) ) * ( 1,914602 - JulianCentury * ( ,004817 + ,000014 * JulianCentury ) ) + Sin ( Radians ( 2 * GeomMeanAnomSun ) ) * ( ,019993 - ,000101 * JulianCentury ) + Sin ( Radians ( 3 * GeomMeanAnomSun ) ) * ,000289 ;
  SunTrueLongDeg = GeomMeanLongSun + SunEqOfCtr ;
  SunTrueAnomDeg = GeomMeanAnomSun + SunEqOfCtr ;
  SunRadVector = ( 1,000001018 * ( 1 - EccentEarthOrbit * EccentEarthOrbit ) ) / ( 1 + EccentEarthOrbit * Cos ( Radians ( SunTrueAnomDeg ) ) ) ;
  SunAppLongDeg = SunTrueLongDeg - ,00569 - ,00478 * Sin ( Radians ( 125,04 - 1934,136 * JulianCentury ) ) ;
  MeanObliqEclipticDeg = 23 + ( 26 + ( ( 21,448 - JulianCentury * ( 46,815 + JulianCentury * ( ,00059 - JulianCentury * ,001813 ) ) ) ) / 60 ) / 60 ;
  ObliqCorrDeg = MeanObliqEclipticDeg + ,00256 * Cos ( Radians ( 125,04 - 1934,136 * JulianCentury ) ) ;
  SunRtAscenDeg = Degrees ( Atan2 ( Cos ( Radians ( ObliqCorrDeg ) ) * Sin ( Radians ( SunAppLongDeg ) ) ; Cos ( Radians ( SunAppLongDeg ) ) ) ) ;
  SunRtAscenDeg = Degrees ( Atan2 ( Cos ( Radians ( SunAppLongDeg ) ) ; Cos ( Radians ( ObliqCorrDeg ) ) * Sin ( Radians ( SunAppLongDeg ) ) ) ) ;
  SunDeclinDeg = Degrees ( Asin ( Sin ( Radians ( ObliqCorrDeg ) ) * Sin ( Radians ( SunAppLongDeg ) ) ) ) ;
  VarY = Tan ( Radians ( ObliqCorrDeg / 2 ) ) * Tan ( Radians ( ObliqCorrDeg / 2 ) ) ;
  EqOfTimeMinutes = 4 * Degrees ( VarY *  Sin ( 2 * Radians ( GeomMeanLongSun ) )-2 * EccentEarthOrbit *  Sin ( Radians ( GeomMeanAnomSun ) )+4 * EccentEarthOrbit * VarY *  Sin ( Radians ( GeomMeanAnomSun ) ) *  Cos ( 2 * Radians ( GeomMeanLongSun ) )-,5 * VarY * VarY *  Sin ( 4 * Radians ( GeomMeanLongSun ) )-1,25 * EccentEarthOrbit * EccentEarthOrbit *  Sin ( 2 * Radians ( GeomMeanAnomSun ) ) ) ;
  HASunriseDeg = Degrees ( Acos ( Cos ( Radians ( 90,833 ) ) / ( Cos ( Radians ( Latitude ) ) * Cos ( Radians ( SunDeclinDeg ) ) ) - Tan ( Radians ( Latitude ) ) *  Tan ( Radians ( SunDeclinDeg ) ) ) ) ;
  SolarNoon = ( 720 - 4 * Longitude - EqOfTimeMinutes + TimeZone * 60 ) / 1440 ;
  SolarRise = Floor ( ( SolarNoon * 1440 - HASunriseDeg * 4 ) / 1440 * 86400 ) ;
  SolarSet = Floor ( ( SolarNoon * 1440 + HASunriseDeg * 4 ) / 1440 * 86400 ) ] ;

  Case (
    sunset and sunrise ; GetAsText ( GetAsTime ( SolarRise ) ) & "¶" & GetAsText ( GetAsTime ( SolarSet ) ) ;
    sunrise ; GetAsTime ( SolarRise ) ;
    sunset ; GetAsTime ( SolarSet ) ;
    ""
  )

)


Atan2 ( y ; x ) =

Let ( [
  a = If ( x > 0 ; Atan ( y / x ) ;
          If ( x < 0 ; PI - Atan ( -y / x ) ;
          PI / 2 * Sign ( y ) ) );
  result = Mod ( a ; 2 * PI ) ];

  result
)

De berekening is opgesteld met FileMaker 12 die een nul voor de komma van een getal eiste maar deze niet opsloeg zodat bij aanpassing overal weer een nul moest worden getypt... Dat werd opgelost door de berekening in een tekstdocument te bewaren.