ListLogic

Je wilt soms wel eens lijstjes vergelijken: Welke values komen in beide lijsten voor (AND) of welke values uit lijst1 staan er niet in lijst2 (NOT) of welke values komen alleen voor in lijst1 of alleen in lijst2 (XOR). Met UniqueValues kan je daarvoor een leuke CF maken, die supersnel werkt.

De onderstaand functie levert altijd de unieke waarden op, is niet hoofdletter-gevoelig en vult het resultaat NIET met een ¶ aan.

// ######################
// ## ListLogic function
// ## Format:
// ## ListLogic ( type ; ListA ; ListB )
// ## Parameters:
// ## Type: “NOT”,”AND” or “XOR”
// ## ListA: List of textvalues
// ## ListB: List of textvalues
// ## Data type returned:
// ## text (the first true values will be returned and the function is
// ## case-insensitive)
// ## Description:
// ## Compare 2 lists of values with each other with “NOT”,”AND” or “XOR”
// ## the result will show respectively:
// ## NOT: Values in the first list missing in the second
// ## AND: Values that are in both lists
// ## XOR: Values that are not in both lists
// ######################

Let ( [
result = Case (
type = “NOT” ;
Let ( [
listb = if ( isempty ( listb ) ; “tempvalue” ; listb ) ;
blist = UniqueValues ( listb & ¶ )
] ;
Substitute ( Case (
IsEmpty ( lista ) ; “” ;
UniqueValues ( List ( blist ; lista ) ) ) ;
[ blist ; “” ] )
) ;

type = “AND” ;
Let ( [
la2b = FilterValues ( lista ; listb ) ;
lb2a = FilterValues ( listb ; lista ) ;
result = UniqueValues (
Substitute (
List ( la2b ; lb2a ) ;
[ “¶¶” ; ¶ ] )
)
] ;
Left ( result ; Length ( result ) – 1 )
) ;

type = “XOR” ;
Let ( [
nota = ListLogic ( “NOT” ; lista ; listb ) ;
notb = ListLogic ( “NOT” ; listb ; lista )
] ;
Case (
lista = “” ; UniqueValues ( listb ) ;
listb = “” ; UniqueValues (
lista ) ;
List ( nota ; notb ) )
) ;

“ERROR: Incorrect function type. Choose from: NOT, AND & XOR” )

] ;
Substitute (
TrimAll (
Substitute ( result ;
[ ” ” ; “@$space$@” ] ;
[ ¶ ; ” ” ] ) ;
1 ; 1 ) ;
[ ” ” ; ¶ ] ; [ “@$space$@” ; ” ” ] )
)

Dec2Binary ( dec ) voor FM18

Deze functie zet een decimaal getal ook om naar eenbinaire reeks, maar deze werkt met de vanaf FM18 beschikbare while-functie:

While (
[
n = Int ( dec ) ; // Dit is de invoer
p = If ( n > 0 ; Int ( Ln ( n ) / Ln ( 2 ) ) ) ; // Maximale macht van 2 bepalen
b = If ( n > 0 ; “” ; “0” ) // Lege variabele + pleistertje om met 0 om te kunnen gaan
] ;
p ≥ 0 ;
[
f = 2^p ; // Macht van 2 ter controle
p = p – 1 ; // Aftellen iteratie
x = Case ( n = 0 ; 0 ; n ≥ f ; 1 ; 0 ) ; // Bepalen van 1 of 0
n = n – f * x ; // Rest bepalen
b = b & GetAsText ( x ) // Digit toevoegen aan tot hier gevonden reeks
] ;
b // Resultaat tonen
)

Het bijzondere van deze functie is dat het resultaat altijd werkelijk tekst is en dat je dus geen rekening hoeft te houden met FileMaker die ineens wtenschappelijke notatie gaat toepassen. Je kan met deze functie integers met een lengte van circa 400 cijfers omzetten. De lengte van het resultaat wordt dan wel meer dan 1300 enen en nullen.

De werking van deze functie is ook anders dan die van Dec2Bin.

Bij Dec2Bin wordt iedere iteratie de maximale macht van 2 bepaald en daarmee wordt de waarde van een macht van 10 berekend, waarna deze waarde bij de uitkomst van de vorige iteratie woirdt geteld.

In deze Dec2Binary wordt eerst de maximum binary digit berekend, waarna van ieder minder significant bit de waarde (0 of 1) wordt bepaald. Deze functie is daarom enigszins trager dan Dec2Bin, maar heeft als voordeel dat je geen zorgen hebt over de weergave.

Dec2bom

Deze functie maakt gebruik van de Custom Functie Dec2bin om een “onzichtbare” index aan te maken tbv het sorteren van een keuzelijst:

Let ( [
num = dec ;
m = If ( len < 54 ; len ; 54 ) ; // Maximaal 54 bits = 18014398509481983
s = “0000000000000000000000000000000000000000000000000000000” ;
x = Mod ( num ; 2 ) ;
y = GetAsText ( If ( num < 2^m ; Right ( s & dec2bin ( num ) + not ( x ) ; m ) ; 2^m – 1 ) )
] ;
Substitute ( Left ( y ; Length ( y ) – 1 ) & x ; [ 0 ; Char ( 8203 ) ] ; [ 1 ; Char ( 65279 ) ] )
)

In werkelijkheid wordt hiermee een decimaal getal omgezet naar 1-en en 0-en, die op hun beurt weer worden omgezet naar de onzichtbare karakters Char ( 8203 ) en Char ( 65279 ). Wanneer je de string die hiermee wpordt gemaakt vóór een waarde zet, dan kan je op deze string sorteren terwijl je hem niet kan zien. Later volgt nog een artikel aan de Tips-zijde dat gaat over gesorteerde keuzelijsten.

Dec2bin

Deze functie zet een decimaal getal om naar een binaire reeks:

// Simpele functie om een decimaal getal om te zetten naar een binaire getal
//
// Let op met even getallen > 255 Deze functie maakt een binair getal uit machten
// van 10 en zodra je > 10^8 komt gaat FM over op wetenschappelijke notatie
// Dit kan je voorkomen door te zorgen dat het getal altijd oneven is. Na de
// omrekening zet je getal om naar tekst en je vervang indien je het zelf oneven
// hebt gemaakt, de laatste 1 weer voor een 0. Dit gaat goed tot 2^54 – 1
//
Let ( [
n = Int ( dec ) ;
p = Int( Ln ( n ) / Ln ( 2 ) )
] ;
Case ( n > 0 ; 10^p + dec2bin ( n – 2^p ) )
)

In het artikel over recursie hier op FileMakerTips staat de werking van deze functie (en de totstandkoming) precies beschreven

Round2Multiple

Dit is een heel eenvoudige functie, waarmee een getal op een veelvoud van een andere getal/fractie kan worden afgerond:

Round ( Number / Precision ; 0 ) * Precision

Ipv een nummer kan je ook een tijd gebruiken, de precision zijn dan de seconden. Afronden op hele minuten zou dan met precision 60 moeten.

Typen en zoeken tegelijk

Voor keuzelijsten is “Type ahead” beschikbaar. Terwijl dat je een veld invult, wordt de keuzelijst beperkt. In een lijst met bijvoorbeeld 10.000 artikelen kan het handiger zijn te typen en meteen de selectie te zien.

In het voorbeeldbestand demonstreer ik een effectieve techniek waarmee na iedere toestaanslag een zoekopdracht wordt uitgevoerd. De zoekopdracht die wordt uitgevoerd, zoekt op vooraf gekozen velden die in het zoekscript zijn vastgelegd. Lees meer Typen en zoeken tegelijk

Virtual Magic Valuelists

In de community zie ik af en toe vragen voorbijkomen van mensen die keuzelijsten van meerdere tabellen in één willen hebben en vragen van mensen die Magic-Valuelists niet werkend krijgen.

Het interessante is dat je de Magic-Valuelists-techniek kan combineren met Virtuele Lijsten en ExecuteSQL() om Virtual Magic Valuelists te maken. Die combinatie heeft me geïnspireerd om dit voorbeeld in elkaar te zetten. Lees meer Virtual Magic Valuelists

Postcode opzoeken bij een adres

Je kent vast wel het probleem dat je een adres hebt en dat je de postcode niet weet. Dan ga je naar google, daar tikt je het adres in Maps en dan kijk je wat er bij de postcode verschijnt.

Met de download bij dit artikel kan je exact hetzelfde doen vanuit FileMaker. Werkt in Pro én in Go. LET OP! FileMaker 16 óf de BaseElements-plugin gebruiken! (allebei gaat trouwens ook goed)

NL Google Postcodesearch

Script dispatching met het FMP-protocol

je kan tijdens het scripten in FileMaker van alles aanroepen en bewerken door de naam op te geven: ga naar layout, veld instellen op naam, evalueer, ga naar object etc.

Nu vroeg iemand in de FileMaker Community waarom je scripts niet dmv een variabele een script kan starten. Ik heb daar even over nagedacht en dit zou je prima kunnen doen met het FMP-protocol. Lees meer Script dispatching met het FMP-protocol

Netwerk-installatie van FileMaker mbv “Assisted Install.txt”

Als je op deze website struint heb je zonder twijfel al eens FileMaker geïnstalleerd en vrijwel zeker heb je dat gedaan door simpelweg de installer te openen, te dubbelklikken, vragen te beantwoorden, licentie in te vullen, te registreren …. best veel handelingen eigenlijk. Helemaal niet erg wanneer je FMP alleen op de eigen computer nodig hebt, maar kan vervelend als je 10, 20 of misschien wel 100 computers moet doen.

Voor dat soort situaties kan je een zogenaamde Assisted-Install uitvoeren ofwel een netwerk-installatie. In deze guide van FileMaker (pdf-formaat) kan je precies nalezen hoe je dat moet doen. Ik heb dit keer eens filmpjes gemaakt om te laten zien. Lees meer Netwerk-installatie van FileMaker mbv “Assisted Install.txt”

Recursiviteit

Twee jaar geleden heb ik in dit artikel (Recursieve Custom Functions maken) een methode getoond waarmee je stapsgewijs een CF zou kunnen maken. Het voorbeeld in dat artikel was zogenaamde “kop-recursie” of in het engels “head-recursion”.

In dat artikel heb ik de opmerking gemaakt dat over het verschil tussen kop- en staart-recursie een apart artikel zou kunnen worden geschreven. Hieronder probeer duidelijk te maken wat de verschillen zijn en stel een paar functies beschikbaar die je zelf als basis voor je eigen CF’s zou kunnen gebruiken. Lees meer Recursiviteit

Andere SSL-certificaten gebruiken op FMServer

untrusted ikoonhet is al een tijdje mogelijk om met FMP en FMS een “beveiligde” verbinding te maken. Gebruik je echter het standaard FileMaker SSL-Certificaat dat bij de installatie van FMS wordt meegeïnstalleerd, dan gebruik je een certificaat dat “de hele wereld” ook gebruikt en dat is per definitie dus niet veilig.
trustedJe kan echter ook een eigen certificaat installeren en met de komst van FileMaker Server 15 is het installeren van een SSL-certificaat
een eitje geworden.

Lees meer Andere SSL-certificaten gebruiken op FMServer

JSON uitlezen

in FileMaker is behoorlijk lastig ben ik achtergekomen. Er is over JSON heel veel documentatie te vinden, maar dat is allemaal gericht op het gebruik van libraries in javascript, php etc.

Voor FileMaker zijn er dan voor zover ik heb gevonden 2 plug-ins beschikbaar waar je JSON mee kan uitlezen (en deels ook bewerken, maar dat is buiten de scope van dit artikel). De gratis Base-Elements plug-in van goya (BE) en de MBS FileMaker plug-in van Monkeybread Software (MBS) De beide plug-ins werken, maar hebben allebei zo hun voor- en nadelen.

Lees meer JSON uitlezen

Meertalig systeem

Het gebeurt wel eens dat je een project hebt waarbij meertalige veldlabels nodig zijn. Een nederlandse gebruiker ziet dan “Achternaam” staan waar een engelse gebruiker “Last name” ziet staan. Thans dat is de bedoeling.

Er zijn op internet wel voorbeelden te vinden van hoe dat kan worden gerealiseerd en ik heb er zelf diverse bedacht, gezien en uitgeprobeerd. De manier die ik hier voorstel is héél eenvoudig uit te breiden én toe te passen. Deze werkwijze is absoluut niet invasief op je bestaande oplossing, want je bouwt het er bij, zonder relaties of wat dan ook toe te voegen. Lees meer Meertalig systeem

FMServer aan-/uitschakelen op een desktop

Dit keer een artikel over het op bepaalde manieren aan en uit schakelen van FileMaker Server en specifiek op een desktop computer (Mac of Windows). Je zou denken dat dit niet veel voeten in de aarde heeft en inderdaad als je er aan bent gewend, dan heeft het in jouw eigen situatie niet veel om het hand, maar als je gaat uitzoeken, dan komt er toch nogal wat om de hoek kijken en dus heb ik daar maar een artikel aan gewijd.

Lees meer FMServer aan-/uitschakelen op een desktop

Recursieve Custom Functions maken

Custom Functions of Eigen functies (CF) zijn heel handig wanneer je getallen of tekst volgens een vast patroon wilt bewerken. Graden celsius omrekenen naar graden Fahrenheit en vice versa is daar een voorbeeld van: F = C * 9 / 5 + 32 en andersom C = 5 * ( F – 32 ) / 9 zijn gemakkelijk in CF te vangen, want het zijn enkelvoudige bewerkingen van een stuk data.

Lees meer Recursieve Custom Functions maken

Valutakoersen

wanneer je bezig bent met handel buiten de euro-zone dan krijg je te maken met wisselkoersen en het feit dat die fluctueren. De Europese Centrale Bank (ecb) publiceert dagelijks rond 3 uur CET op http://www.ecb.europa.eu/stats/exchange/eurofxref/html/index.en.html 32-tal valuta-koersen.

Deze koersen kun je gebruiken om bijvoorbeeld in de je boekhouding te gebruiken. Het zijn overigens de middelkoersen en niet de inkoop- en verkoop-koersen. De verschillen daarmee moet je natuurlijk apart verwerken.

Lees meer Valutakoersen

FileMaker in een andere taal op MacOS

Een jaar geleden heb ik een artikel geplaatst over hoe je Filemaker “Engelstalig” zou kunnen gebruiken op een Nederlandse Mac OS X. Die manier houdt feitelijk in: het wijzigen van de pakket-inhoud van je Filemaker.app en dat werkt. Maar die manier is niet erg flexibel en de tip van Felix: Language Switcher (http://www.tj-hd.co.uk/en-gb/languageswitcher/) werkt prima, maar weer niet lekker als je meerdere versies Filemaker wilt gebruiken.

Je kan (een willekeurige) Filemaker ook starten vanaf de command-line en daarbij je voorkeur voor een specifieke taal opgeven. Je kan kiezen uit 11 talen: Duits (de), Engels (en), Spaans (es), Frans (fr), Italiaans (it), Japans (ja), Koreaans (ko), Nederlands (nl), Portugees (pt), Zweeds (sv) en Chinees (zh-Hans).

Start “Terminal.app” en tik in:
/Applications/FileMaker\ Pro\ 13\ Advanced/FileMaker\ Pro\ Advanced.app/Contents/MacOS/FileMaker\ Pro -AppleLanguages '(en)'
(Alles op één regel zoals in het voorbeeld van de afbeelding hieronder)

Schermafbeelding 2014-10-12 om 23.27.00

Lees meer FileMaker in een andere taal op MacOS

Text Logic (Updated)

Enkele weken geleden heb ik hier de Custom-Functie Unique Values gepubliceerd. Met die functie kan je uit een hoeveelheid waarden, de unieke waarden filteren en naar behoefte (geen) rekening houden met hoofdletters. Deze functie leent zich echter ook prima om logische problemen op te lossen met value-lijsten. Om te beginnen geef ik eerst de 3 belangrijkste functies, die je nodig hebt en waarmee al het andere valt af te leiden.


De eerste is alle waarden tonen die wél in “Lijst A” staan, maar niét in “Lijst B” (NOT), Not_Values ( Lijst A ; Lijst B ) :

Lijst A Lijst B Not_Values
Nummer1
Nummer2
Nummer3
nummer1
nummer2
nummer4
G
P
T
J
F
G
Nummer4
P
T
nummer2
Nummer1
Nummer3

Deze functie is in dit voorbeeld zoals je ziet niét hoofdlettergevoelig, maar dat is simpel in te stellen. Lees meer Text Logic (Updated)

Routeplanner met Googlemaps

Het vorige artikel (en voorbeeld) toonden een route van A naar B in een kaart. Dat is natuurlijk leuk, maar daar heb je meestal geen webviewer voor nodig. Je wilt vaak meer en dat kan met het voorbeeld van deze keer, dat een (paar) stapje(s) verder gaat:
1) De route bevat waypoints
2) De volgorde wordt vanzelf geoptimaliseerd
3) Er wordt een totale afstand berekend

De basis is hetzelfde bestand van het vorige artikel. Er is een veld toegevoegd “Waypoint”, waarin een lijst van via punt/adressen in kan worden gezet. De volgorde van die adressen is niet belangrijk, want google-maps berekent zelf de ideale route. Verder is de berekening van het veld “userdata” wat aangepast om de lijst in het juiste (javascript-formaat) aan het javascript in de pagina aan te bieden. Lees meer Routeplanner met Googlemaps

GoogleMaps in de Webviewer

Er zijn verschillende manieren om GoogleMaps in de webviewer te tonen. Google heeft de API in de afgelopen jaren ook al enkele keren gewijzigd. Hier stel ik het gebruik van de Javascript v3 API aan jullie voor.GoogleMaps

Ik gebruikte voorheen de GoogleMaps-Embed API en die werkt nog steeds prima. Gebruik je echter FMPro 12.0 v 5 of nieuwer (inclusief versie 13x) op MacOSX, dan krijg je met de embed-API een groot grijs vlak te zien ipv een mooi kaartje! Ik heb dat als BUG neergelegd bij FMI, maar zij komen er niet uit en geven als advies de nieuwe GoogleMaps Javascript v3 API te gebruiken.

Die API lijkt erg simpel (dat is ie eigenlijk ook) maar als je niks van Javascript weet, dan wordt het toch ietsje lastiger en dat geldt ook voor mij, dus ben ik er maar eens ingedoken. Lees meer GoogleMaps in de Webviewer

Unique Values

De unieke waarden uit een lijst overhouden

Er zijn diverse functies op internet te vinden waarmee je uit een lijst met waarden de unieke waarden kunt filteren. Die functies missen  case-sensitivity of ze zijn niet autonoom en dat heeft de functie die ik hier voorstel wél.

De custom-functie heet UniqueValues en ziet er als je hem gebruikt zo uit:

UniqueValues( Valuelist ; CaseSensitive ; Result )

LET OP! Dit is een nieuwe variant van de functie die tot 15 Augustus 2014 hier heeft gestaan. Lees meer Unique Values