Trigger een FileMaker script op andermans computer

Concept

Je kan deze techniek gebruiken om elk gewenst script uit te voeren op het toestel van een andere gebruiker die is ingelogd in dezelfde database. Je kan op die manier ook een robot-pc een script laten uitvoeren op elk gewenst moment. Het script wordt werkelijk aangeroepen op vraag. je bent niet afhankelijk van een timer-script dat permanent in de achtergrond draait.
Geen plugins vereist. Deze techniek kan je inzetten in elk FileMaker project. Het werkt ook met FileMaker Go en FileMaker Webdirect! De enige vereiste is dat dezelfde database is geopend bij meerdere gebruikers. Een ‘luister’ layout moet actief zijn bij elke gebruiker. Maar dat kan in een verborgen venster zodat de gebruiker er niks van merkt.

De OnRecordLoad script trigger

De sleutel zit in het gebruik van de OnRecordLoad script trigger. Deze trigger wordt namelijk niet alleen geactiveerd bij het laden van een record —het normale gebruik ervan — maar ook bij het verwijderen van het actieve record. Als je het actieve record verwijdert, dwing je FileMaker om een nieuw record in te laden (of geen indien je found set leeg is). Op dat moment trigger je dus OnRecordLoad en kan je een script uitvoeren. Nu komt het leuke: een actief record van een bepaalde gebruiker verwijderen kan je perfect doen vanop een andere client. Zo kan je dus op afstand een script uitvoeren bij een andere gebruiker.

Hoe pas je dit toe?

Om elke gebruiker te kunnen traceren maken we een unieke sessie ID bij het openen van de database. Zo’n ID kan vanalles zijn: login naam, IP adres enzovoort. Belangrijk is dat die ID uniek is en daarvoor zijn login of IP adres minder geschikt. Een gebruiker kan immers meerdere sessies starten met dezelfde login of vanaf hetzelfde IP adres (bv. FileMaker en WebDirect). Gewoon een volgnummer volstaat eigenlijk al.
We slaan de actieve sessie-ID op in een globaal veld en daarna maken we een sessie-record met deze ID aan in de ‘luister’-tabel. Het record van deze sessie moet actief zijn in een layout waarop de OnRecordLoad script trigger is geactiveerd. We openen die layout in een afzonderlijk venster dat we verbergen voor de gebruiker.
Van zodra een andere gebruiker dit sessie-record verwijdert, wordt de OnRecordLoad script trigger geactiveerd en kunnen we een script uitvoeren.

The sky is the limit

We kunnen dus elk gewenst FileMaker script laten uitvoeren op een andere client. Ik ben van mening dat de meest nuttige toepassing van deze techniek moet worden gezocht bij robot-clients die op vraag een script uitvoeren. Robot clients zijn nuttig voor toepassingen als het maken van PDF’s, load testing, connecties via 32-bit ODBC drivers… Ik zie het een beetje als de ‘perform script on server’ variant voor de client. Wat we niet rechtstreeks op de server kunnen doen is nu mogelijk via een robot client. On-click.

Demo bestand


In de demofile zitten twee toepassingen van de techniek. De eerste is een eenvoudig berichtensysteem. Merk op dat het bericht wordt getoond via een FileMaker-dialoogvenster. Dit is enkel mogelijk door een script uit te voeren op de andere computer.
Het twee voorbeeld is een schermafdruk-toepassing waarmee je op elk gewenst moment een screenshot kan nemen van het scherm van een collega die in de toepassing is ingelogd. Dit werkt enkel op Mac omdat we hiervoor AppleScript gebruiken.
Klik hier om het bestand te downloaden.

Update

Deze techniek werd internationaal opgepikt. Seedcode gebruikt het nu voor hun ‘PDF Robot‘.

Richard Carlton (RCC Consulting) maakte er zelfs een video over. Bedankt Richard!

Een voorbeeld van PDF aanmaak in WebDirect via een robot staat nu op modularfileMaker.org.

28 sept. 2015: blijkbaar kwam Uli voor mij in 2013 reeds op deze techniek. Zie discussie in de community. Respect Uli!

18 mei 2020: community link naar Uli’s artikel werkt niet meer. Op zijn vraag vermelden we hier zijn naam en bedrijf: Ulrich (Uli) Glaser, FileKraft.