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.

2020

FindInValuelist

18 mei 2020 | Niveau: FileMaker Gevorderden Training

Valuelists komen in FileMaker op verschillende plaatsen voor en kunnen erg handig zijn. Onze Eigen Functie 'FindInValuelist' maakt het gebruik wellicht nog handiger.

Een valuelist (in het Nederlands waardenlijst) is een tekst met een opsomming van waarden die gescheiden worden met het nieuwe-regelteken. In berekeningen gebruik je daarvoor het ¶-teken. De waarden zijn een tekst (mits ze zelf geen nieuwe-regeltekens bevatten) maar ook een getal, datum, tijd of tijdstempel die omgezet worden naar een tekst.

In een aantal gevallen geeft de ophaalfunctie Get () een waardenlijst terug omdat er meerdere waarden mogelijk zijn. Zoals Get ( SysteemIPadres ) dat een lijst van meerdere IP-adressen kan geven. Er zijn ook een aantal Ontwerpfuncties die waardenlijsten teruggeven zoals LayoutNames () en LayoutIDs ().

Uiteraard kan je ook zelf een waardenlijst handmatig invoeren of berekenen en bijvoorbeeld opslaan in een veld. Of gebruiken als een scriptparameter voor het meegeven van informatie aan een (server-side) script.
En met de List-functie of het List Resume-veldtype kan je de veldinhoud van meerdere records tot een waardenlijst samenvoegen. Bijvoorbeeld het primaire sleutelveld om zelf een selectie van records te bewaren, te vergelijken enzovoort.

De Eigen Functie 'FindInValuelist' maakt het zoeken in die waardenlijsten iets gemakkelijker.
De parameter search_text is de tekst waarnaar je wilt zoeken in de tweede parameter search_list, en als die gevonden wordt dan wordt de bijbehorende waarde uit return_list teruggegeven. Als er geen return_list wordt opgegeven dan is het resultaat het regelnummer waar het is gevonden in de search_list. Gebruik eventueel de GetAsNumber e.a. functies als je het resultaat als getal, datum, tijd of tijdstempel wilt gebruiken.

Bijvoorbeeld als we zoeken naar de naam van een lay-out in de lijst van alle aanwezige lay-outs en dan het bijbehorende ID willen weten. Stel dat deze lay-outs aanwezig zijn in een database:

Organisaties Lijst
Personen Lijst
Organisaties Etiket
Personen Form

en hun unieke IDs zijn

4
1
12
2

Dan zal de uitkomst 12 zijn van deze berekening:
FindInValuelist ( "Organisaties Etiket" ; LayoutNames ( "" ) ; LayoutIDs ( "" ) )
De uitkomst is het unieke ID, dat je kan opslaan in bijvoorbeeld een log-tabel. De layout-naam of het layout-nummer zijn daar niet voor geschikt, omdat naam en volgorde kunnen wijzigen. Maar omdat de scriptstap Ga naar layout [] met een berekening op nummer werkt, zal het opgeslagen ID voor gebruik naar het lay-outnummer omgezet moeten worden met:
FindInValuelist ( "12" ; LayoutIDs ( "" ) ; "" )
De derde parameter search_list wordt leeg gelaten, zodat de functie het volgnummer teruggeeft dat als layout-nummer gebruikt kan worden.

Zo zijn er nog heel veel andere toepassingen van deze FindInValuelist functie. We hopen dat het helpt om handiger met waardenlijsten te werken. Als je assistentie nodig hebt, dan helpt een van onze docenten je graag verder.


FindInValuelist ( search_text ; search_list ; return_list ) =

While (

  [
    i = 1 ;
    j = 0 ;
    list_count = ValueCount ( search_list )
  ] ;

  i ≤ list_count and j = 0 ;

  [
    j = If ( search_text = GetValue ( search_list ; i ) ; i ; 0 ) ;
    i = i + 1
  ] ;

  Case (
    j > 0 and not IsEmpty ( return_list );
      GetValue ( return_list ; j ) ;
    j > 0 and IsEmpty ( return_list );
      j ;
    ""
  )

)

Vlaggen berekenen

12 februari 2020 | Niveau: FileMaker Expert Training

Voor wie met landen in zijn database werkt, dit is een leuke oefening om de vlag van het betreffende land uit te rekenen. Weinig nuttig maar dit doen wij als we ons in drukke tijden even willen ontspannen...

In de Unicode tekenset zitten de normale letters en de populaire emojis maar ook de vlaggen van landen. Dit is zo opgezet dat met de tweeletterige ISO-code van een land, de code voor de vlag te berekenen is.

Daarvoor moet de reeks van normale letters omgerekend worden in de reeks voor de vlaggen, van de twee letters naar twee regio-codes. En als die twee regio-codes samengevoegd worden, is dit de code voor de vlag.

De details over omrekenen, Code() en Char() functies zullen we je besparen. Maar volgens ons werkt de volgende berekening. En zonder plug-in!
Eventueel kan de berekening zelf als Eigen Functie in je database geïmplementeerd worden, bijvoorbeeld met de naam 'CharCountryFlag'.


// Calculation for UNICODE flags based on country codes
// Country codes according to ISO 3166-1 alpha-2
// GetAsText can be omitted, but used as precaution

Let (
  [
    flagOffset = 5680655356
    asciiOffset = 65

    firstChar = Code ( Middle ( Upper ( country_code ) ; 1 ; 1 ) ) ;
    secondChar = Code ( Middle ( Upper ( country_code ) ; 2 ; 1 ) )
  ] ;

  Char (
    GetAsText ( flagOffset + ( ( secondChar - asciiOffset ) * 10^5 ) )
    &
    GetAsText ( flagOffset + ( ( firstChar - asciiOffset ) * 10^5 ) )
  )
)