2019

jun

5

Av

En av nyheterna i FileMaker 18 är funktionen While. Det är en funktion som jag tror jag kommer att använda en hel del, på bara någon vecka har jag använt den flera gånger i samband med portaler. Jag vill ofta sammanställa information från portaler eller relationer, en relation behöver inte nödvändigtvis visas som en portal, i textform eller som en JSON-funktion. Det kan t.ex. vara flera fält i en portal som jag vill presentera med komma- eller tab-tecken mellan för att göra en kompakt och trevlig presentation av innehållet.

I det här exemplet använder jag en exempeldatabas som jag tidigare använt för sökning i portaler med funktionen ExecuteSQL. Databasen består av en portal där det går att söka efter bilmärken. Istället för att presentera resultatet som en portal, som i det tidigare exemplet, vill jag göra det i textform. För varje post i tabellen Bilmärken, där sökningen görs, finns fält för ”Bilmärke”, ”Land” och ”Antal”. Antalsfältet kan t.ex. vara antal sålda bilar eller antal bilar av bilmärket i Sverige. I exemplet har jag dock lagt in ett slumptal på varje post med funktionen Random, det har alltså ingen egentlig betydelse i exemplet.

Sökningen görs på samma sätt som i tidigare exempel. Söker jag på t.ex. alla bilmärken som börjar med bokstaven ”B” blir resultatet enligt bilden.

 

 

Resultatet visas i ett vanligt textfält och kan på så sätt enkelt kopieras och klistras in i t.ex. ett ordbehandlingsprogram som Word eller liknande, all text är redan utformad och klar. I exemplet finns det ett kommatecken mellan fälten ”Bilmärke” och ”Land” samt ett tab-tecken till fältet ”Antal”. I det fall det inte finns ett land angivet för ett bilmärke blir det inget kommatecken. För att åstadkomma detta mer eller mindre automatiskt använder jag den magiska List-funktionen.

Substitute ( List (Bilmärke; Land); "¶";", ")

List-funktionen sätter in en radmatning mellan värdena, men om det inte finns något värde i fältet ”Land” blir det bara en rad i fältet. Med funktionen Substitute ersätter jag alla radmatningar med ”, ”. Som resultat blir det komma-tecken mellan fälten, men bara om det finns värde i dem båda.

Ett tab-tecken får jag med formeln Char(9), där siffran 9 är ASCII-värdet för just tab-tecken. För att det ska visas som en snygg tabell i FileMaker markerar jag textfältet i layoutläget och sätter in ett höger tab-läge på lämpligt avstånd. Det gör jag med Granskaren.

Jag gör ett beräkningsfält i tabellen för layouten, i det här fallet Portalsök, som gör beräkningen från alla poster i relationen. Det gör jag med funktionerna While (för att loopa genom alla posterna i relationen en och en) och GetNthResult. Den slutgiltiga formeln blir så här:

While ( 
  [ i = 0; resultat = ""] ; 
    i < Count(Bilmärken::id_bilmärke); 
  [ i = i + 1; 
    resultat = 
      List(resultat; 
        Substitute(
          List(
            GetNthRecord ( Bilmärken::Bilmärke; i);
            GetNthRecord ( Bilmärken::Land; i) 
          ); "¶";", "
        ) & 
        Char(9) & GetNthRecord ( Bilmärken::Antal; i)
       )] ; 
    resultat 
)

Som första argument nollställer jag två variabler, variabeln i som används för att hålla reda på vilken post som behandlas, och variabeln resultat som kommer att innehålla den utformade texten.

Formeln loopar genom alla poster i relationen, hur många poster det är beräknas med funktionen Count. Det anges i det andra argumentet i funktionen While.

Som tredje argument anges vad som ska beräknas. I det här fallet ökas variabeln i med värdet 1 och sedan sätts informationen för en post ihop, dvs. en rad i den resulterande texten, med komma- och tab-tecken mellan de olika fälten. Funktionen List använder jag igen, nu för att lägga ihop alla raderna i det resulterande textfältet.

I det fjärde argumentet anges resultatet, i det här fallet variabeln resultat.

Tänk på att välja beräkningsresultatet för fältet till Text.

Ladda ner exempeldatabas: While_text.fmp12

OBS! Du behöver FileMaker Pro 18 för att While ska fungera.

Skriv en kommentar

  • (will not be published)

Läs också: