Portalen vrij sorteren

Sorteer een portalen op elke gewenste kolom.

In het bestand bij dit artikel kunnen de portaalrecords worden gesorteerd door op de kolomkop van het gewenste veld te klikken.

Het werkt op zich ook heel eenvoudig: door op de kolomkop te klikken wordt het sorteerscript geactiveerd en krijgt meteen via de scriptparameter door op welk veld moet worden gesorteerd. Die parameter wordt gebruikt in een ExecuteSQL-opdracht:
“SELECT UUID FROM Orders WHERE OrganisatieID=UUID ORDER BY <klikveld> DESC/ASC”.
en het resultaat wordt in een globale variabele opgeslagen ($$idlist)

In de tabel met de portaalrecord zit een berekening die de positie van de eigen UUID in variabele $$idlist bepaalt en in de tabel met de organisaties wordt de portaal gesorteerd weergegeven op die berekening …. het resultaat is een dynamisch gesorteerde portaal.

Dowload hier het Portal_Sorting bestand, met twee varianten van deze techniek. De ene gebruikt zoals beschreven een global-variable, de andere een global-field. Een global-field ipv van een variable gebruik je als de portaalrecords in een anders bestand zitten, dan waarin je interface zit.

[edit dd 1 dec 2013]
In het voorgaande voorbeeld wordt ExecuteSQL gebruikt, maar op het Clarify-forum vroeg René om een voorbeeld zonder SQL. Nu heb ik daar ff over nagedacht en ben met een werkende oplossing gekomen die exact hetzelfde resultaat (dus met alle toeters en bellen) oplevert als de versie die gebruik maakt van SQL.

Ik vind het zelf minder handig om te implementeren, maar het is ook een methode en het voordeel is dat je deze techniek ook in FM10 en FM11 kan toepassen.
[/edit]

[edit dd 8 dec 2013]
Versie 2 van Portal_sort_noSQL geüpload. In de eerste versie bleek dat negatieve getallen verkeerd werden gesorteerd. Het nieuwe bestand is automatisch via de link uit de beschikbare downloads beschikbaar of je klikt de link hierna: Portal_Sort_Field_noSQL_v2

Het sorteren gaat dmv een berekening:

Let ( [
    fieldtype = GetValue ( Substitute (
    FieldType ( Get ( FileName ) ; SortField ) ; ” ” ; ¶ ) ; 2 ) ;
    fielddata = Evaluate ( SortField ) ;
    numdata = If (
        fieldtype = “Number” ;
        Round ( 10^6 * GetAsNumber ( fielddata ) ; 6 ) ) ;
    numvalue = If (
        numdata ≠ “” ;
        GetAsText ( If ( numdata < 0 ; “0” ) &
        10^100+ numdata ) ) ;
    Sortdata = Case (
        fieldtype = “Text” ; fielddata ;
        fieldtype = “Number” ; numvalue ;
        Right ( “000000000000000” & GetAsNumber ( fielddata ) ; 15 ) )
] ;
    If ( PortalSortDirection = CalcSortDirection ;
        Case (     fieldtype = “Text” ; fielddata ;
            fieldtype ≠ “number” ; sortdata ;
            Right ( “00000000000000000000000000000000000000000000000000” &
                “00000000000000000000000000000000000000000000000000” &
                Left ( sortdata ; 100 ) ; 100 )
        ) // end-case
    ) // end-if
) // end-let

en deze is zoals je ziet redelijk uitgebreid en daarom heb ik die in dit voorbeeld in een “Custom Function” gezet, zodat het ook wat gemakkelijker in een andere situatie is te gebruiken. (Voor diegenen die niet de beschikking hebben over “Filemaker Pro Advanced”  staat de formule ook nog eens in de sorteervelden als commentaar)

Kanttekening bij deze berekening is dat er 2 beperkingen zijn:

  1. Het aantal cijfers achter de komma kan niet hoger zijn dan 6. Wanneer een hoger getal wordt gekozen, worden de resultaten onbetrouwbaar.
  2. Wanneer de mantisse van een getal groter wordt dan 100 cijfers worden de resultaten eveneens onbetrouwbaar.

[/edit]

Inspiratiebron voor dit artikel: FileMaker Portal Sorting That Doesn’t Suck™