Category: Blog

  • Writing a calculation function: json2sql

    Writing a calculation function: json2sql

    [vc_row bg_color=””][vc_column][vc_column_text]After spending two days writing a calculation function, I figured I wasn’t a day short, and that sharing the story behind writing this function could be interesting for other developers—not so much for the function itself, but to capture the mindset and the general ideas that help approach a complex function.

    Moreover, since Claris has honored me with a spot at the Engage conference next March in Austin, with a topic as unusual and pretentious as “how I, Fabrice Nordmann, tackle a problem to solve with the FileMaker platform,” I need to start seriously reflecting to understand my own process in order to explain it. As readers, you’re serving as my test audience, for which I thank you.[/vc_column_text][vc_column_text]

    First, let’s explain what the function does.

    The function is called json2sql and enables the formulation of an SQL query for FileMaker using a JSON parameter.

    Indeed, the JSON writing function, JSONSetElement, became quite enjoyable to use with FileMaker 21, and you quickly get used to it, while writing SQL remains cumbersome—especially if you want to write it well, without dependency on field names, so that the query doesn’t break if a field is renamed.

    The idea, therefore, is to pass a JSON parameter to this function, have it translate the parameter into an SQL query, and execute it (that was the initial idea, but things got much more complicated afterward, as you’ll see).

    We already had a function that we use frequently, sql.match (_requestedField ; _matchField ; _match), which allows retrieving values from a column (_requestedField) in records matching a criterion in a query of this type.

    SELECT _requestedField WHERE _matchField = _match

    It allows us to handle a large portion of the queries we need when coding in FileMaker.

    But, of course, it’s very limited. If you want multiple columns, functions, multiple comparisons (WHERE)… it’s not enough.

    We also have a set of functions that help us write SQL cleanly, like **sql.table**, **sql.col**, **sql.in.clause**… but nothing as cool as JSON.

    Plus, there were dirty dishes in the sink, so it was clearly the perfect moment to come up with a new function to write.

    So here we go!

    First, what should be the “signature” of this function? What name? What parameters?

    I like to keep things simple, so:

    json2sql ( _json )

    Exactly, JSON is already designed to structure information, so I’ll include everything in the JSON—it looks nice. (Spoiler: it won’t end up that way.)[/vc_column_text][vc_column_text]So, I’m thinking about the structure of the JSON, keeping in mind that the function ultimately needs to call the native function:

    ExecuteSQL ( sqlQuery ; fieldSeparator ; rowSeparator { ; arguments... } )

    If you’re not familiar with the ExecuteSQL function, let’s recap: sqlQuery is a SELECT-only SQL query. You can use ? placeholders instead of comparison values, which FileMaker will replace with items from the argument list at the end of the function, in order. The advantage of this approach is that FileMaker handles data types for you (converts dates to SQL format, adds quotes around text but not numbers, manages decimal separators, etc.).

    For example, if I write:

    ExecuteSQL ( "SELECT primaryKey FROM invoices WHERE clientName > ? AND invoiceDate = ? AND totalAmount > ?" ; "" ; "" ; "L" ; Date ( 6 ; 1 ; 2024 ) ; round ( 100/3 ;2 ) )

    Then, FileMaker will interpret it automatically and execute the following query:

    SELECT primaryKey FROM invoices WHERE clientName > 'L' AND invoiceDate = '2024-06-01' AND totalAmount > 33.33

    (adds single quotes, converts the date, and uses a period as the decimal separator, even if my file uses a comma, since SQL interprets the period).

    That’s our quick refresher on ExecuteSQL; now, let’s get back to writing the function.

    We’ll have a JSON structured using a function like:[/vc_column_text][vc_column_text]

    JSONSetElement ( ""
       ; [ "query" ; <a complex JSON object I will think about later> ; JSONObject ]
       ; [ "fieldSeparator" ; "" ; JSONString ]
       ; [ "rawSeparator" ; "" ; JSONString ]
       ; [ "arguments" ; <a JSON array, since arguments must be ordered> ; JSONArray ]
    )

    [/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][vc_column_text]Note that I wish to use these notations

    • "{table}"."{column}" instead of simply {column}
    • "{table}" instead of {table}

    This approach helps avoid issues with SQL reserved names and oddly named fields, like those with spaces. It’s essential, in my opinion, to adopt this mindset: everyone should be able to use this function in any FileMaker file. I make no assumptions that fields will be named “correctly” or that the decimal separator will match mine, or that the language will be French (even though I personally use the English version of FileMaker). So, always think “ubiquity”: the function should work everywhere, and if it can’t, that limitation should be deliberate, acknowledged, and documented.[/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][vc_column_text]The “algorithmic” structure of the query is therefore:

    "SELECT" & [ loop over an ordered list or array of column names ] & " FROM " & [ table, which is information I can extract from the same list if I fully qualify field references with the table::field notation ]

    followed by an optional section (criteria aren’t mandatory):

    & " WHERE " & [ loop over an array of criteria composed of a logical operator (except for the first one), a column, a comparison operator, and a value ]

    [/vc_column_text][vc_column_text]I finally dive into writing a JSON prototype for the query parameter.

    So I open the Data Viewer and…[/vc_column_text][vc_column_text]

    JSONSetElement ( ""
       ; [ "query.columns[+]" ; GetFieldName ( invoice::invoiceNumber ) ; JSONString ]
       ; [ "query.columns[+]" ; GetFieldName ( invoice::invoiceDate ) ; JSONString ]
       ; [ "query.columns[+]" ; GetFieldName ( invoice::amount ) ; JSONString ]
    )

    [/vc_column_text][vc_column_text]Here’s the first array—the list of column names (this is indeed the name, not the value, so the type is always String).

    Except… I realise I forgot about functions. I know I don’t want to handle them just yet, but my structure needs to allow for future expansion. I’m also keeping in mind that if I ever want to manage joins, I’ll need a bit more information about the columns, but that’s for later. Starting over:[/vc_column_text][vc_column_text]

    JSONSetElement ( ""
       ; [ "query.columns[+].name" ; GetFieldName ( invoice::invoiceNumber ) ; JSONString ]
       ; [ "query.columns[:].function" ; "Sum" ; JSONString ]
       ; [ "query.columns[+].name" ; GetFieldName ( invoice::invoiceDate ) ; JSONString ]
       ; [ "query.columns[+].name" ; GetFieldName ( invoice::amount ) ; JSONString ]
    )

    [/vc_column_text][vc_column_text]Good, now I have an array representing the list of columns, and I need to do something with it.

    First and foremost, I need an environment for this. So, I write in my Data Viewer:[/vc_column_text][vc_column_text]

    Let ([
       _json = JSONSetElement ( ""
             ; [ "query.columns[+].name" ; GetFieldName ( invoice::invoiceNumber ) ; JSONString ]
             ; [ "query.columns[:].function" ; "Sum" ; JSONString ]
             ; [ "query.columns[+].name" ; GetFieldName ( invoice::invoiceDate ) ; JSONString ]
             ; [ "query.columns[+].name" ; GetFieldName ( invoice::amount ) ; JSONString ]
          );
       _query = ""
    ];
       _query
    )

    [/vc_column_text][vc_column_text]

    I can now tackle the query parameter and observe the result.

    I won’t include the entire content of the Data Viewer here—just the _query parameter of the Let function.

    [/vc_column_text][vc_column_text]

    "SELECT " & While ([
            j = _json ;
    	          c = ValueCount ( JSONListKeys ( j ; "columns" )) ;
    	          i = 0 ;
    	          r = "" ;
    	          v = "" ;
    	          to = "" ;
    	        toq = "" 
    	     ];
    	        i < c ;
    	     [
    		        v = Substitute ( JSONGetElement ( j ; "columns[" & i & "].name" ) ; "::" ; ¶ ) ;
    		        function = JSONGetElement ( j ; "columns[" & i & "].function" ) ;
    		        // as we are selecting from 1 table only, let's extract the table occurrence name only during the first iteration
    		        to = Case ( i = 0 ; GetValue ( v ; 1 ) ; to ) ;
    		        // quoted version, to avoid issue with reserved words or blanks
    		        toq = Case ( i = 0 ; Quote ( to ) ; toq ) ;
    		        column = GetValue ( v ; 2 ) ;
    		        colq = Quote ( column ) ; // quoted version
    		        // append to the list
    		        r = List ( r ; Case ( IsEmpty ( function ) ; colq ; function & "(" & colq & ")" )) ;
    		        i = i+1
    	     ];
    		        Substitute ( r ; ¶ ; ", " ) & " FROM " & to 
       )
    )

    [/vc_column_text][vc_column_text]First, rest assured, I didn’t write this all in one go. But I can’t dissect each step, or you’d get bored, and the dishes in the sink would start to smell…

    A few things to note:

    • I didn’t handle functions right away.
    • I follow several conventions for my While loops, which make the process faster:
      • The iterator is always i (except in nested loops, where it’s j).
      • I start with c (the number of iterations) and initialize i (the iterator), r (the result), and usually v (the processed value).
      • The condition is almost always i < c.
      • Incrementing the iterator (i = i+1) is in the first parameter of the logical part or last when working on a JSON array (zero-based).
      • I only added comments later.

    You might also wonder why I have to and toq, column and colq, instead of just the q (quoted) versions. You’re right; at this stage, it’s not necessary. I left them here to make comparison with future versions easier (saving you some work!).[/vc_column_text][vc_column_text]

    WHERE clause

    I started with the criteria.

    I began writing the array, but at that point, I needed some data—or at least a table and fields for testing.

    I asked ChatGPT to provide me with a sample dataset in CSV format, making sure it included various data types (text, including at least one column with multi-line text, numbers, and dates) and duplicates (to enable grouping). I also ensured that some column names included spaces or accented characters. I dragged the CSV file onto the FileMaker icon, which converted it into an .fmp12 file, and voilà, I was ready to work “for real.” Well, almost. I first needed to convert the date data from the YYYY-MM-DD format to FileMaker’s format, DD/MM/YYYY in my file. That should have clued me in, but… you’ll see.

    Then, back to the Data Viewer.[/vc_column_text][vc_column_text]

    JSONSetElement ( "" 
       ; [ "criteria[+].column" ; GetFieldName ( invocies::total ) ; JSONString ]
       ; [ "criteria[:].operator" ; "<" ; JSONString ]
       ; [ "criteria[:].value" ; 100.23 ; JSONNumber ]
       ; [ "criteria[+].column" ; GetFieldName ( invoices::invoiceNumber ) ; JSONString ]
       ; [ "criteria[:].operator" ; "LIKE" ; JSONString ]
       ; [ "criteria[:].logicalOperator" ; "OR" ; JSONString ]
       ; [ "criteria[:].value" ; "NC%" ; JSONString ]
       ; [ "criteria[+].column" ; GetFieldName ( invoices::clientVatNumber ) ; JSONString ]
       ; [ "criteria[:].operator" ; "=" ; JSONString ]
       ; [ "criteria[:].value" ; "*" ; JSONString ]
       ; [ "criteria[+].column" ; GetFieldName ( invoices::taxTotal ) ; JSONString ]
       ; [ "criteria[:].operator" ; "=" ; JSONString ]
       ; [ "criteria[:].value" ; "=" ; JSONString ]
       ; [ "criteria[+].column" ; GetFieldName ( invoices::date ) ; JSONString ]
       ; [ "criteria[:].operator" ; ">" ; JSONString ]
       ; [ "criteria[:].value" ; Date ( 12 ; 1 ; 2015 ) ; JSONString ]
    )

    [/vc_column_text][vc_column_text]As you can see, with the new [+] and [:] notation in version 21, it’s incredibly easy to write an array naturally. With [+], I start a new row, and with [:], I add a “column” (“attribute”) while staying in the same row.

    This allows me to write in a very natural way, and new ideas come to mind as I go. For example, I thought of using common, practical search operators in FileMaker, such as “=” (empty) and “*” (not empty). So, I included these cases in the prototype, planning to map them to IS NULL and IS NOT NULL in SQL. What’s important here is that I hadn’t considered this before starting, but as I worked, I realised it would be manageable and decided to integrate it right into the first version.

    First pitfall

    On the other hand, while writing this prototype, I realize something I hadn’t thought of (I should have, but I must face the truth, even if it disappoints my mother: I am imperfect).
    Note: For my grandmother, whom I mentioned earlier (article in French), it’s all black or white; she has a very Boolean way of thinking.

    And so, the issue is that when it comes to date comparison, I realize that if I pass the arguments as ?, as I initially wanted, so they can be substituted with values (see above on the ExecuteSQL syntax), the type will inevitably be lost through JSON, as JSON lacks a date type. As a result, FileMaker won’t be able to pass the correct data type, seeing only text or a number.

    This adds to what I already had in mind: to pass a variable number of parameters to a function, as indicated by {}(optional) and (variable number) in the function’s signature:

    ExecuteSQL ( sqlQuery ; fieldSeparator ; rowSeparator { ; arguments... } )

    And this, I know, will force me to use indirection and the Evaluate function… and I’m not thrilled about it at this stage, especially when dealing with field name independence, quotation marks, type conversions, and so on. In short, it’s a hassle that will complicate writing this function, maintaining it, and potentially affect its quality. We’ll get to indirection (Evaluate) later, but for other reasons.

    So I’m dropping the idea of passing arguments with ?, and I’ll need to insert the values directly and correctly in the JSON using a function I already use to format SQL queries: sql.getAsSqlData ( _data ; _type ). This is particularly relevant for date, time, and timestamp data types. Numbers are well managed by JSON.

    As I write this, I realize that the function name json2sql might not be the best choice. In our function library, the first word helps categorize functions alphabetically based on what they handle. We have a slew of text.<something>, json.<something>… but here, it seems the focus is more on SQL than JSON. So I should probably rename the function sql.fromJson… I’ll have to think this over a bit more.

    [/vc_column_text][vc_column_text]This mishap led me to reconsider the signature I had chosen, with a single JSON parameter.

    Although I could have continued in this direction, I realized that including fieldSeparator and rowSeparator parameters in the JSON wouldn’t highlight the difference from ExecuteSQL or the way arguments are passed. I decided to revise this approach and move to the following signature:

    json2sql ( _jsonQuery ; _fieldSeparator ; _rowSeparator )

    which resembles the signature of the native function more closely:

    ExecuteSQL ( sqlQuery ; fieldSeparator ; rowSeparator { ; arguments... } )

    and it lightens the documentation that the user (developer) will need to read to use the function.

    This, too, is part of the “mindset” I adopt when writing a custom function: I aim to respect the conventions of the FileMaker platform and to be as consistent as possible. I’m not giving up the underscores before the parameters, though; firstly, they remind the user that this is a custom function, and secondly, it’s a convention I find quite important in my code. But let’s not get into naming conventions…[/vc_column_text][vc_column_text]I then add to my function the part that handles the criteria (the WHERE clause):[/vc_column_text][vc_column_text]

    <the first part of the function here>
    & Case ( not IsEmpty ( JSONListKeys ( j ; "criteria" )) ; 
       " WHERE " &
       While ([
          i = 0 ;
          c = ValueCount ( JSONListKeys ( j ; "criteria" )) ;
          v = "" ;
          r = ""
       ];
          i < c ;
       [
          f = GetValue ( Substitute ( JSONGetElement ( j ; "criteria[" & i & "].column" ) ; "::" ; ¶ ) ; 2 ) ;
          o = JSONGetElement ( j ; "criteria[" & i & "].operator" ) ;
          o = Case ( IsEmpty ( o ) ; "=" ; o ) ; // default comparison operator is =
          lo = JSONGetElement ( j ; "criteria[" & i & "].logicalOperator" ) ; 
          lo = Case ( IsEmpty ( lo ) ; "AND" ; lo ) ; // default logical operator is AND
          value = JSONGetElement ( j ; "criteria[" & i & "].value" ) ; 
          type = JSONGetElementType (  j ; "criteria[" & i & "].value" ) ;
          // this ugly things converts the data to JSON then parses it as a string to handle decimal separators and single quotes.
          v = Case ( type = JSONNumber or type = JSONBoolean ; Substitute ( JSONSetElement ( "" ; "v" ; value ; JSONNumber ) ; [ "{\"v\":" ; "" ] ; [ "}" ; "" ] ) ; "'" & value & "'" ) ;
          r = r & Case ( i ; " " & lo & " " ) // the logical operator is omitted for the first criterion
              & Quote ( f ) & " " & Case ( o = "=" and ( IsEmpty ( value ) or value = "=" ) ; "IS NULL" ; o = "=" and value = "*" ; "IS NOT NULL" ;  o & " " &  v ) ;
          i = i+1 
       ] ;
          r
       )
    )

    [/vc_column_text][vc_column_text]A few comments:

    • This part is conditional on finding a criteria array in the JSON. I could have included the ” WHERE ” directly in the While result, but I find this approach more readable. It’s immediately clear that it’s the WHERE clause of the query.
    • For the comparison operator (o), if it’s empty, I default to “=”. Considering default values helps make the function easier to use.
    • For the logical operator, the default is AND.
    • As anticipated, handling * and = is very straightforward (see the definition of r).

    [/vc_column_text][vc_column_text]I’ll briefly cover the other clauses: GROUP BY, ORDER BY, OFFSET, and FETCH FIRST. They’re fairly straightforward in the function’s code.

    Just note that I intentionally excluded OFFSET by percentage, as it introduced ambiguity in the JSON parameter—should I send a number (5) or a text (“5%”)? Also, I’ll admit that I’ve never used the percentage offset, so I didn’t want to add unnecessary complexity, at least not in the first version.[/vc_column_text][vc_column_text]

    // GROUP BY
    & Case ( not IsEmpty ( JSONListKeys ( j ; "group" )) ; " GROUP BY " &
    
       While ([
          i = 0 ;
          c = ValueCount ( JSONListKeys ( j ; "group" )) ;
          f = "" ;
          r = ""
       ];
          i < c ;
       [
          f = GetValue ( Substitute ( JSONGetElement ( j ; "group[" & i & "].column" ) ; "::" ; ¶ ) ; 2 ) ;
          r = List ( r ; Quote ( f )) ;
          i = i+1 
       ] ;
          Substitute ( r ; ¶ ; ", " )
       )
    )
    
    // ORDER BY
    & Case ( not IsEmpty ( JSONListKeys ( j ; "sort" )) ; " ORDER BY " &
       While ([
          i = 0 ;
          c = ValueCount ( JSONListKeys ( j ; "sort" )) ;
          d = "" ;
          r = ""
       ];
          i < c ;
       [
          f = GetValue ( Substitute ( JSONGetElement ( j ; "sort[" & i & "].column" ) ; "::" ; ¶ ) ; 2 ) ;
          d = JSONGetElement ( j ; "sort[" & i & "].dir" ) ; 
          d = Case ( IsEmpty ( d ) ; "A" ; d ) ;
          r = List ( r ; Quote ( f ) & Case ( Left ( d ; 1 ) = "d" ; " DESC" ; " ASC" )) ;
          i = i+1 
       ] ;
          Substitute ( r ; ¶ ; ", " )
       )
    )
    
    // OFFSET and FETCH FIRST
    & Case ( JSONGetElement ( j ; "offset" ) ; " OFFSET " & JSONGetElement ( j ; "offset" ) & " ROWS" )
    & Case ( JSONGetElement ( j ; "limit" ) ; " FETCH FIRST " & JSONGetElement ( j ; "limit" ) & " ROWS ONLY" )

    [/vc_column_text][vc_column_text]

    SQL execution, and it’s done!

    And so, here I am with a function that creates a perfect SQL query from a JSON parameter. All that was left was to execute the SQL and return the result.

    Nothing could be simpler.

    A few tests. It works like a charm! The queries work perfectly—I get the correct results, with or without functions, with or without criteria…

    And then… I had an idea.

    And that’s when things started to go sideways…

    …but I’ll tell you all about it in part two.[/vc_column_text][vc_column_text]

    Conclusions of Part One

    • Get into a specific mindset. Here, I know I’m working on a generic function, so it must be capable of operating in any context and be easy for any developer to use. When I create a function for a client project, I prefix the function name with the project name, and at the end of the project, I review these functions to see if any should be made generic and added to our toolkit. But if some qualify, I NEVER do so without reviewing the code to ensure it’s consistent with our other functions, and that it accounts for cases we didn’t need in this specific project.
    • Respect the FileMaker platform whenever possible and write functions in a way that makes them naturally usable within that context.
    • Thinking about handling default values prevents forcing the user (the developer) to specify all parameters.
    • Plan, but not too much. I have an idea of what the function needs to do, and I defer some possibilities right away (like joins in this case), but on the other hand, I don’t close myself off to ideas that may come up along the way (such as handling the comparison operators = and * in this example). As you’ll see in the second part, having an idea midway through cost me a lot of time, but on the other hand, the result was worth the effort.
    • Work with data. Start with concrete examples and move towards abstraction. This approach is far more efficient than building an entire mental structure, only to confront it with reality later and realize it doesn’t work.
    • Think about data types, and keep in mind that when looping (While), multi-line texts are a data type in themselves.
    • Have conventions (like the While loop structure here, among others) and stick to them.

    [/vc_column_text][/vc_column][/vc_row]

  • My Own Private FileMaker 21.1

    My Own Private FileMaker 21.1

    [vc_row bg_color=””][vc_column][vc_column_text]Exactly two years ago, at the first EngageU conference in Malmö, Matt Navarre organized a panel discussion and was kind enough to invite me to participate.

    In the presence of Brad Freitag, CEO of Claris, and Robert Holsey, FileMaker Product Manager, I suggested that Claris could devote a small portion of its resources to revisiting some longstanding issues that frustrate developers and that wouldn’t require complex development work.

    Brad and Robert immediately responded and understood, and over the past two years, I’ve had the chance to work more closely with them, especially with Rick Kalman, who organized this framework, as well as with David McKee and others. On my end, I reached out to the developer community to gather their ideas on priorities, and on the other, I shared this feedback with the Claris teams.

    Much of what’s new in version 21.1 stems from this process, though not exclusively.

    So, in this version 21, there are major new features, as well as these “little changes that seem insignificant”—some are simply about improving developer comfort, while others are true game-changers. And there are also no fewer than 309 fixes!

    Let’s start with these small improvements, and we’ll end with the real new features.

    First, my favorite, which goes far beyond a minor enhancement:

    Ignore Auto-Entry Options

    [/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/2″][ish_image image=”101632″ size=”full” align=”center” show_caption=”yes”][/vc_column][vc_column width=”1/2″][ish_image image=”101630″ size=”full” align=”center” show_caption=”yes”][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][vc_column_text]Yes! We can finally write to the database without triggering auto-entries. Until now, the only way to achieve this was through an import, but that was extremely complicated and not dynamic, unless you resorted to very complex techniques for standard development.

    However, keep in mind that while this option is very powerful, it can also compromise basic audit log techniques. So, if the integrity of your data relies on auto-entries, be careful to remove script editing privileges from users (though, realistically, if they had this privilege, they could already alter the data using an import).[/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][vc_column_text]

    Default Theme

    Finally! It’s now possible to set a default theme for a file (via File > Manage > Themes). This means creating a new layout will no longer bring back the Aqua Blue theme. This is an important step toward the ultimate goal: for FileMaker to no longer be an unattractive product.[/vc_column_text][vc_column_text]

    Column Width Retention in Developer Interfaces

    We’re still wondering what you’ll do with all the time you’ll save, now that you won’t have to keep resizing columns in tables, fields, value lists, custom functions, and more…[/vc_column_text][vc_column_text]

    Default Values in Script Steps

    Oh, I’m thrilled about this! All those script steps with absurd default values are finally getting some logic. Now, any script steps with options to open a dialog or prompt for confirmation have these options set to No by default—except for critical actions like Truncate Table, Delete Record, Delete Portal Row, and Delete All Records.

    When writing a script, the goal is usually maximum automation, with user intervention as the exception. For example, setting Commit Record to No by default—an option that hardly anyone uses—makes it immediately server-compatible (for scripts run on the server).

    One minor wish: I would have loved it if Enter Find Mode also had Pause set to No by default, but I guess that would’ve been too perfect.

    The best news of all: Go to Next/Previous Record now has Exit After Last set to Yes by default. The same applies to the corresponding action for portal rows. Say goodbye to those endless loops due to oversight![/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][vc_column_text]

    Now, let’s move on to the major new features in this version. And there are plenty!

    First, let’s highlight full compatibility with the latest macOS: Sequoia.

    PSoSoS

    Perhaps the most significant new feature: Perform Script on Server is now… server-compatible. This means you can trigger parallel actions on the server. When working with this feature, choosing the right host is crucial—and here’s some great news for our hosting service, fmcloud.fm. According to tests by Nick Lightbody, our architecture supports four times as many server script sessions as traditional services.

    I’ll also take this opportunity to let you know that you can request the update for your fmcloud.fm server right now. While you’re at it, you’ll get to explore our new console, packed with very handy features.

    This update marks the well-deserved retirement of our famous FMSDIFM, which we introduced 13 years ago.[/vc_column_text][vc_column_text]

    End of Bandwidth Limit for OData and Data API

    If you’re hosting your own server or using a third-party hosting service instead of Claris’s own FileMaker Cloud, the traffic limit has been lifted. Finally! It made no sense to charge for access to your own data on your own server. Plus, it introduced uncertainty around the actual cost of the platform. With these limits removed, you can go all-in on OData!

    (On that note, I’ll be presenting a session on OData in just 10 days at the EngageU conference in Malmö. Hurry and register!)[/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][vc_column_text]

    AI: Cohere and Semantic Image Search

    The biggest breakthrough introduced by FileMaker 21 is undoubtedly the integration of artificial intelligence.

    Version 21.1 takes these capabilities even further by adding Cohere as an alternative to OpenAI.

    Additionally, semantic search can now be applied to images! This unlocks some truly exciting possibilities![/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][vc_column_text]

    Open Quickly improvements

    I’m a huge fan of this feature, accessible via the keyboard shortcut cmd-K (macOS) / ctrl-K (Windows). It allows developers to navigate their applications much more easily than before and to design highly efficient user interfaces.

    However, it’s true that version 21.0 had some “security” issues: it exposed too much to the end user.

    Now, what’s displayed is logical and consistent with the visibility checkboxes for layouts and scripts, except when in Full Access mode, where everything remains accessible. Additionally, a new privilege allows you to completely disable access to Open Quickly.

    Additionally, you can now limit search results to the active file.

    Best of all, you can now activate a field, table, or table occurrence directly from Open Quickly! In this case, the Manage Database window opens with the selected item already highlighted.

    Surprisingly, value lists and custom functions aren’t (yet) included.[/vc_column_text][ish_image image=”101654″ size=”full” align=”center”][vc_column_text]

    Two small regrets (but let’s be patient…): the sorting order of results is still not ideal. I think items from the active file should appear before others.

    And it seems that a script step to open Open Quickly would allow for truly extraordinary interfaces. A single button in the UI to do it all. But we need to keep dreaming about something, right?

    [/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][vc_column_text]

    Layout Calculations: Fields Are Referenced

    Now, if you reference a field by its full name in a layout calculation (table::field), the calculation will automatically update if the field name changes.

    [/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][vc_column_text]

    Script step: Set Revert Transaction on Error (On/Off)

    It allows you to modify the behavior of transactions and prevent them from ending as soon as they encounter an error.[/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][vc_column_text]

    Constrain found set. Find without indexes option.

    When working with a table containing hundreds of thousands or millions of records, and you’ve already performed an initial selection (search), this script step now allows you to further narrow down the found set without relying on the entire table index, making it more efficient.

    Admittedly, the cases where this is useful are rare, and you could already write a loop to test each record individually, but it’s still a welcome addition.[/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][vc_column_text]

    Security: Limit References to Files Hosted on the Same Server

    A new checkbox has appeared on the fourth tab of the security dialog, allowing you to restrict references to the active file to only those files hosted on the same server.[/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][vc_column_text]

    FileMaker Server

    OData

    We’ve already discussed the removal of the traffic limit for OData and Data API, but OData is also gaining new capabilities, including the option to use aliases in queries.

    According to Claris, compliance with OData 4.01 is complete—almost! 😉 This could pave the way for a Perform OData script step in a future release, similar to what we saw with Data API.

    WebDirect: Keyboard Triggers

    The OnObjectKeystroke and OnLayoutKeystroke triggers are now supported in WebDirect but only for the Enter, Return, and Escape keys. Personally, I would have liked to see arrow keys (right, left, up, down) included as well, but they’re not.

    Admin Console

    Many improvements have been made to the console, including database subfolder management and displaying the installed Java version.

    A very useful new option now allows you, during a restart, to reopen only the databases that were open before the restart instead of reopening all databases.

    HTTPS Tunneling

    The macOS and Windows versions have been updated to include this feature, allowing connections with FileMaker Pro via HTTPS instead of port 5003. I’d like to remind you that our hosting service, fmcloud.fm, is the only one that offers a dual standard: you can have some clients connecting via HTTPS and others via port 5003.[/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][vc_column_text]

    Claris Studio et Claris Connect

    With the release of FileMaker 21.1, it’s worth noting the recent update to the Claris Studio connector in Claris Connect. This update introduces a new trigger, Create Multiple Records, along with new actions, expanding the automation and integration capabilities within the Claris platform.[/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][vc_column_text]

    If You Enjoyed This…

    If you enjoyed this article, please visit the Claris website by clicking this button. Claris loves it when you click this button, and it’s great for your karma (and mine). Thank you!

    [/vc_column_text][ish_button el_text=”Site de Claris” url=”url:https%3A%2F%2Fcontent.claris.com%2Fcpl-q1fy25-1more|target:_blank” size=”medium” align=”center” color=”color7″ text_color=”color4″][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][vc_column_text]

    And for Testing…

    Of course, if you set up a test server on fmcloud.fm, it’s immediately deployed in version 21.1, and you’ll receive a download link for the latest version.[/vc_column_text][ish_button el_text=”Essayer” url=”url:https%3A%2F%2Fwww.fmcloud.fm%2Fchatbot%3Futm_source%3D1mt_blog|target:_blank” size=”medium” align=”center” color=”color7″ text_color=”color4″][/vc_column][/vc_row]

  • Everything about FileMaker 2024

    Everything about FileMaker 2024

    [vc_row bg_color=””][vc_column][vc_column_text]FileMaker 2024 has just been announced by Claris!

    [/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][ish_button el_text=”See on Claris.com” url=”url:https%3A%2F%2Fcontent.claris.com%2Fclaris-filemaker2024-announce-1morething-lp|target:_blank” size=”medium” align=”center” color=”color7″ text_color=”color4″ border=”no”][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][vc_column_text]As usual, when Claris announces a new version of FileMaker you’ll find everything you need to know on our blog, for geeks and non-geeks alike.

    Ready, set, go![/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][ish_headline tag_size=”h2″]Artificial Intelligence (AI) and Large Language Models (LLM)[/ish_headline][vc_column_text]This is of course THE most visible feature of this 2024 version, but also the most complex to explain and master. We’ll be dedicating a separate article to it. You should know, however, that it is now possible to interact with virtually all large language models such as Chat GPT (Open AI), Gemini (Google) or Llama (Meta/Facebook).

    You can use these models for semantic searches on your own data (so you can search for data by formulating queries in human language!), or ask the chart tool to graph your data.

    But it doesn’t stop there. With a little practice, you can develop your own FileMaker code generator to generate complicated calculations or functions.

    It may take a lot of time to save a little, but it’s beautiful :)[/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][ish_headline tag_size=”h2″]Open Quickly, a new way of interacting with your applications[/ish_headline][vc_column_text]For several versions now, the shortcut Cmd-option-K (macOS)/Ctrl-alt-K (Windows) has been used to change models, but only in model mode.

    Open Quickly opens up much greater possibilities, but also presents a risk that developers should be aware of.

    I recommend that you pause reading this article afterwards, take a look at your applications to see if you’re not affected, and come back to read the rest later.

    What’s it all about?

    1. the functionality is now so powerful that it also needed to be more accessible. The shortcut is therefore Cmd-K (macOS) and Ctrl-K (Windows). Opening the left panel in template mode is therefore relayed to the second level (Cmd-option-K / Ctrl-alt-K). This is quite logical
    2. Open Quickly is now available in all other modes (use, search, preview), and can activate 3 types of elements:
      1. layouts (those in the current file, if defined to be visible in the layout list, or those for which you have editing rights). If you select a layout, you go to that layout (remaining in the same mode). If you hold down the option key (macOS)/alt (Windows), the icon changes and the layout opens in a new window.)
      2. Scripts. Scripts appear in the list if they are defined to be visible in the list, or if you are logged in with an account that allows script modification.This is where the “problem” lies. If you have the right to modify scripts, you can select a script to modify it or, by holding down option (macOS)/alt (Windows), execute the script. If you don’t have this right, the script is executed. This is a fantastic feature! You can really create very efficient interfaces, but it’s extremely important not to expose scripts that can’t be executed by a user without clicking on a specific button. So review your applications to uncheck the visibility box for scripts that should not be accessible.
    3. Files (recent files and favorites are accessible). Open Quickly is also a great launcher.

    [/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][ish_headline tag_size=”h2″]JSON functions gain in power[/ish_headline][vc_column_text]A new function and a new development make working with JSON much more efficient.

    JSONMakeArray ( listOfValues ; separator ; type )

    allows you to convert a list separated by carriage returns (¶) into a JSON Array. The list being, for historical reasons, the most widespread structural element in FileMaker, this is a possibility that was really lacking and often prevented you from improving/modernizing your code without embarking on lengthy and costly refactoring.

    New operators [+] et [:]

    The new operators make it much easier to write JSON arrays.

    [+] allows you to move to the next index

    [:] allows you to stay on the same index.

    So the simple expression:

    JSONSetElement ( “”

       ; [ "contact[+].nameLast" ; "Doe" ; JSONstring ]
       ; [ "contact[:].nameFirst" ; "John" ; JSONstring ]
       ; [ "contact[+].nameLast" ; "Smith" ; JSONstring ]
       ; [ "contact[:].nameFirst" ; "Emma" ; JSONstring ]
    )

    returns:

    {
       "contact" :
       [
          {
             "nameFirst" : "John",
             "nameLast" : "Doe"
          },
          {
             "nameFirst" : "Emma",
             "nameLast" : "Smith"
          }
       ]
    }

    The [:] operator can also be used to retrieve the last element of an array using the JSONGetElement function.

    GetLiveTextAsJSON

    is a new function reserved for Apple operating systems (whether FileMaker Pro, FileMaker Go or FileMaker Server) which, like GetLiveText, allows you to retrieve the text contained in an image, but this time in JSON.[/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][ish_headline tag_size=”h2″]Execute FileMaker Data API can now do Write operations[/ish_headline][vc_column_text]The Execute FileMaker Data API script step is now capable of writing to the database, and therefore precisely of creating a new record, modifying or duplicating records, and of course deleting them.

    It is now possible to perform (almost) any operation on the database from within a FileMaker script, without changing context.

    Advantage or disadvantage? since the Data API works in another session, modifications made in this way do not trigger any script (triggers), nor are they taken into account in the OnTransactionWindow event… on the other hand, this means you can write to the database independently of the current transaction.[/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][ish_headline tag_size=”h2″]Revert transaction in subscripts[/ish_headline][vc_column_text]About transactions… one of the weaknesses of implementing script transactions was that the entire transaction had to take place in the same script.

    Although this doesn’t fundamentally change, the Revert transaction script step can now be in a sub-script, which alleviates the problem.[/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][ish_headline tag_size=”h2″]Server side scripts (PSoS), callback and notifications[/ish_headline][vc_column_text]These are improvements, but not the least of them:

    When running a script on a server, you can now call the callbak script by name. What’s more, notifications (Configure Local Notification) now work on Pro (macOS and Windows). We wondered why this wasn’t the case, but here it is. It’s now easy to run a script on a server and get a notification on your Mac/PC screen when it’s finished.

    What’s more, it’s now possible to determine whether the callback script should resume a paused script.

    Unfortunately, although we have access to the configuration of buttons and almost every aspect of a system notification, we can’t control the icon or image. he technique outlined here by Laurent Spielmann, of 1-more-thing (2016), is therefore still useful.[/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][ish_headline tag_size=”h2″]Other improvements for FileMaker Pro[/ish_headline][vc_column_text]In addition to these new features, dozens of bugs have been resolved.

    More subtle improvements include

    • support for variable repetition numbers in file paths. So, for example, you can export data to a file whose path is contained in $var[3].
    • this is big: the engine used for conversion to/from XML/XSLT has been replaced, moving from Xeres/Xalan to libxml2/libxslt. This enables EXSLT functions to be supported. There’s no doubt that we’ll soon be seeing the emergence of some fine applications within the FileMaker framework.
    • The Web Viewer is evolving. On Windows, the installer updates WebView2 Runtime, which will prevent some applications from not running until a manual installation.
    • More importantly, Web Viewers (macOS and Windows) now support WebRTC. This means we’ll be able to integrate applications such as videoconferencing and others into our FileMaker applications.
    • Last note (there are a few other little things, but we’ve got to stop somewhere), the EPS format is no longer supported as an image on macOS. Claris thus follows Apple in discontinuing EPS support in its operating system.

    [/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][ish_headline tag_size=”h2″]How about FileMaker Server 2024?[/ish_headline][vc_column_text]FileMaker Server 2024 is not to be outdone. There are some very nice new features here too.

    First of all, there’s no change in compatibility between Pro/Go and Server. Versions 19.4.2 of FileMaker Pro and Go will still be able to connect.

    Performance enhancements

    By caching CSS (for Web Direct) and, above all, the link graph, new server sessions should open faster. This should result in faster PSoS sessions, with less overhead.

    https tunneling is now also available on macOS and Windows versions of the server. Until now, it was only available for Linux. FileMaker can now be installed anywhere. You don’t even need to open port 5003.

    Let’s Encrypt SSL certificates can now be easily installed using a supplied system script (Linux and macOS only). For your information, these certificates have been installed free of charge for some years now, if you choose to host your server on fmcloud.fm.

    Progress has been made on the “Custom OAuth” side. You can now configure the icon, and everything can be done via the Admin API.

    The Admin API adds new functionalities such as uploading and downloading database files (beware, containers don’t follow! this is logical but presents a real problem). You can also modify the contact information that accompanies email notifications.

    Administrator roles have been enhanced. Each administrator can act on his own databases, while the main administrator can act on all of them. Multiple administrators can share the same folders.

    The “Script Events” log can now be activated on the server side, thus separating the server event log from the script log.

    Also in the log section, the “Set Error Logging” script step now works for Web Direct and Data API.
    Also, TopCallStats and Statistics logs (stats.log) are now enabled by default. Please note that we anticipate that on some extremely busy configurations with large numbers of users, enabling TopCallStats may cause problems. If you notice a drastic drop in performance after upgrading to FileMaker Server 2024, consider disabling this log.

    In the admin console, the log viewer has improved too.

    The ergonomics of the “Programs” panel have been improved. For example, you can double-click to modify programs or display the columns of your choice in the list, filter the list, duplicate several programs at once…

    Finally! you can now block new connections via the admin API and the admin console. This means you can finally close files without new users connecting or reconnecting during the closing process.[/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][ish_headline tag_size=”h2″]Middle-East and Central Europe versions available on Linux[/ish_headline][vc_column_text]It’s a first! Not only are the localized versions published by Winsoft International

    for the Middle East (allowing you to design interfaces for right-to-left languages such as Arabic, Hebrew and Persian) and for Central Europe are available at the same time as the classic version, but the server is now also available for Linux.

    This means you can generate PDFs on the server, or offer your users Web Direct interfaces designed specifically for these languages.

    Of course, these versions are immediately available on fmcloud.fm, 1-more-thing’s hosting service. You’ll need the appropriate license, which we can also provide.[/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][ish_headline tag_size=”h2″]Compatibility[/ish_headline][vc_column_text]FileMaker Pro 2024 (or 21.0) requires

    • macOS Ventura 13 or higher
    • Windows 10 ou 11

    and can connect to FileMaker Server 19.4.2 and higher. (Please note that we find it hard to understand why connection to 19.4.2 is still tolerated, as it doesn’t contribute to the indispensable updating of the servers. If you absolutely must remain in FileMaker Server 19, we strongly recommend that you upgrade to FileMaker Server 19.6.4 without delay. Similarly, if you need to keep a version 20 (why? since 21 offers the same compatibility with client versions), please update your server to 20.3.2.
    At fmcloud.fm, 100% of our servers are up to date.

    FileMaker Server 2024

    • Ubuntu 20.04 LTS Server (AMD64)
    • Ubuntu 22.04 LTS Server (AMD64 or ARM64)
    • macOS Ventura 13 or higher
    • Windows Server 2019 or 2022

    Pro/Go Clients with 19.4.2 or greater can connect.[/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][ish_headline tag_size=”h2″]Where to start? Where to find FileMaker?[/ish_headline][vc_column_text]If you’re just starting out with the platform, we recommend going through the free trial our fmcloud.fm hosting service to get started.

    In less than 10 minutes, you’ll have a trial copy of FileMaker Pro and a server installed in the cloud.

    A short video explanation here.[/vc_column_text][/vc_column][/vc_row]

  • Video: Get Started With FileMaker in 10 minutes… for FREE

    Video: Get Started With FileMaker in 10 minutes… for FREE

    [vc_row bg_color=””][vc_column][vc_column_text]When it comes to database management and application development, the FileMaker platform has been a trusted choice for years. However, with so much information available, it can sometimes seem like a daunting task to get started. That’s where Fabrice Nordmann comes in to simplify the process for you.

    Who is Fabrice Nordmann?

    Fabrice Nordmann is a seasoned, certified FileMaker expert with a passion for making complex concepts easy to understand. With his help, you can confidently navigate the FileMaker platform and start creating your own applications.

    What’s in Store?

    This 10-minute long video guide is your key to unlocking the power of the FileMaker platform. Here’s what you can expect:

    1. Easy Access: The first step is often the most challenging, but Fabrice will guide you through it. He’ll show you how to download the FileMaker software hassle-free.

    2. Installation: Worried about the technicalities of installation? Fear not! Fabrice will walk you through the installation process, making it a breeze.

    3. Creating Your First App: The heart of the FileMaker platform lies in creating your own applications. Fabrice will demonstrate how to set up your very first app, secure it, and upload it to the cloud so it’s available from anywhere in the world. And the best part? You can do it all for free!

    4. Learning the Basics: You will see how multiple clients can collaborate in real time, and how FileMaker Pro is used to create contents that can be used directly from the browser using Web Direct.

    5. Troubleshooting: Stuck on a particular problem? Fabrice will address common issues and provide troubleshooting tips to keep you moving forward.

    Why Choose FileMaker?

    FileMaker is a powerful and versatile platform that allows you to create custom applications tailored to your specific needs. Whether you’re looking to streamline business processes, manage data efficiently, or build an app for personal use, FileMaker can do it all.

    The best part? Fabrice Nordmann’s guide makes it accessible to everyone, regardless of your technical background. You don’t need to be a coding wizard to create impressive applications with FileMaker.

    Conclusion

    Don’t let the abundance of information about the FileMaker platform intimidate you. Fabrice Nordmann’s video guide offers a straightforward, step-by-step approach to get you started. By the end of the video, you’ll have the knowledge and confidence to create your own applications in the cloud, all without spending a dime. The trial is entirely free.

    So, if you’re ready to dive into the world of FileMaker, let Fabrice Nordmann be your trusted guide. Watch his video, and you’ll be on your way to mastering this versatile platform in no time. Get ready to unlock your creativity and productivity with FileMaker today![/vc_column_text][vc_video link=”https://vimeo.com/1morething/filemaker-get-started” align=”center”][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][ish_list]

    Summary

    • Deploy a server in the cloud
    • Download and install FileMaker Pro
    • Create your first app
    • Secure your app for the cloud
    • Upload your app in the cloud. It’s now available from anywhere in the world.
    • Enable Web Direct to share your app with your team
    • Modify your app with FileMaker Pro
    • Edit records with FileMaker Pro and Web Direct

    Remember

    • Server admin credentials are used only to:
      • access the admin console
      • upload files from FileMaker Pro
      • access your backups using FTP
    • For all other requests for credential, the database account is used, not the server account.
    • The cloud hosting service used in this video is fmcloud.fm

    [/ish_list][ish_button el_text=”Start your journey here” url=”url:https%3A%2F%2Fwww.fmcloud.fm|title:Start%20You%20Journey” size=”big” align=”center” color=”color7″ text_color=”color4″][/vc_column][/vc_row]

  • FileMaker 2023 20.2 – Layout Calculations – Video

    Claris has just announced a new release of FileMaker, 20.2.

    Among other new features and improvements, let’s take a closer look at layout calculations.

    Video by Fabrice Nordmann

    Updates:

    • I forgot to mention symbols in the video. Introduced very early (FileMaker Pro 2 or earlier), symbols like ## (page number), @@ (record number), “//” (current date)… were updated in FileMaker 15 (unsure). The notation {{RecordNumber}} allowed access to all Get function parameters. {{HostApplicationVersion}} for instance.
    • the new layout calculations being a subclass of the merge feature of text objects, it is possible to use them in labels of the old button/popover button objects. But there are important limitations to that, so you definitely won’t do it. These are:
      • the UI doesn’t allow access to the calculation dialog, so you have to type the formula precisely and without mistake
      • as opposed to simple text objects (new behaviour described in the video), buttons cannot be resized to a smaller size than their contents (in that case, the calculation formula), at least using the mouse (you can achieve this using the inspector)

    New to FileMaker? Watch our Quick Start video and get started in 10 minutes.

  • FileMaker 2023 – “Audit log”

    FileMaker 2023 – “Audit log”

    [vc_row bg_color=””][vc_column width=”1/1″][vc_column_text]As we saw in this detailed review of what’s new in FileMaker 2023, one of the two flagship features, along with Perform Script on Server With Callback, is what Claris calls “Audit Log.”

    There is so much to know about this feature that we preferred to dedicate a full post to it.[/vc_column_text][ish_headline tag_size=”h2″]Not an audit log[/ish_headline][vc_column_text]First of all, let’s agree that even if Claris’ marketing didn’t resist the temptation to call it that, this feature is not a real audit log, and this for several reasons.

    • First of all for a simple reason: this feature does not log anything. It does allow a developer to build an audit log on top of it.
    • Then an audit log, to be worthy of its name, must meet certain requirements of inviolability (it must not be possible to make a modification without it being logged, it must not be possible to modify an entry in the log…). Even if we will see that this is the best FileMaker could offer, the new functionality does not meet these criteria.

    Does this mean that you should pass by without looking? Not at all! The new feature is very exciting, but as Camus said, “to name things wrongly is to expose oneself to criticism” (or something like that). And exposing yourself to criticism from an external auditor who was sold an “audit log” that wasn’t an audit log… that’s a situation I’d rather avoid.

    So no, the audit log is not an audit log. So be it. What should we call it then?[/vc_column_text][ish_headline tag_size=”h2″]Window transactions[/ish_headline][vc_column_text]This is the “technical” name of the feature. This is the name under which it is found in FileMaker Pro, and it seems to me to be much closer to reality.

    Window transactions show up as a script trigger in the file options, and will apply to all transactions.

    Once enabled, every transaction (or almost every transaction) will trigger the script.

    What is a transaction ? A transaction is not particularly what Claris called a transaction in version 19.6.
    A transaction is simply the act of creating, modifying, deleting a set of records (including a single record) and committing. It already existed before 19.6, even if 19.6 allowed to write transactions more easily, or to make some actions “transactional” when it was not possible before.
    Note that the modification of a global field, which is not strictly speaking a data modification, does not cause a window transaction, (except of course if the modification of a global field leads to a modification of another field, which is standard, by means of an calculated result auto-entry).

    In short, you have understood what a data transaction is. During a transaction you can :

    • create new records
    • modify records
    • delete records

    Window transactions are the closest thing FileMaker has to a data transaction, or more precisely to an event that takes place on a data transaction.

    But these are window transactions. So you still need a window, even a virtual one.

    In other words, direct interactions with the data layer are excluded from these transactions:

    • Data API (unless it executes a script)
    • OData (unless it runs a script)
    • PHP/XML (unless running a script)
    • ODBC
    • Truncate table script step
    • A file is defined as an external data source of an interface file in which window transactions are enabled (active trigger), but data is modified from another file.

    That’s why even if a log system was provided, this feature would not allow a real “audit log”.[/vc_column_text][ish_headline tag_size=”h2″]How window transactions work[/ish_headline][vc_column_text]As we have already mentioned, the configuration interface can be found in the file options (File Menu)

    Audit Log file options trigger

    On peut sélectionner le script qui sera activé quand on valide une transaction, et indiquer facultativement le nom hard-codé d’une rubrique. Comme pour les autres déclencheurs au niveau du fichier, seul un script du fichier en cours peut être sélectionné. Dans ce cas ci, c’est un peu dommage, mais on comprend bien la raison.

    Quand une transaction est validée, le script sera déclenché et recevra automatiquement un paramètre en JSON tel que :[/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][vc_column_text]

    {
       "fileName":
       {
           "tableName":
           [
                 [ //(for each record):
                      modification type ("New", "Modified" ; "Deleted"),
                      record ID,
                      "optional parameter"
                 ];
                 [ 
                      modification type ("New", "Modified" ; "Deleted"),
                      record ID,
                      "optional parameter"
                 ]
            ]
       }
    }

    [/vc_column_text][vc_column_text]As you spotted at first glance because you are now JSON experts, the modified records are elements of an array, with 3 pieces of information so you need to know the order: the type of modification (New, Modified, Deleted), the record ID, and the optional parameter, which will be present but empty if you didn’t set it.

    The other thing you immediately noticed is that there is no trace of modified data or field names.[/vc_column_text][ish_headline tag_size=”h3″]Optional parameter[/ish_headline][vc_column_text]The content of the optional parameter comes from the field that you can choose in the file options.

    If you did not specify a field name and there is a field named OnWindowTransaction, this field will be taken into account instead.

    So at the time of the transaction commit, for each record created, modified, or deleted (in this last case the field is evaluated before deletion), the field -which can of course be calculated- is evaluated and its content passed as an optional parameter for this record.

    JSON

    Note that if the content of the field is a JSON, it is not rendered as a string (“stringified”). To be very precise, in order not to waste too much time validating each JSON, which would greatly slow down transactions with many records, FileMaker considers that if the content of the field starts and ends with { and } or [ and ], it is a valid JSON.[/vc_column_text][ish_headline tag_size=”h3″]Mass transactions[/ish_headline][vc_column_text]There are nine ways to edit multiple records in one operation with FileMaker.

    Some of them are perfectly handled by the window transactions, others are not.

    Let’s eliminate the ones that are not handled first, but keep them in mind if we really want to talk about audit logging:

    • External requests directly on the data layer (Data API, OData, PHP/XML, ODBC). In the case of script execution (and therefore the existence of a window), window transactions will take place.
    • Truncate table script step.
    • Modification of the data schema (you can delete a table, create a calculated field or modify a calculation formula, validate the modification, then change the type of field to make it a standard field, and the data has been modified without a window transaction.
    • Let’s add a variant of this: file creation by conversion. If, for example, you drag an Excel file onto the FileMaker icon, you will obtain a file with a table and data, even before you have been able to configure any triggers or scripts.

    Handled methods are :

    Non-transactional methods :

    Transactional methods:

    • Transactions through relationships, as they have existed since FileMaker became relational (FileMaker 3, released in 1996): you can modify the main record (the one displayed) as well as create, modify and delete related records (deletion requires a portal object).
    • FileMaker 19.6 transactions, which are the same thing except that :
      • they can be done while changing context (no need for a relationship anymore)
      • they can include other types of mass transactions (import, delete all records, replace field contents)

    Importance of using “19.6” script transactions for bulk transactions

    For transactional methods, it is quite obvious: a transaction will cause one and only one window transaction (all created, modified and deleted records will be in the script parameter)

    As for the other three methods (import, delete all, replace), it is very advantageous to also include them in a transaction.

    Indeed, as opposed to our FM AuditLog Pro (which will obviously be updated very soon to take advantage of this new feature) which managed to combine the different real transactions into one logical transaction, the window transactions exactly reflect the internal workings of FileMaker.

    For example, when you delete all the records, FileMaker deletes them 100 by 100. When you import, it depends on the format of the file (in increments of 25 for the csv format, but in alternating increments of 25 and 1000 for the .mer format (a csv with the column headers), in increments of 500 for Replace field content…
    In short, that’s all I had discovered while developing FM AuditLog Pro, but this “internal popote” is surely not interesting for the user and we would have preferred that an import or a deletion be summarized in one transaction. But this is not the case, the OnWindowTransaction script will be triggered as many times as there are internal transactions. It is therefore very important to encapsulate these operations in a script transaction.

    Tip : if the user himself can perform an import, a deletion of the found set, or a field contents replacement, we recommend to use the custom menus to replace these commands, with associated scripts such as:

    Open transaction
       Import records
    Commit transaction

    There remains the marginal case where the user is already in the case of a transaction with a paused script. If we want to avoid error 3 for nested transactions (an error that is not a problem but it is less pretty and we like it to be pretty), then we can write :

    If [ Get ( TransactionOpenState )]
       Import records
    Else
       Open transaction
          Import records
       Commit transaction
    End if
    
    

    Data API, OData, XML

    As far as these modes of interaction with FileMaker are concerned, there is the possibility of giving preference to scripts. In order to guarantee the validity of an audit log (in the strict sense), it can be ensured in the security settings that these modes of interaction can only modify records if a script is running.

    not isEmtpy ( Get ( ScriptName ))

    Unfortunately, this comes at the cost of reduced performance.

    We can really regret that the script step Execute FileMaker Data API has read-only access. It would be so much easier to convert the API calls into scripts…[/vc_column_text][ish_headline tag_size=”h2″]Drag and drop and Replace Field Contents[/ish_headline][vc_column_text]Since the beginning, two events have been distinguishable in the way of modifying data: drag and drop and Replace Field Contents.

    Indeed, these two events have the particularity of being able to operate on records not previously opened, to modify the records, and to keep them “closed”, without triggering an OnRecordCommit event.

    Well, that’s great news: window transactions can now capture these events. If the active record is not open when you start a replace action or drag content onto a field, then a window transaction will be triggered after the event.

    In terms of data integrity, this is a big improvement![/vc_column_text][ish_headline tag_size=”h2″]Caveats[/ish_headline][vc_column_text]One of the difficulties encountered when setting up a script to log transactions is to disable the script after recording the transaction.

    Remember, all transactions taking place in a file window trigger the script.

    Workaround: write at the beginning of the script an exit condition like

    If [ Get ( LayoutName ) = <theLayoutOnWhichILogTransactions>
       Exit Script
    End If
    The rest of the script

    An annoying bug

    The version released today has a very annoying bug. We hope that it will be fixed in a future update.

    When running the onWindowTransaction script, the Close Window is simply ignored. It does not return an error but has no effect. – update: this is fixed in 20.1.2, released on Jun-7.[/vc_column_text][ish_headline tag_size=”h2″]An audit log… why?[/ish_headline][vc_column_text]If you’ve read this far, you’ll be rewarded, because beyond the technical aspects, the big question is: “what to do with this new feature?”

    As you will see, the potential is enormous .

    Examples of use:

    • Of course, keep track of the changes. This makes sense, but it should not be forgotten
    • Updating related records, or even “views”. It’s an eternal challenge with FileMaker -without table triggers (OnUpdate)- to update related records. For example, if I update the amount of a payment, I want the corresponding invoice to be updated, as well as the customer record (to know the balance). From now on, I can definitely detect that a record in the PAYMENTS table has been created/modified/deleted and update the corresponding records.
    • It is easy to imagine view tables that replace list views and that synthesize the information that the user needs to see, without calculation and without links, in order to optimize the scrolling or sorting speed.)
      For example, a record in the CUSTOMERS table, which is linked to n invoices, n orders, n payments… can have its counterpart in the CUSTOMERS_VIEW table, with standard (non-calculated) fields that allow for very fast lists. It is indeed relatively easy to develop a logic that causes such a record to be refreshed as soon as a payment, an order or an invoice is modified in a transaction.
    • With a tool like FM AuditLog Pro 3.0 in preparation, it will not only be possible to roll-back transactions as with FM AuditLog Pro 2.0, but it will also be possible to re-execute transactions on another server, for example in a scenario where users work on several continents, each on their own server, but where changes need to be rolled-back to a central server.

    So, I hope that these few hints have helped you see the potential of this new feature and that you enjoyed this article enough to share it on the social networks.[/vc_column_text][/vc_column][/vc_row]

  • FileMaker 2023

    FileMaker 2023

    [vc_row bg_color=””][vc_column][vc_column_text]

    FileMaker 2023 is available! an in-depth exploration.

    Claris just announced the immediate availability of the new version of FileMaker, FileMaker 2023.

    It has been a long time since we published a long article about a new version of FileMaker. The main reason to that was probably that numbering system in version 19 did not give rise to much excitement. Even if some minor versions included important new features, it was difficult to draw attention to them.

    With FileMaker 2023, however, Claris sounds the clarion call. Not only the commercial name of the product changes: FileMaker 2023 and not FileMaker 20 (which is the version number), but we get a brand new icon.

    FileMaker 2023 icon

    We can always discuss the aesthetics or joke that it’s the Pac-man from the Claris logo that swallowed a FileMaker file, it’s still a nice change.
    And while we’re on the subject of logos, let’s note that Claris Connect is also getting its own.

    Icone Claris Connect

    Here comes Pac-man again, but with a bow tie.

    Makes you want to play Trivial Pursuit, doesn’t it? Well, it’s a good thing because this article will hopefully answer a lot of questions.[/vc_column_text][/vc_column][/vc_row][vc_row tag_size=”h2″ align=”” icon=”” icon_align=”left” tag=”h” bottom_margin=”” bg_color=””][vc_column width=”1/1″][ish_headline tag_size=”h2″]A version for nerds[/ish_headline][vc_column_text]I might as well say that the most spectacular aspects of this version have already been covered above (the name and the icon), because FileMaker 2023 will not make end users jump through hoops with flashy features.
    On the other hand, it will delight them because their developers or advanced users will be able to respond much more efficiently to certain problems that they had to work around with difficulty until now.

    Actually, I myself have been looking for a long time for the consistency of this version. At first sight, a patchwork of disparate evolutions, but on closer inspection, there is really a goal of consistency, stability and scalability.

    If I had to draw two “messages” to summarize the new features of this version, it would be:

    1. The FileMaker platform is alive. Some people feared that Claris Studio would take up too many resources at Claris at the expense of FileMaker and the corresponding components of the Claris platform. This version is a clear answer to these concerns, we will see why.
    2. Claris has not given up on making FileMaker a platform of its time, capable of serving larger numbers of users processing more data, and more integrated. To do this, it relies on the community of developers by providing them with tools, admittedly a little “geeky”, but devilishly interesting.

    [/vc_column_text][/vc_column][/vc_row][vc_row tag_size=”h2″ align=”” icon=”” icon_align=”left” tag=”h” bottom_margin=”” bg_color=””][vc_column width=”1/1″][ish_headline tag_size=”h2″]Note on compatibility[/ish_headline][vc_column_text]FileMaker Pro 2023 is compatible with

    • masOS Monterey or greater (Ventura, for which several issues have been fixed)
    • Windows 10 or greater

    FileMaker Server 2023 is compatible with

    • masOS Monterey or greater
    • Windows Server 2019 or greater
    • Ubuntu 20 or greater (AMD and ARM)

    On the other hand, after 4 years of maintaining the compatibility of the server with FileMaker Pro 18, it will not be able to connect to FileMaker Server 2023. So be careful. The minimum required version is FileMaker 19.4.2.

    Of course, FileMaker Pro 2023 can be connected to FileMaker Server 19.4.[/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][ish_headline tag_size=”h2″]New for the end-users (there are some!)[/ish_headline][vc_column_text]As you know, users are impatient. So let’s start with the new features that concern them directly.

    • It is now possible to read a QR code from a document stored in a container field, both on the server and on the client (FileMaker Pro/FileMaker Go). New automated document flows are therefore possible. For example, it is possible to link a document to a record automatically.
    • The LiveText feature (macOS / iOS) is now server compatible (mac OS)
    • Import of the license certificate! Finally! Double-clicking on a Claris license certificate will now start the license registration process. This will simplify the life of users and administrators.
    • Sending email with OAuth2 authentication. Yes, I agree, considering the title it could be put in the “for geeks” section, but in fact it concerns very directly the users who were confronted with the evolution of Gmail and Office 365 messaging. You can use them again directly from FileMaker.
    • Support of sFTP for the Insert from URL script step..
    • Another technical update but one that will please some users and administrators: the maximum number of files hosted on FileMaker Server is increased from 125 to 256. I bet this will be a question on the next certification exam, you will have read it here first 🙂

    Two more points on Claris Connect to please the users, and then we attack the heavy stuff.

    • This is one of the most important points: Claris Connect, the Claris automation and orchestration service (vidéo) has now a free tier.
    • FileMaker Pro has a new script step, Trigger Claris Connect Flow, that makes it extremely easy to integrate the two tools. To be honest, I can’t think of a reason why this wasn’t the case before. The fact remains that it is now possible to trigger a Claris Connect flow and get the result in a variable without any particular knowledge of cURL. This is a great way to make Claris Connect much more attractive, even for advanced developers.

    This time, it is the end of the “user” functions, the rest – the most important by far – will be…[/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][ish_headline tag_size=”h2″]…reserved for geeks, developers, and demanding administrators…[/ish_headline][vc_column_text]All right. Are we among ourselves now? Can I use a lot of acronyms and jargon?

    Don’t worry, I’ve got to squeeze in a few, but there are some great new features. Hang on, I’m saving the best for the last.[/vc_column_text][ish_headline tag_size=”h3″]FileMaker 2023, a major software update[/ish_headline][vc_column_text]This is very reassuring for the platform. A large part of the libraries and frameworks that underlie the platform have been updated, especially on the server. Java, Vaadin, Tomcat… This is an excellent sign that Claris is really working on the platform and is not just making surface advances to please marketing.

    A little surprise though: Java is updated to 17 when the most recent version is 19, but I don’t know the reasons or the implications.

    A little regret too: the WebKit embedded in the web viewer is still the same, and it’s a pity because many javascript libraries take advantage of recent evolutions. For example, our incredibly successful add-on 1MT PDF Viewer cannot integrate certain features.[/vc_column_text][ish_headline tag_size=”h3″]An ARM version and a load balancer for an ambitious strategy[/ish_headline][vc_column_text]As we have already mentioned, Claris’ strategy is to reduce the number of versions of FileMaker Server, and therefore to support only Linux.

    This is an excellent choice that we have been calling for for a long time, because it will allow Claris to go much faster in development.

    The fact remains that… not all customers run Linux. That’s why we’re probably going towards a Linux server that can be virtualized on macOS or Windows, so the user won’t see any difference.

    But many PCs, starting with recent Macs, are now running on an ARM architecture and not on x86.

    With FileMaker 2023, Claris is releasing a version of FileMaker Server for the ARM processor. According to our tests, this is not yet a miracle in terms of performance, but it is very important for the developer community to know that this version already exists and that it will be improved and optimized.

    By the way, Ubuntu 22 is now supported. This means that Claris now supports Ubuntu 20/AMD, Ubuntu 22/AMD, Ubuntu 22/ARM, and of course the macOS and Windows versions of FileMaker Server. That’s already quite a lot, but in addition the Linux versions are also declined in Claris Server (the equivalent of FileMaker Server for the new Claris platform)[/vc_column_text][ish_headline tag_size=”h3″]Load balancing, cache management and garbage collector[/ish_headline][vc_column_text]The Linux versions of FileMaker Server, which use the NginX web server, now make it very easy to install secondary servers to manage a real load balancing for Web Direct users.

    Between us, the performance we already achieve on fmcloud.fm, due to its modern Docker architecture, means that we have never, even in extreme cases, faced limitations of the web server’s capacities, but we are curious to see the impact on the most demanding applications.

    Cache management

    Version 19.6 had already made it possible to delete the client (FileMaker Pro) cache from the application preferences. Version 20 (FileMaker 2023) adds Get ( CacheFileName ) and Get ( CacheFilePath ) functions, which allow to delete the cache file by script, in order to perform performance tests without restarting the application. Yes it’s wicked geeky, but it’s really good news for the optimizations we’re fond of.

    On the server side, a new feature allows you to allocate more or less cache memory to list views on Web Direct. Specifically, it is possible to configure the number of records that Web Direct should pre-load in order to make scrolling smoother. This feature did not make its way into the admin console, don’t waste time looking for it.

    Java garbage collector

    Two features: a button to trigger the garbage collector, and the possibility to schedule this process, like running a script or, as since version 19, like cleaning the cache.

    I won’t go into the details of what garbage collection is, but it is a process that frees up memory addresses that have not been freed up by the process that allocated them. In other words, it cleans up where the developers of the server or one of its many components forgot to do so. We’re curious to see what this can improve in scenarios where the server was using more and more memory as Web Direct connections were made.[/vc_column_text][ish_headline tag_size=”h3″]More FileMaker Server 2023 features[/ish_headline][vc_column_text]I can feel it, you would like us to get to the big news, but even though they are more quiet, the ones that are coming are big news, ordered in increasing importance, according to a universal and objective point of view: mine.

    • I’ll pass on the management of canceled backups. This completes the possibility to cancel backups that appeared with FileMaker Server 19.5
    • Access to the administration console of the Linux version of the server can now be controlled by Active Directory.
    • The name of the schedules can be up to 100 characters, which is much more comfortable than the previous 31.
    • New connections are blocked when a file is in the process of being closed. Until now, closing a file caused users to log out, but if a new connection occurred during the process it could not be prevented. This is a great improvement for administrators of applications with a large number of users.
    • Data API now supports Save as PDF.
    • Log server-side scripts. Two new features :
      • the “Set Error Logging” script step is now server compatible.
      • script events are now recorded in a different log file than server events. ScriptEvent.log. Excellent news, but it may potentially require you to review your procedures, if you had automated processing on log files.
    • OData becomes very, very powerful as it can now work on related data. OData is probably the least known of the FileMaker data publishing methods, yet it is extraordinarily simple and powerful.

    [/vc_column_text][ish_headline tag_size=”h2″]The big news[/ish_headline][vc_column_text]Finally! the two main new features of FileMaker 2023.

    [/vc_column_text][ish_headline tag_size=”h3″]Perform Script on Server With Callback[/ish_headline][vc_column_text]Since FileMaker 13 it is possible to easily execute a script on the server from the client (actually since before that if you follow our adventures).

    This opened up many possibilities, with much faster and more secure processing.

    Moreover, it allowed the execution of parallel processes, the client not being forced to wait for the end of the script execution on the server. The client could therefore go about its business, or even trigger other scripts on the server, while the server was working.

    The problem was that the client had no way of being notified that the server had finished its work. We had to develop complicated messaging systems, and the client had to regularly check that no messages had arrived.

    This is now history since a new script step Perform Script on Server With Callback (PSoSWC) allows you not only to execute a script on the server, but also to have another script triggered on the client workstation when it has finished.

    This means that you can, for example, notify the user that his report is ready or that a heavy operation has been completed.

    Tip : the script result (defined in Exit script) of the server script is taken as the script parameter of the callback script..

    Regret: unlike the other two main script steps allowing to execute a script (Perform Script and Perform Script on Server), it is not possible to call a script by its name! (neither the callback script, nor even the server script). What a pity![/vc_column_text][ish_image image=”80278″ size=”full” align=”center”][ish_headline tag_size=”h3″]Window Transaction (or “audit log”)[/ish_headline][vc_column_text]As you may or may not know, audit logs have almost become a personal obsession. The main reason for this “hobby” of keeping track of data changes is probably that it is not possible in FileMaker to have a 100% reliable audit trail. A kind of Holy Grail quest. Vain but beautiful.

    Nevertheless, by developing FM AuditLog Pro, I believe I have unlocked many of the mysteries of FileMaker, understood some of the finer points of the calculation engine, security, and of course the data model and dependency tree.

    Needless to say, reading in the new features the mention of “Audit log” was enough to arouse my attention. This feature is a little wonder, but it is “low level”, and it is designed so that you can make your own log system. It is not in itself an audit log.

    Here is the principle in a few words. We are publishing simultaneously an article entirely dedicated to this feature which needs explained further.

    • There is a new trigger at the file level (File Options)
    • If this trigger is activated, any record validation or record deletion will trigger this script.
    • The script will receive a JSON parameter indicating the files, tables, records (ID) concerned, as well as the type of modification (New, Modified, Deleted)
    • Within this JSON parameter, we can add a custom parameter for each record which will be the content of a field named OnWindowTransaction. It is possible to choose another name in the file options, but this name will have to be consistent in all the tables of the file. This field can of course be calculated, to contain the name of the fields and the modified values, or other information you may want to add.
      If the content of this field is JSON, this JSON will not be converted to string.
    • Of course, the script allows to record the transactions.

    [/vc_column_text][ish_headline tag_size=”h3″]Bonus : work with Base Tables[/ish_headline][vc_column_text]In connection with the audit log, Claris provides us with a few functions for working on tables, as opposed to table occurrences.

    Everywhere in FileMaker, with a few exceptions (the Tables tab of the database definition, security, Truncate table script step), the word “Tables” refers not to tables but to table occurrences.

    The real tables appeared only in a system table, queryable with the ExecuterSQL function, FileMaker_Tables, which represents the table occurrences, but has a BaseTableName column.

    In version 19, Claris added another table: FileMaker_BaseTableFields, which looks very much like a deduplicated view of FileMaker_Fields.

    This is finally changing, with a series of new functions and SQL tables.

    • BaseTableNames ( file ) allows to list all the tables (names) of a file
    • BaseTableIDs ( file ) allows to list the IDs of these tables.
    • GetBaseTableName ( field ) is used to obtain the name of the base table of a field.
    • A new system table, FileMaker_BaseTables, has the following columns: BaseTableName, BaseTableID, Source (<Internal>, MYSQL…), ModCount.

    Unfortunately this arsenal is very incomplete. The FileMaker_BaseTables system table, as well as FileMaker_BaseTableFields which appeared in 19, do not take into account the tables of external files referenced in the relationship graph of the current file. It is therefore complex (but possible) to retrieve the ID of a table from a linked file.
    The absence of a GetFileName ( field ) function and of a GetBaseTableName ( field ) function, or even of a BaseTableID column in the FileMaker_Fields system table, does not make these requests any easier.[/vc_column_text][ish_headline tag_size=”h2″]In conclusion…[/ish_headline][vc_column_text]As we have seen, this version is full of new features (and I haven’t covered everything!), which at first sight are very disparate and form a patchwork.

    In reality, there are very strong implications. I will try to summarize them in order to get a general idea.

    • Towards a single Linux server, on ARM as on x86. Don’t panic yet, I did write “towards”.
    • A server capable of managing more applications (256), more users (load balancing) and better equipped to manage memory, even to configure it finely.
    • Increasingly powerful OData and Data APIs.
    • Tools for debugging server-side scripts.
    • Easier integration with Claris Connect, and a free tier for the latter.
    • Perform Script on Server With Callback. A great incentive to delegate even more to the server.
    • An “audit log” which makes it possible to memorize transactions and thus to be able to re-execute them on another server…

    As we can see, and in accordance with the vision we announced several years ago, the central component of the platform is increasingly the server. It is becoming easier and more efficient to design solutions in which FileMaker Pro/Go is only a de luxe front end and delegates the heavy lifting to FileMaker Server, like Web Direct. The choice of a hosting service has therefore never been so crucial. (comparison sheet on fmcloud.fm).

    I hope that this long article will help you to discover FileMaker 2023 faster and further. Don’t hesitate to share on the social networks.[/vc_column_text][/vc_column][/vc_row]

  • The Claris Excellence Award for Innovation goes to fmcloud.fm!

    The Claris Excellence Award for Innovation goes to fmcloud.fm!

    [vc_row bg_color=””][vc_column][vc_column_text]It is a great honor and pleasure for us to announce that 1-more-thing has been awarded today by Claris with the most sought-after prize: the Claris Excellence Award for Innovation

    Indeed, the jury has recognized our revolutionary FileMaker hosting service, fmcloud.fm and the fact that it is light years ahead of traditional services.

    For two years, fmcloud.fm has revolutionized practices by allowing companies of all sizes to benefit from a true cloud to deploy the FileMaker low code platform, and to gain in performance, serenity and cost.[/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][ish_headline tag_size=”h2″]A real cloud running on Linux/Docker[/ish_headline][vc_column_text]We have invested heavily to enable FileMaker Server to run on a Linux/Docker architecture, with an “architecture as code” offering extraordinary flexibility.
    We are able to deploy or upgrade thousands of servers around the world in seconds, and our customers have access to monsters of power at a price often lower than the simple cost of ownership of a local server.

    But our efforts don’t stop there. It’s a pleasure to see how Claris optimizes each release, allowing our team to optimize in turn so as to deliver ever more powerful and cost-effective solutions.[/vc_column_text][ish_image image=”15088″ size=”full” align=”center”][vc_column_text]We would like to warmly thank Claris for this award, but also, of course, the dozens of consultants around the world who rely on our FileMaker hosting service their clients’ applications and their own development environment, and who contribute to the reputation of this first-class service.

    Also special thanks to Nick Lightbody and Christian Schmitz (MonkeyBread Software, MBS) for their great reviews here and here.

    Learn more about the hosting and licensing offering and deploy your completely free trial server in just a few moments from the fmcloud.fm website.[/vc_column_text][ish_image image=”33412″ size=”full” stretch_image=”yes” link_type=”custom” link_url=”url:https%3A%2F%2Fwww.fmcloud.fm||target:%20_blank|” align=”center”][ish_headline tag_size=”h2″]And the winners of the 2021 Claris Excellence Awards are…[/ish_headline][ish_table header_bg_color=”color7″ header_text_color=”color4″ border_color=”color7″]

    Category Recipient
    Lifetime Achievement Award Cristoffer Ippolite, iSolutions
    Rising Star Award Amy Davidson, We Know Data
    Humanitarian Award LuminFire
    Innovation Excellence Award 1-more-thing for fmcloud.fm
    Claris FileMaker Excellence Award ClickWorks
    Claris Connect Excellence Award Square Moon AB
    Design Excellence Award Solis Digital
    Advocacy Excellence Award Beezwax Datatools, Inc.
    Education Excellence Award Richard Carlton Consulting Inc.
    Growth Partner of the Year — Americas DB Services
    Growth Partner of the Year — Europe Lesterius
    Growth Partner of the Year — North Asia Supportas Inc.
    Growth Partner of the Year — Asia Pacific Kamar Limited
    Community Leader of the year Jeremy Brown
    Community Development Excellence Award The Luke Commission

    [/ish_table][/vc_column][/vc_row]

  • Best Startup EU Names 1-more-thing Among The Top Data Integration Startups In Belgium

    Best Startup EU Names 1-more-thing Among The Top Data Integration Startups In Belgium

    We are thrilled to announce we have been featured in the Best Startup EU Magazine as one of the top Data Integration companies in Belgium.

    Thanks to our expertise in designing Low-Code applications and integration/orchestration, 1-more-thing was selected due to exceptional performance in the innovation category, among the following categories:

    • Innovation
      • Innovative ideas
      • Innovative route to market
      • Innovative product
    • Growth
      • Exceptional growth
      • Exceptional growth strategy
    • Management
    • Societal impact

    We are extremely happy to see Low-Code gaining visibility and allowing companies like ours to gain even more credibility. Our clients have known for a long time what the flexibility of Low-Code can do for them, and it was high time that a wider audience of businesses benefited.
    [Watch Fabrice Nordmann’s interview on BFM Business about Low Code and Digital Transformation (French)]

    About the Best Startup EU Award:

    Annually, Best Startup EU awards the most successful startups in the EU, with its lists featuring companies who are pushing the limits of innovation to solve critical problems and challenges. Best Startup EU aims to accelerate the growth of the foremost EU based companies, businesses and innovations by promoting them to a global audience. This year 1-more-thing makes this list for their exploits in the Digital Transformation industry.

    Pleased and humbled by this latest recognition 1-more-thing is ready and eager to deliver to the EU and global stage.

    Read the full article here.

    About BestStartup.eu 

    Best Startup EU is an online publication that helps promote European businesses and put them on the international stage. They primarily focus on businesses who show positive signs of growth, innovation, management and excel in areas which have a beneficial impact on society.

  • FileMaker on Linux / Docker – Presentation at Kentuckiana Developers Group

    FileMaker on Linux / Docker – Presentation at Kentuckiana Developers Group

    [vc_row bg_color=””][vc_column][vc_column_text]A few weeks ago, Jonathan Fletcher was kind enough to invite Romain Dunand (@airmoi) and I (@FabriceN) to do a presentation at his Kentuckiana Developers Group.
    The topic was a comparison of all possible ways to host a FileMaker database, from local server to Virtual Private Server, to, of course, our fmcloud.fm Linux/Docker solution.

    If you want to understand the implications of Docker in the FileMaker universe, it is probably worth watching it.[/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][vc_video link=”https://www.youtube.com/watch?v=nC3zlUctASc”][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][vc_column_text]Sometimes there is a misunderstanding about docker. Some people think about it as an extra layer of complexity, or something that would eat up the physical ressources. The opposite is true.
    This slide illustrates how docker saves space (and maintenance operations, updates…) of the guest operating system on each server. Everything is a container, so FileMaker Server containers can share an Operating System container (they can also NOT share it, in situations where we want to have some servers running FileMaker Server 19.2 (CentOS) and some running FileMaker Server 19.3 (Ubuntu).

    Virtual sever vs Container[/vc_column_text][/vc_column][/vc_row]

  • FileMaker Server on Linux: the fmcloud.fm 2.0 revolution

    FileMaker Server on Linux: the fmcloud.fm 2.0 revolution

    You have to get used to it, with the new short release cycles of FileMaker, important new features are no longer necessarily on a fixed date with a new version number. It is therefore no longer enough, for those interested in the FileMaker platform, to set aside some time in May to inquire about the new features of the annual version: one must also pay close attention to the intermediate versions.
    It is indeed in a relative discretion that Claris announced on Wednesday, October 28th a new version of FileMaker Server, the 19.1.2, which is in itself a major evolution, but which also allows hosting services to offer totally revolutionary services and performances.

    Linux!

    This is of course the big news. This version, which had been available in beta for several months, is now official. Not only is it more powerful than its cousins for mac OS and Windows, but above all it can be deployed as a docker.
    Super fast FileMaker hosting on Linux servers
    This allows hosting providers such as us – well, you still need to invest in order to switch to this kind of architecture, and it seems that we are the only ones to have done so to date (🥇) – to offer a high-performance, ultra-portable service (it can be deployed in virtually any data center in the world) and … very inexpensive. For example, this allows us to offer hosting at $59 for 5 users, where our Windows servers (for which the number of users does not influence the price, of course), start at $99.
    But this is not the place to praise our merits, it was just to give you an example. If you want to see our prices and offers, it’s this way:
    [su_button url=”https://www.1-more-thing.com/1-more-quote” target=”blank” background=”#c751587″ color=”#b60966″ size=”6″ center=”yes” radius=”0″ id=”config”]Configure my server[/su_button]
    The Linux version also brings a very interesting new feature: OData, a modern standard for processing queries to a database. Quite similar to the ODBC/JDBC gateway, but with a JSON or XML output.
    Without going into detail, here is the documentation.
    Also, AD FS authentication is available for the Linux version.
    On the other hand, an important feature of the macOS and Windows versions is not reproduced in the Linux version (or more precisely, it is disabled): custom web publishing (PHP/XML). To switch to Linux, you will have to go through Data API or OData. If you are not comfortable with this, we can help you. After migrating dozens  of applications, we’re used to it, and it’s finally a surprisingly fast process.

    Other important points (I’m saving the best for last, you have to read everything 🙂 )

    Some technical updates first of all:

    • OpenSSL 1.1.1g support
    • Compatibility with Tomcat 8.5.55
    • It is now possible to manage your license from the server administration console.

    But above all…

    • FileMaker Server updates are now real re-installations… that preserve the settings! As our hosting customers may know, we were the only ones who mastered updating with parameters preservation, which allowed us to offer our customers easy updates (a lot of tricks and mischief had allowed us to unlock the secrets of FileMaker Server ;)), but now anyone can update with confidence.
    • A new system of sharing lock allows much better performance on certain actions, notably searches and indexing.
    • Server script for checking all databases
    • Cache dump server script! (this is very interesting for very busy servers that were showing signs of slowing down after a few days/weeks without rebooting)
    • Finally, this news will be of particular interest to developers: Sorting is now done on the server when possible (when FileMaker decides on its own that it is more interesting to sort on the server, depending on the amount of data, server occupancy… you can’t control when the sorting will be done on the server or on the client). It is very efficient for sorting on a local table, but according to our tests it doesn’t work on linked records.
    As you can see, this 19.1.2 is the most important evolution of FileMaker Server in a very long time.
    I invite you to read the release notes and follow the links, it is very informative, as well as this invaluable document on performance improvements (somehow difficult to find on the Knowledge Base).
  • FileMaker Add-ons: our vision

    FileMaker Add-ons: our vision

    #FileMaker #addons are changing the way developers build custom apps.

    Earlier this year with the release of FileMaker 19, it became possible for developers to create add-ons, which are reusable pieces of code or full features components of an app that can be implemented in various applications.

    1-more-thing, a major Claris Platinum Partner based in France and Belgium, defined a long term vision 3 years ago, when the very first glance at add-ons was made possible with the release of FileMaker 17. Fabrice Nordmann, its founder, made a parallel between the WordPress plugins ecosystem and what FileMaker add-ons could become.

    The key of success in this kind of ecosystem is reliability and interoperability.

    For a given functionality or set of functionalities, there could be dozens of add-ons available. At the end of the day, you pick one because you know the editor, and you trust the quality and the continuous support of the components, and that the add-ons will operate smoothly together.

    This sets a clear vision of where we are going regarding add-ons.

    … and it doesn’t stop to vision

    1-more-thing was the very first player to make an add-on publicly available on its store, right after the release of FileMaker 19.

    We chose FastDateInput, an apparently very simple technique (not so simple in fact) that we’ve used in all our custom apps for a decade and that greatly improves the user experience when entering dates.

    Since then, we have released two more add-ons:

    • another ‘simple’ one, Rating, that allows the developer to drag a 5-star rating control onto the interface,
    • and a much more complex one: BugReport, that makes it so simple to implement an advanced bug report system in a FileMaker app.

    And as you might expect, more will come very soon.

    But our home-made add-ons are only a part of the plan

    We have set up an entire platform that goes from building these add-ons to distributing and deploying them, in a streamlined workflow that gives the user an excellent, transparent experience:

    1. Buy from our store
    2. Click on a button in the confirmation e-mail
    3. Install the add-on(s) in your custom app and drag it onto a layout…

    It’s that simple.

    And because we want to make it even easier for a developer to adapt our add-ons to the custom app UI/UX, we also have defined some rules and guidelines.

    Today, we’re calling third party developers to join the adventure.

    If you’re convinced that add-ons are the future of custom apps, we’re making our know-how and our platform available to you. Whether your add-ons are free or paid, we can help you finalise, distribute and support them.

    Let’s get in touch

    #platform #share

  • WebDirect and the Back button

    WebDirect and the Back button

    Edit (July 2025): This technique is now native in FileMaker 2025.

     

    WebDirect was introduced as component of FileMaker Server 13 and has evolved regularly since then.

    It makes your FileMaker custom applications available in the browser and available through the Internet, Claris making sure that the user experience is as close as possible from FileMaker Pro’s.

    This has proven very useful in corporate companies where installing a software like FileMaker Pro on desktop computers isn’t trivial.

    Web Direct is a good option if you need to expose your app to external users or to build a customer portal for instance.

    WebDirect requires FileMaker Server

    The “back button” issue

    An often heard complaint though is that users are disconnected when they click the Back button of their browser. This button is confusing because it’s very similar and at the same top left corner than FileMaker Pro record navigation widget.

    Our work-around

    Here is our solution, freely downloadable and usable. It’s a single HTML file.

    This HTML file disables the back button if a user connects to a custom app using the file URL.

    Using the back button will result in a message telling the user he can’t use that button.

    To install, simply download the file and place it in this directory of your FileMaker Server machine

    • On Windows : FileMaker Server\HTTPServer\conf\
    • On the mac : FileMaker Server/HTTPServer/htdocs/

    Repertoire de destination du fichier html

    Next edit the HTML with a simple text editor and modify the “solution” variable to indicate your FileMaker file name.

    Fichier html destiné à l'ouverture de la solution en Webdirect

     

    Usually, a user uses this kind of URL to connect to his custom app:

    • https://<server>/fmi/webd/<filename>

    With this solution he should rather use:

    • https://<server>/<htmlfilename>.html

    In our example this would be: https://1mt_server/1mt_Tasks.html

    NB : If you’re using this solution with a http connection instead of https, don’t forget to edit the uri, variable in the HTML file (change https into http).

    Download the file here: Zip-file-iconWebDirect_Wrapper.zip

    Do not hesitate to share this blog post!

     

  • FileMaker.PerformScript Javascript class extended

    FileMaker.PerformScript Javascript class extended

    [vc_row bg_color=””][vc_column][vc_column_text]With the release of FileMaker 19, it becomes easier than ever (it was already largely possible before – I had the opportunity to show the “#hash trick” in a few conferences 😉 ) to make FileMaker and Javascript communicate. Notably by executing Javascript code in a Web Viewer thanks to the script step Perform Javascript in Web Viewer (FileMaker asking the Web Viewer to execute a Javascript), and to the FileMaker.PerformScript Javascript class (“FileMaker script name”, “Optional parameter” ), Javascript calling a FileMaker script.

    However, in our opinion, the latter lacks some possibilities. We have mentioned here the impossibility to resume a FileMaker script that would be paused, but there is also the absence of possibility to differentiate the called script (callback) according to success or failure. This article develops this last point and provides a solution.

    Synchronous programming

    No library is necessary, but I had to write my own class that extends a bit FileMaker.PerformScript to FileMaker.PerformScript ( scriptName, parameter, successCallback, errorCallback ).

    A small example to make a bidirectional interaction between FileMaker and Web Viewer. It is a system of callback and/or promise, a way that Javascript often calls something from the outside and depending on whether everything went well (success) or badly (error), you let something happen in your Javascript application.

    In fact, it all boils down to this: “FileMaker, call this script. If it went well do this, if it went badly do that”.

    A concrete example with calendar integration: if the user changes the location of an event, he must call FileMaker and save it in the database. If this was NOT successful (for example, a commit error), the transaction must be canceled and the event returned to its original location so that the user sees that it was not saved. This is called asynchronous programming, and it is something that you must absolutely understand if you want to continue with Javascript.

    So in the calendar, here’s what really happens:

    1. The action in Javascript is called, with immediate actions: what to do if it goes well, what to do if it goes bad.
      Internally, these actions are recorded, and Javascript calls FileMaker.
      The Javascript code isn’t “running” anymore, there is no more pause, we have actually reached the end of the code.
      FileMaker does its job and decides if it wants to tell the Web Viewer if it went well or badly.
      The Web Viewer executes the pieces of code (saved in step 1).

    In code :[/vc_column_text][vc_column_text]

    #BUSINESS LOGIC
    #add as much logic as you want, for instance try to write to a folder
    
    #DEMO: a custom dialog
    Show Custom Dialog [ Title: "Choice"; Message: "Was the record saved?"; Default Button: “Yes”, Commit: “No”; Button 2: “No”, Commit: “No” ]
    
    If [ Get ( LastMessageChoice ) = 1 ]
        #we pass success to the callback
        Set Variable [ $result; Value:JSONSetElement ( "" ;
    [ "id" ; JSONGetElement ( Get ( ScriptParameter ) ; "id" ) ; JSONString ]; [ "success" ; Get ( LastMessageChoice ) = 1 ; JSONString ]
    )]
    Else If [ Get ( LastMessageChoice ) = 2 ]
        #we pass error to the callback
        Set Variable [ $result; Value:JSONSetElement ( "" ;
    [ "id" ; JSONGetElement ( Get ( ScriptParameter ) ; "id" ) ; JSONString ]; [ "error" ; Get ( LastMessageChoice ) = 2 ; JSONString ]
    )]
    End If
    
    #RETURN TO WEB VIEWER
    Perform JavaScript in Web Viewer [ Object Name: "wv"; Function Name: "fmcallback"; Parameter 1: $result ]

    [/vc_column_text][vc_column_text]As you’ll see in the example, I’ve put a library in there. It took a lot of sweat and tears to make it all work. I would like to explain how it all works, but it boils down to this:

    I’ve expanded the FileMaker.performScript a little bit so that you can now include a success callback and an error callback. I record it and then I call the FileMaker script. I adjust the parameter a bit, because I add another “id” and then the parameter as passed.
    Think of it as a kind of “phone line that FileMaker can remember”. When FileMaker calls the web viewer again with this id, the web viewer knows what action it is.

    In fact, the Web Viewer tells FileMaker, “Hello, I’m action 23 and I’d like you to save this record. Afterwards, FileMaker tells the Web Viewer that action 23 went very well!

    And here is an example, play with it and if there are any questions, feel free to ask them below! It’s a rather difficult concept, but once you’ve mastered asynchronous programming, you’ll want to do the same in FileMaker 🙂

    Promise

    Oh yeah, for the diehards: it also works with promise (on Mac anyway, on Windows not sure), so you can do that too :[/vc_column_text][vc_column_text]

    fm.performScript ( "getData", "" )
        .then ( (data) => {
           //data is script result of getData
           data.sort();
           fm.performScript ( "storeData", data);
         })
        .then ( ( data ) => {
           //data is script result of storeData
           //do things here
        })
        .catch ( ( error ) => {
            //this is the error of getData or storeData, cool isn't it? :)
            alert(error);
     
        })
    

    [/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][ish_button el_text=”Download demo” url=”url:https%3A%2F%2Fwww.1-more-thing.com%2Fwp-content%2Fuploads%2F2020%2F06%2F1MT_javascriptCallBack.zip|title:Download%20demo||” size=”big” align=”center” color=”color7″ text_color=”color4″][/vc_column][/vc_row]

  • FileMaker 19: Entering a New World

    FileMaker 19: Entering a New World

    [vc_row bg_color=””][vc_column][vc_column_text]FileMaker 19 has just been released, and there’s a lot to be said about both the new features and the evolution of the platform in general.
    Rather than publishing a long video as we usually do, we thought a feature article made more sense this time.

    A few background elements first of all. Everything has changed this year at Claris, starting with the company name, still FileMaker Inc. less than a year ago. FileMaker 19 is thus the first major release since the name change, but also and especially since the arrival of a new management team, of which Brad Freitag (CEO), and Srini Gurrapu (Vice President of Products & Design) are the most visible members (but there are also changes at the marketing and sales levels)… in short, a lot has changed, and Claris’ – at first sight a bit naive – baseline “Anything is possible” actually makes sense.

    In just a few months, everything that was impossible has become inevitable, therefore possible.

    The effects are so numerous and so exciting that we couldn’t list them all, but let’s say a few words about the platform’s development cycles.

    Development cycles

    Srini Gurrapu, ClarisFirst of all, it took Srini Gurrapu about 28 seconds to understand the anachronism of maintaining the Windows and Mac OS versions of FileMaker Server. Dependencies on Java and its implementations make it very expensive, and one of the first things announced at DevCon was that we would move to a single server, which Romain Dunand and I had understood to mean a Linux version. This was confirmed by the same Srini at the FM Conf in France in 2019.

    So on the server, we now have – for testing purposes only at this stage – a Linux version in addition to the mac OS and Windows versions, and it is likely that the latter two will be history in a while. This doesn’t mean that you won’t be able to install a FileMaker Server on a Mac or a Windows PC, but likely the installation will include a Linux virtual machine or docker (Cent OS is mentioned, but other distributions can be used).

    Regarding the development cycles themselves, FileMaker 19 is announced as the last numbered version. From now on, we should have a quarterly release instead of an annual one. So the next version should be 2020.1, then we’ll have 2020.2… This allows Claris to release features much faster, and even in a “preview” state in order to collect feedback from users earlier in the cycle. This is already the case with the Add-ons feature, present in version 19 but likely to change (and full of bugs by the way).

    So we’re moving from an “old-fashioned” cycle, with functionalities fixed very early on, a big shindig in May with the need for functionalities to be “bling-bling” enough for marketing to do something with them, to much more agile deliveries and functionalities that are more adaptable and even closer to real needs.[/vc_column_text][vc_column_text]

    Ecosystem

    Maybe the first thing you notice is the change of icon. For nearly 30 years, FileMaker has been identifiable by a cardboard folder (here the icon of FileMaker 2.0, in 1992) [NB: the purists—not to say David Julot ;)—will point out to me that FileMaker 3 had committed an infidelity], and suddenly this image is abandoned in favor of a variant of the logo of the publishing company, Claris.

    FileMaker 2.0

    We must take into account the strategic aspect of this departure. Claris has freed itself from the FileMaker girdle by adding new strings to its bow: Claris Connect, which I’ll talk about below, and FileMaker Cloud. These two last ones make Claris a service company in addition to being a publisher.

    Personally, I would have liked to have pushed logic to the point of changing the name of the product. FileMaker, the “file maker” (or—literally—the “traffic jams maker” in Dutch, a very catchy marketing statement …), doesn’t evoke anything to the generations that didn’t get to experience paper indexes. Incidentally, do you remember the infidelity committed by FileMaker 3.0 mentioned above?

    FileMaker Pro 3.0

    So, even if we have to change, I must admit I would have been happy to get rid of this association with a bygone world, which is often worth remarks like “Hey, FileMaker! Does it still exists?” by people who knew the software in the previous millennium. But that’s not what has been decided. So let’s move on.

    Speaking of name changes, have you noticed? FileMaker Pro Advanced has disappeared, we are now talking about FileMaker Pro (the software had been unified when FileMaker 17 was released, but we had opted – strangely I find – for the name “Advanced”). Maybe it was at first so people would not feel they were shortchanged. Nevertheless, must we keep such antediluvian name, it better be streamlined to the name everyone knows: FileMaker Pro. It’s done in 19.

    Another very important point to note is the end of FileMaker Pro’s compatibility with 32-bit versions of Windows. The FileMaker platform thus completes its transition: it is 64 bits or nothing, server side as well as client side. Again, these are fewer versions to maintain, and more resources for development and innovation.

    Probably for the same reason, the compatibility window has been reduced. Until now, the server supported clients up to 2 versions earlier or later (clients 14 to 18 could for example connect to server 16. However, FileMaker Server 19 is not compatible with FileMaker Pro Advanced clients 17, and vice versa.

    The Runtime has disappeared, as announced 5 years ago. It is therefore no longer possible to distribute single-user standalone applications for Mac or Windows. Yet, existing runtime as well as copies of FileMaker 18 have not disappeared overnight, so there is still some time for editors of “runtime” applications to pull around. Notably, let’s recall that the iOS SDK allows to compile applications for iOS.[/vc_column_text][vc_column_text]

    First impressions

    The mac users can experience changes right from the outset. No more old-fashioned installer: just drag the application into the Applications folder, and off you go. Small extra bit incurred for those who, like me, work in English on a French (or any localised version) Mac OS: you have to pass the validation step. In other words: before fumbling around in the package contents to move the fr.lproj folder, you have to run the application once in French first, otherwise the validation will fail.

    Another point: the Dark mode. For the followers of the Dark mode of Mac OS, all the FileMaker interfaces – except the relationship graph – have been adapted to conform. A calculation function is available to determine whether or not the application is running in Dark mode: Get (System Appearance). Personally, beyond aesthetic considerations, I adopted the dark mode for a few months to be able to report problems to Claris, but I confess that I had the impression of recovering my sight by reactivating the light mode. Nevertheless, we have several clients who work in dark environments (projection rooms, recording studios…), and who will be delighted with this evolution.

    As a rather pleasing collateral effect, to implement Dark mode, Claris has been forced to modernise some interfaces, and several generations of buttons with different styles have (finally!) been standardised (for example the Manage Layouts window).

    New features

    There are many new developments, some of which have very important implications. If you are reading this long blog post on 1-more-thing’s website, it is because you know that although we are passionate about FileMaker, we maintain a freedom of tone and a critical eye. Therefore, you will find in the explanations below, as we usually do in our videos, some regrets or criticisms. Notwithstanding, know that overall we are extremely enthusiastic about this version.

    I will discuss these new features in order of importance, which is of course, very subjective. Note that I will discuss FileMaker Go oriented features together at the end.

    Add-ons

    This feature is in “preview”, meaning that it is not bug free, and that it hasn’t delivered its full potential yet. But this feature will completely revolutionise the way FileMaker applications are designed.

    Introduced as an example since FileMaker 17, add-ons can now be designed by third-party developers or by yourself. In Layout mode, you can simply drag an add-on onto the interface from the third tab in the left pane of Layout mode. In concrete terms, you can integrate a payment module, a calendar, a text editor, etc. in a few seconds.

    From now on, I encourage you to bookmark our dedicated page.

    A new script step, Save a copy as Add-on package, undocumented because in “preview”, is there to create an Add-on from an open window.

    In terms of regrets—which it is once again a little early to have, the functionality being only in “preview”—we will note :

    • impossibility to share some resources between add-ons (if two add-ons use the same function, it will have to be imported twice)
    • no update mechanism (if the editor of an add-on releases a new version)
    • obligation to have at least one table in an add-on. Too bad, it would have been a good way to share a theme, or a set of custom functions…
    • no way (to my knowledge) to have some hidden or compiled code, or to implement a licensing system for add-ons.

    Javascript integration

    Two new features relate to javascript: the Execute JavaScript in Web Viewer script step and the ability to execute a FileMaker script from within Javascript: FileMaker.PerformScript

    Intrinsically linked to the functionality of the add-ons because it allows to use Javascript as a component interface, we can however regret that in this implementation:

    • Javascript can only be executed in a web viewer. It would be so convenient and powerful to be able to use Javascript in a calculation or script independent of the interface. Thus limited, one cannot take advantage of this new possibility in server scripts. Fortunately, there are third party plugins for that (including the excellent MBS)
    • The FileMaker.PerformScript command does not control resuming a paused script in FileMaker. This is extremely unfortunate for synchronous programming, in which a paused calling script waits for the result of a user action in a web viewer.
    • Finally, still no news of THE request from all developers since the introduction of web viewers in version 8.5 (2006): the possibility to get the content of a web viewer after javascript has been executed, with the GetLayoutObjectAttribute function.

    Opening a default file

    Default fileThese are the kind of little things that change everything. Already present in version 18, but reserved for scripted installations, a new preference appears in the interface.

    Use it to configure FileMaker Pro to always open the same file at startup. The vast majority of FileMaker users always use the same custom application. Here’s something that will make their lives easier.

    Small regrets:

    • you still can’t define this setting by script, so you’ll have to go on each machine (except in case of scripted installation)
    • in the remote open window, the path to a remote file is expressed as fmnet:/server/file and does not convert a possible URL to fmp://server/file. So we are not yet completely rid of these complicated explanations for an end user. A small memo here on our support portal.

     

    Layout quick selector

    Layout Quick OpenAnother point that will this time change the life of developers: the selection of a layout by search engine.

    In template mode, use the key combination cmd-alt-K (Mac OS) or ctrl-alt-K (Windows) to activate a search engine to select a layout and quickly navigate to it. This will greatly improve the quality of life for Windows developers.

     

    Execute FileMaker Data API

    This script step, which makes its entrance in a very discreet way since it is not even mentioned in the documentation (!) is in itself a small revolution.

    It exposes the Data API to the FileMaker Calculation Engine. In other words, if you know how to create a JSON query for the Data API, you know how to create a JSON query within FileMaker. In many cases, this can replace (advantageously) the ExecuteSQL function.

    Rather than describing this script step in detail, I link you to a blog post by Todd Geist who has remarkably synthesised it.

    https://www.geistinteractive.com/2020/05/20/filemaker-19-execute-filemaker-data-api-script-step/

     

    Unfortunately, and although I’m convinced that this is a huge step forward (I’d be willing to bet that this script step will be used extensively in our applications), there’s still cause for regret.

    • First of all, it was decided to implement this feature as a script step only and not as a calculation function. What a pity! So we find ourselves with ExecuteSQL which is a calculation function whose query object is the table and without any notion of context, and Execute FileMaker Data API which is a script step that queries a layout (template), and therefore with a notion of context. Make your choice! It would have been so wonderful to be able to request a context from within a calculation! Well, then if the calculation engine is not able to evaluate from an unrelated context it’s a good reason to go for a script step but…
    • On the other hand, the big limitation of the ExecuteSQL function is that it only supports reading (SELECT), on the pretext that it’s a function, so it shouldn’t have a side effect (let’s skip over the fact that the plugin API has been allowing a plugin to bypass this for a very long time…). And so, the advantage of being a script step could have been to allow writing or executing scripts, which the Data API allows. Well no! Again, this new script step is limited to reading. One could say that, if you have activated the Data API on the server and the incoming data is not counted in the API consumption (limited according to your license), you just have to use Insert from URL to post data modifications. It would be forgetting that the response made by the Data API is an outgoing data and is therefore counted. Unfortunately, this can’t be a viable way to replace database queries, except for very limited traffic. In short, we’ve come very close to a revolution, but…

    Number of pages and scientific notation

    I’m not going to go long on those two points. They come with a good twenty years delay, which gave us plenty of time to find workarounds to these shortcomings, but finally… we can finally display the total number of pages of a printed document or a PDF without resorting to “tricks” and tips. Also, you can format a number in scientific notation format (in powers of 10) on the layout.

    Card windows in Web Direct

    The title says it all. Although card windows were already managed, they used to fill the whole browser window. Forthwith, we experience in Web Direct the behaviour we get in FileMaker Pro. I must admit that it wasn’t a subject that concerned me much. As long as we don’t have really responsive interfaces (with reflow) or onObjectMouseOver triggers, it seems to me that Web Direct won’t be able to create any illusions in terms of interface. It’s still very suitable for an intranet, but if you are demanding on the UX, custom development like we’re doing now with a real front end in Vue.js, and the Data API in the backend gives incomparable results, within very reasonable budgets. All in all, I’m not going to reach ecstasy with this new feature, but it’s clearly an improvement.

    As for FileMaker Go …

    The features below are not all strictly reserved to FileMaker Go, however it is in this framework that they are more relevant, that’s why I put them at the end of the list. Last but not least!

    Core ML

    Core ML is Apple’s framework that makes it relatively easy for iOS and macOS applications to integrate extremely complex artificial intelligence (AI) models.

    What is implemented here are models that result in a string (more precisely: scalar data). Models returning, for example, a multidimensional image or array are not implemented.

    In practice, the most useful models will undoubtedly be those of object recognition or regression… which will still offer very interesting things, for example in inventory or warehouse management applications.

    The “functionality” is made up of two elements: a script step Set up the Machine Learning model, and a calculation function ComputeModel.

    The compatibility indicated in the documentation is a Yes for FileMaker Go, and Partial for FileMaker Pro and FileMaker Server. This reminds us that CoreML is a component of macOS. Windows, Linux, or perhaps one day Android versions are not affected.

    Reading NFC (Near Field Communication)

    This is a very timely feature! At a time when any contact is considered a major health risk, FileMaker Go has the ability to interact with nearby objects. Thus, with the ease of implementing a card payment by means of add-ons (see above), it is also very easy to read a contactless card. This is only one of the many applications possible with NFC, and it is really very simple to do thanks to the Configure NFC protocol reading script step. Note that the iPhone arrived very late to NFC (the iPhone 6 already offered it but reserved it for payments with Apple Pay, and we had to wait for the iPhone 11 to be able to do something else, so we have to make sure that the hardware is compatible).

    Siri Shortcuts

    In these times of containment, it is reassuring to know that one can always, in case of extreme solitude, talk to Siri.
    It is now possible to configure a script to be accessible through the Shortcuts application.
    Well, I must admit that I’m not a big fan of voice interfaces but I tested it and it works well.
    In case of space outings, don’t forget to configure a Siri shortcut for the door opening script, you never know.

    Hal 9000

    The Universe and the rest

    Of course there is still a lot to say about the features listed above. We will revisit Add-ons at length. Once again, it is the direction taken that is exciting.
    Coupled with the integration of Javascript, Add-ons will truly revolutionise how FileMaker custom apps are created. Despite having a good head start on other comparable platforms, we have to admit that some of them also had their advantages, notably a modular architecture that was lacking. Not only is the delay on this point being made up, but we’ve just regained our lead on other points. FileMaker is becoming hardly questionable as a leader in low code platforms.

    Claris Connect

    I would like to conclude on a point that went almost unnoticed a few weeks ago: the new Claris Connect rates. When Claris Connect was released in March, we, who had tested it for many months and were very enthusiastic about the product itself, were, to put it mildly, a little embarrassed by the announced prices and plans. To put it less nicely and concisely: these prices could not in any way allow this new automation and orchestration platform to hatch and become a market standard.
    It appears that we were not the only ones to think this way. Claris team’s response was swift and and intelligent. New prices have been published, which not only make the platform very interesting, but also make it a complementary tool to FileMaker. Indeed, if you are a FileMaker customer, the price for Claris Connect (FM Plus) has become very affordable. This means that we are really entering a much more modular world, where complex applications can be assembled more easily, whose components can be simpler, more robust, and whose maintenance is even better assured…

    After a somewhat disappointing version 18, this version 19 is a giant step forward!

    If you liked this article, feel free to leave a comment below.

    I remind you that you can also select the FileMaker license that suits you best, thanks to our little module (developed in Web Direct!). Thank you for choosing us to order and manage your FileMaker licenses![/vc_column_text][/vc_column][/vc_row][vc_row bg_color=””][vc_column width=”1/1″][ish_button el_text=”Select the best license” url=”url:https%3A%2F%2Fwww.1-more-thing.com%2F1-more-quote%2F||target:%20_blank|rel:nofollow” size=”big” align=”center” color=”color7″ text_color=”color4″][/vc_column][/vc_row]

  • filemaker2tableau, a new way to connect your FileMaker data to Tableau

    filemaker2tableau, a new way to connect your FileMaker data to Tableau

    Sometimes, a leader has to go beyond what’s just available.

    As 1-more-thing, a world leader in the FileMaker/Tableau integration, we’ve decided to share our home made FileMaker/Tableau connector, an alternative to the one distributed by Claris with FileMaker Server.

    This new connector is based on the latest version of Tableau’s Web Data Connector (WDC) and includes a simple an intuitive interface to help you connect your FileMaker data with your Tableau Software dashboards.

    Comparison with the native Claris Tableau connector

    • autocompletion of the list of databases (FileMaker files)
    • autocompletion of the list of available layouts
    • “multi-table” connection: connect several layouts in one go and import all data at once!

    Easy install

    • Download the lastest version on GitHub (yes, it’s free and Open Source) https://github.com/1-more-thing/fm2tableau/releases/latest
    • Unarchive into a subdirectory of the web directory of your FileMaker Server:
      • Windows :
        C:/Program Files/FileMaker/FileMaker Server/HTTPServer/conf
      • macOS:
        /Library/FileMaker Server/HTTPServer/htdocs/httpsRoot
    • From Tableau, connect to your server by using your server location and the subdirectory name (eg: https://my.filemaker.server/fm2tableau)

    Important remarks :

    • The connector must be installed on the FileMaker Server machine (CORS restrictions)
    • oAuth authentication is not (yet) supported. It will be shorly.
    • Requirements are the same than with the native connector bundled with FileMaker Server (Data API enabled and fmrest extended privilege assigned to the account)

    Connect FileMaker to Tableau in 30 seconds

    filemaker2tableau video

  • What a week!

    What a week!

    Well, there are weeks when things happen, things!

    Of course, the big news last week was the release of Claris Connect.

    Our videos in French and English have broken records in terms of number of views, and have been re-published by some specialized media such as

    MacGénération

    or mac4ever

    As a result, we have been awarded the “grade” of Claris Connect Partner by Claris International, which attests to the fact that we have completed the relevant training and are able to advise you effectively on the technical and commercial aspects of the Claris Connect platform.

    Marketplace

    But good news never comes alone, so two of our products occupy the top two spots in the global FileMaker Marketplace!

     

    #1 : Nutshell Console is a tool that installs on a FileMaker Server and makes it easy to configure and administer certain aspects of FileMaker Server that are inaccessible through the standard Administration Console. Most importantly, Nutshell Console makes it possible to draw statistics, monitor server activity, and easily detect the causes of a problem or slowdown.

    #2 : FM Audit Log 2.0 is a native FileMaker solution that developers can implement in their applications to keep track of all data changes. Compatible with FileMaker Pro, FileMaker Go, and FileMaker Web Direct, FM AuditLog Pro 2.0 also provides rollback capability.

     

  • Claris Connect: the new integration/orchestration platform by Claris

    Claris Connect: the new integration/orchestration platform by Claris

    Today Claris made its new integration/orchestration platform available: Claris Connect.

    During DevCon 2020 in Orlando, Brad Freitag (@bradfreitag), CEO of Claris International announced the acquisition by Apple/Claris of the Italian startup Stamplay.

    A few months later, Claris Connect is born! This new platform allows you to create and automate very complex data workflows in minutes… without any technical background.

    What was requiring several days of development to integrate various web services can now be accomplished very easily, including logic, error trapping, data transformation…

    Giuliano Iacobelli
    Giuliano Icacobelli (@Giuliano84), founder of Stamplay & Fabrice Nordmann (@FabriceN), 1-more-thing

    Watch this video by Romain Dunand (@airmoi), and enjoy!

    In this example we will integrate a WordPress powered web site with WooCommerce plugin, a FileMaker Server hosted database and Office 365. Note that Claris Connect is independent from FileMaker software, used here as an example only.

     

  • FileMaker launches its Marketplace

    FileMaker launches its Marketplace

    Today Claris launches its FileMaker Marketplace. Guess who got the top spot on the first page?

    Nutshell Console of course ! The flagship product of the season, cited many times during the last DevCon in Orlando.

    Beyond this sweet satisfaction, we are very excited about this FileMaker Marketplace. While there isn’t much content at this time, the quality of what is available (apps, training …), make us confident that it will contribute to expand significantly the platform’s visibility.

    We have some projects that might interest developers. If you are interested, do not hesitate to contact us or to meet us at future European conferences (scroll down the page for European conferences)