fm-csv2json

A CSV Parser that converts CSV into JSON on the FileMaker Pro Platform.

I was browsing over at the FileMaker forums and came across a question about parsing CSV data.

This caught our interest and made us ask the question.

Could we take some CSV data and transform it into a valid JSON Object?

The answer was yes and with that we present fm-csv2json.

A FileMaker script which when passed a valid CSV string, will covert this string into a JSON object.

Download free over on Github.

We also have a similar parser that turns XML into JSON too.

fm-xml2json

FileMaker Web Direct Clock

I was browsing over at /r/filemaker/ and came across the following thread.

I’ve got a running clock javascript that works when opening from Filemaker, but can’t run correctly on webdirect because of the GetDate() function. I was wondering if anyone had a solution to pulling the date from the server so the clock will be uniform everywhere.

ltlmanandy

After spending about an hour or so playing around, to see if we could actually build a running Filemaker Web Direct clock. We produced the following solution:

Let (
  [
    _ts = 
      ( GetAsNumber ( Get ( CurrentHostTimestamp ) ) 
      - GetAsNumber ( Timestamp ( "1/1/1970" ; "00:00:00" ) ) 
      + Floor ( Get ( CurrentTimeUTCMilliseconds ) / 1000 ) 
      - GetAsNumber ( Get ( CurrentTimestamp ) ) ) * 1000 ;
    _html = 
      "
      <!DOCTYPE html>
        <html>
          <head>
            <script>
              function startTime(today) {
                var start = new Date(" & _ts & ");
                setInterval(function(){
                  /* delta is used to reduce time slippage */
                  var delta = new Date() - start;
                  if(today) {
                    var today = new Date(
                      today.getFullYear(), 
                      today.getMonth(), 
                      today.getDate(), 
                      today.getHours(), 
                      today.getMinutes(), 
                      today.getSeconds(), 
                      today.getMilliseconds() + delta
                    );
                  } else {
                    var today = new Date(
                      start.getFullYear(), 
                      start.getMonth(), 
                      start.getDate(), 
                      start.getHours(), 
                      start.getMinutes(), 
                      start.getSeconds(), 
                      start.getMilliseconds() + delta
                    );
                  }
                  var h = today.getHours();
                  var m = today.getMinutes();
                  var s = today.getSeconds();
                  m = checkTime(m);
                  s = checkTime(s);
                  document.getElementById('txt').innerHTML =
                  h + ':' + m + ':' + s;
                }, 100);
              }
              function checkTime(i) {
                if (i < 10) {i = '0' + i};
                return i;
              }
            </script>
          </head>
          <body onload='startTime()'>
            <div id='txt'></div>
          </body>
        </html>
        " ;
    _result = 
      Case (
        PatternCount ( Get ( ApplicationVersion ) ; "Web" ) ;
          "data:text/html;base64," & Base64Encode ( _html ) ;
        "data:text/html," & _html
      )
  ] ;

  _result
)

Paste the above code into any web viewer and it will produce the following FileMaker Web Direct Clock!

Filemaker Web Direct Clock

The script makes use of Get ( CurrentHostTimestamp ). This keeps any client, whether using web direct or FileMaker Pro, in sync as the time source is consistent between clients.

The _ts variable is used to convert a FileMaker Timestamp into an Epoch timestamp required in Javascript.

The javascript var delta is required because the javascript function setInterval(...) is not guaranteed to consistently run at the ms value you give it. This variable allows for the slippage to be calculated and be added or subtracted to the time to keep it in sync. We initially didn’t have this and noticed that within 5 minutes our web direct clock and our system clock where out of sync by a matter of minutes.

References

Get ( CurrentHostTimestamp ): https://fmhelp.filemaker.com/help/17/fmp/en/index.html#page/FMP_Help/get-currenthosttimestamp.html

FileMaker Epoch Method: https://community.filemaker.com/thread/93917

Javascript Clock:https://www.w3schools.com/jS/tryit.asp?filename=tryjs_timing_clock

Javascript timer slippage: https://stackoverflow.com/questions/29971898/how-to-create-an-accurate-timer-in-javascript

fm-mime-types

As we delved into the world of REST APIs using FileMaker, we stumbled across an issue.

How do we get a file’s MIME-type in FileMaker Pro?

When you are dealing with binary data and having to send HTTP Headers in relation to this data, you will most certainly have to provide a Content-Type header at some point.

This header tells the recipient the type of information that is being passed over the network.

e.g. A pdf file will have the Content-Type of application/pdf.

We found out during our development of fmapi-aws-s3 that to put data onto an S3 bucket, we would have to pass in the MIME-type of the file we send.

This was an issue and with any issue, solutions are born.

We present fm-mime-types.

A FileMaker script which when passed a valid filename, will return the correct MIME-type for that file format.

Download free over on Github.