Meerdere klikbare linken in een tekst: Een FileMaker Script

Door Serhii.

Introductie

Een paar dagen geleden kregen we een verzoek van een klant. Ze hebben een tabel met producten met een veld “beschrijving” waarin ze kunnen zetten wat ze maar willen. Ze willen links opnemen in de beschrijving en deze kunnen openen in een externe browser. Deze taak zou eenvoudig zijn als het slechts één link was – dan sla je deze link op in een apart veld en zet je er een knop naast. Maar in het verzoek stond specifiek dat er meerdere linken in de tekst kunnen staan, en de links kunnen ook op verschillende plaatsen in dat veld staan, soms midden in een zin, soms tussen haakjes.

“Geen probleem!” zei ik, en koos voor de meest betrouwbare aanpak: Google, op een willekeurig forum in een bericht uit 2014 vond ik een bestaande oplossing. Maar op de een of andere manier kon ik niets geschikts vinden; het lijkt erop dat mijn Google-vaardigheden niet meer zo goed zijn als vroeger.

Dus moest ik zelf met een andere aanpak komen (kun je je dat voorstellen in het tijdperk van ChatGPT?!). Ik ben er vrij zeker van dat de meesten van jullie wel een paar manieren kunnen bedenken om dit te doen, ik ga jullie een manier presenteren die ik zelf heb bedacht. En misschien vind je het wel een leuke kleine functie die je zelf kunt gebruiken, zo uit de doos, gewoon kopiëren en plakken.
Zo ziet het er in actie uit:

Houd er rekening mee dat sommige stappen zijn afgestemd op een specifieke use case en dat je ze naar eigen inzicht kunt aanpassen. Wat je moet weten over dit specifieke geval: De genoemde tabel wordt beheerd door beheerders met behulp van één lay-out, waar ze gegevens invoeren, inclusief het beschrijvingsveld. De link-klik functionaliteit bestaat in een andere lay-out, die beschikbaar is voor alle gebruikers in alleen-lezen modus. Daarom ga ik een OnObjectEnter scripttrigger gebruiken voor een tweede lay-out, omdat het de gegevensinvoer daar op geen enkele manier verstoort.

Het Script

Laten we eerst het hele script bekijken en later zal ik uitleggen waarom ik doe wat ik doe.

Script om meerder links te openen in een tekstveld

Lijnen 1-3:

Dit bestaat alleen voor het testen. Ik wil het script alleen uitvoeren als ik CTRL ingedrukt houd, zodat ik de inhoud van het veld vrij kan bewerken zonder per ongeluk het script te activeren.

Dit wordt niet gebruikt in de eigenlijke oplossing, maar ik besloot het op te nemen om aan te tonen dat je zelfs klikfunctionaliteit kunt gebruiken in hetzelfde veld dat je gebruikt voor gegevensinvoer.

Lijn 5:

scriptregel die voorziet wanneer je op een lege plaats klikt

We willen niets doen als de gebruiker op de lege ruimte aan het einde van het veld klikt. Het voorkomt ook dat er een script wordt getriggerd als je het veld op een andere manier invoert in plaats van met je muis te klikken (tabben, Ga naar object, enzovoort).

Lijnen 6-7:

De aangepaste functie die een woord ophaalt waarop de gebruiker heeft geklikt. We zullen er later in deze post naar kijken, laten we eerst het script afmaken.

Lijnen 8-9:

scriptlijn om onnodige karakters te verwijderen

Zoals ik al eerder zei, kan onze link soms tussen haakjes staan, dus we verwijderen ze ook uit het geselecteerde woord (specifiek voor mijn gebruik, kan worden genegeerd).

Ik stel een veld in voor een functionaliteitshowcase die je hieronder kunt zien. Dit is natuurlijk geen echte use case.

Lijnen 10-12:

open de link in browser

Als het woord waarop de gebruiker heeft geklikt begint met “http://” of “https://” – dan weten we dat het een URL is, open deze in een browser. Ik heb deze stap toegevoegd omdat we in mijn geval alleen met http(s) links willen werken. Als je elk type ondersteunde link wilt openen, heb je het If statement niet nodig. Open URL controleert automatisch of je een geldige link hebt opgegeven. Als u iets doorgeeft dat FileMaker niet herkent als een URL, dan wordt dit genegeerd en wordt de stap Open URL overgeslagen. Raadpleeg de FileMaker documentatie voor meer informatie over ondersteunde URL-typen (Link).

Lijn 14:

exit het script door op te slaan

Commit om het veld onmiddellijk af te sluiten. Anders blijft het veld actief en stopt onze trigger met werken (omdat we OnObjectEnter gebruiken). Belangrijk detail: deze stap maakt het veld ook onbeschikbaar voor scrollen, dus wees voorzichtig met de tekstgrootte omdat je niet kunt klikken op een tekst die niet in je bewerkingsvak past.

Best eenvoudig, niet?

De aangepaste functie

Laten we nu de aangepaste functie eens van dichterbij bekijken:

Let (
[
cursor = Get ( ActiveSelectionStart ) + 1;
textFull = Substitute ( Get ( ActiveFieldContents ); ["¶";"§"]; [" ";"§"] );
textFull = "§" & textFull & "§";
linkStart = Position ( textFull ; "§"; cursor; -1) + 1;
linkEnd = Position ( textFull ; "§"; cursor; 1);
linkLength = linkEnd - linkStart;
link = Middle ( textFull ; linkStart ; linkLength )
];
link
)
  1. We registreren de positie van een cursor (op welk woord de gebruiker heeft geklikt) en voegen er 1 aan toe vanwege stap 3.
  2. We vervangen alle spaties en returns door een speciaal symbool (ik heb gekozen voor “§”). Als je andere scheidingstekens verwacht, vervang die dan ook. De keuze van het symbool doet er niet echt toe, zorg er gewoon voor dat het niet in je tekst voorkomt. Nu weten we dat alle woorden in een veld worden gescheiden door één symbool.
  3. Om dezelfde reden voegen we hetzelfde symbool toe als de eerste en de laatste in het veld.
  4. Zoek het begin van het woord door links van de cursor te zoeken naar het symbool van je keuze.
  5. Zoek het einde van het woord door rechts van de cursor te zoeken naar het symbool van je keuze.
  6. Zoek de lengte van het woord.
  7. Stop het gevonden woord in een variabele en retourneer het als resultaat.

Conclusie

Zo, dat was het. Natuurlijk is dit niet de enige mogelijke methode, maar het was een perfecte snelle oplossing voor deze use case (naar mijn mening). Later kwam ik met een andere oplossing voor een andere use case die webviewers en complexere structuren gebruikt. Maar dat is een verhaal voor een andere keer.

Door dit script te implementeren, kunt u efficiënt omgaan met meerdere linken in een tekstveld, waardoor de functionaliteit en gebruikerservaring van uw FileMaker database worden verbeterd. Probeer het eens en kijk hoe het werkt voor uw behoeften! Veel scriptplezier!