Jump to content
TJ53

Virtual list using JSON

Recommended Posts

On a separate thread I asked Bruce Robertson if the new FM16 JSON functions could be used together with the virtual list technique he created. I haven’t experimented with it but I wonder if JSON adapt well to this great technique. Any thoughts? thanks!

Share this post


Link to post
Share on other sites

In theory: yes.  The question will come down to whether the JSON building and parsing functions are faster or slower than the regular text functions I guess.

  • Like 1

Share this post


Link to post
Share on other sites

Technically, it could be done. As Wim mentioned, performance is a major constraint. The JSON functions are slow compared to the built-in functions for return-delimited lists, and very slow compared to repeating variables.

  • Like 1

Share this post


Link to post
Share on other sites

Thank you for the responses, I hadn't thought about the speed factor, it makes a lot of sense.

So ... are the JSON functions slow for building or parsing? I haven't tested them with big chunks of text. I see that in the recent FM16 update the speed of the "sort values" and "unique values" functions have been improved. Is the speed of the JSON functions an issue in a similar way? I haven't read anything about it ... any interesting links about this? thanks!

Share this post


Link to post
Share on other sites

The JSON functions in FileMaker 16 have constraints the SortValues and UniqueValues do not.

The JSON parsing functions check that the input they're trying to parse is in fact completely valid JSON. FileMaker has to do this to be able to return an error result when appropriate. You can't know if the outer-most structure in a JSON string is correctly terminated without starting at the beginning, checking every inner structure, and getting all the way to the end.  Due to how the JSON format works, this requires stepping through the entire string for every single operation. (This could be resolved by FileMaker using a more efficient internal data structure for JSON in place of the raw string, but performance tests from a few folks suggest that FileMaker isn't doing this.) In comparison, the GetValue function only has to parse as many newline characters as it takes to get to the value you want, and it can ignore everything in a string after that point. With repeating variables, there doesn't need to be any parsing at all (depending on how you do it) — you can just use the whole content of the variable (repetition).

The JSON writing functions have a similar constraint. They validate any JSON you had to start with, and then the JSON writing functions are somewhat fastidious in organizing the contents of their JSON outputs.

You can make parsing nested structures in JSON less slow by parsing out inner structures, then getting the details from the inner structures, rather than pulling from the outer structure for every inner detail. This reduces how much total work FileMaker spends validating the JSON for each read.

When speed is more important than simple code, do this:

Let ( [
    _dictionary0 = JSONGetElement ( $json ; 0 ) ;
    _0a = JSONGetElement ( _dictionary0 ; "a" ) ;
    _0b = JSONGetElement ( _dictionary0 ; "b" ) ;
    
    _dictionary1 = JSONGetElement ( $json ; 1 ) ;
    _1a = JSONGetElement ( _dictionary1 ; "a" ) ;
    _1b = JSONGetElement ( _dictionary1 ; "b" )
] ;
    ...
)

Not this:

Let ( [
    _0a = JSONGetElement ( $json ; "[0].a" ) ;
    _0b = JSONGetElement ( $json ; "[0].b" ) ;
    _1a = JSONGetElement ( $json ; "[1].a" ) ;
    _1b = JSONGetElement ( $json ; "[1].b" )
] ;
    ...
)

And for writing JSON, add as much in each JSONSetElement call as you can, rather than using many separate calls. Do this:

JSONSetElement ( "[]" ;
    [ "[0].a" ; 1 ; JSONNumber ] ;
    [ "[0].b" ; 2 ; JSONNumber ] ;
    [ "[1].a" ; 3 ; JSONNumber ] ;
    [ "[1].b" ; 4 ; JSONNumber ]
)

Not this:

Let ( [
    _json = JSONSetElement ( "[]" ; "[0].a" ; 1 ; JSONNumber ) ;
    _json = JSONSetElement ( _json ; "[0].b" ; 2 ; JSONNumber ) ;
    _json = JSONSetElement ( _json ; "[1].a" ; 3 ; JSONNumber ) ;
    _json = JSONSetElement ( _json ; "[1].b" ; 4 ; JSONNumber )
] ;
    ...
)

While these patterns make FileMaker's JSON functions less slow, it isn't enough to make them competitive with return-delimited lists or repeating variables for speed.

  • Like 1

Share this post


Link to post
Share on other sites

That's some great information to take into account, thank you!!

Share this post


Link to post
Share on other sites

Jeremy, have you tested against the 16.0.2 update?? `does it improve speed??

Share this post


Link to post
Share on other sites

A couple things that come to mind if you go down this path...there is a limit to how many variables you can set with a Let statement, 1000. And if you use the "JSONFormatElements" function, it may re-sort your data unexpectedly. I would consider JSON for passing variables, possibly, over using for virtual lists.

Mike

  • Like 1

Share this post


Link to post
Share on other sites
On 7/15/2017 at 11:39 PM, john renfrew said:

Jeremy, have you tested against the 16.0.2 update?? `does it improve speed??

I have now. The 16.0.2 update does not change the performance characteristics of the JSON functions relative to return-delimited lists or repeating variables.

  • Like 1

Share this post


Link to post
Share on other sites

Thanks Jeremy..

Share this post


Link to post
Share on other sites

I did not attend Devcon this year. But I see that Kevin Frank posted the following comment recently on a different list.

And actually - even elsewhere in this forum. But I thought it might be good to add his comment within this thread. Anyway, quoting him:

Quote

One nice thing about FileMaker being on a yearly release cycle is that there is always something new to learn and write about… and, having just attended a couple highly informative sessions on the topic of JSON (JavaScript Object Notation) at Devcon 2017 — thank you Todd Geist and Anders Monsen — it is clear to me that JSON + virtual list is a compelling combination.

https://filemakerhacks.com/2017/07/27/json-virtual-list/
 

Edited by BruceR
clarification and attribution
  • Like 1

Share this post


Link to post
Share on other sites

Hey Bruce,

Kevin also posted the link here.

Lee

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By root_iv
      big hack#1 "JSON and FileMaker 16"
      https://t.me/filemaker_help January 25, 2018 In development process of information system definite records are required to be selected.
      For example, needed nomenclature could be added to shopping basket from product list.
        With 16 system release and adding functions JSON implementation of this task was greatly simplified. Earlier for user selects holding global field or supporting table was required. We had to follow that this field or table were emptied before every new  selection procedure. Only public variable is needed now. All information about selected records can be easily added and read by using function JSON,, where the result will be the following JSON- text:
      “{"1":true,"3":true,"4":true}”
      in which 1,3 and 4 – keys , which name corresponds to chosen identifier (if we chose record with id 1,3 and 4). Every key gets assigned the same boolean value: true.
      Script , applying data-hold in JSON-text, is simply arranged . Let us suppose, we handle button, by which the user choses certain record or unselects. Thus we decided to store JSON-text in public variable $$JSON.
      STEP1
      From the beginning we need to initialize JSON-text as it is not empty in initial state, it looks as : “{}”.   
      We can do it once in the script, prenex user’s work with recordset.  At this script item will appear : Set Variable [$$JSON; “{}”].
      But we can dispence with preliminary script. For example, we can perform such check each time,  user push the botton to  “select” record.
      The check will look so:
      If (IsEmpty ($$JSON);"{}";$$JSON)
      Later identifier value of current record can be accounted and memorized in variable $id_record.
      Set Variable [$id_record; GetLayoutObjectAttribute ("id";"content")]
      In order to item in script worked with using function GetLayoutObjectAttribute,  It is needed to place object on layout, displayed ID item, and name “id”.
      STEP2
      Then you make sure existence of tandem in
      JSON-text, whose name of key corresponds to identifier. If current record has identifier  5, we have to find tandem “5”:true. Here we use function JSONGetElement
      JSONGetElement($$JSON; $id_record)
      STEP3
      As such tandem doesn’t take place in our example, function returns  “empty”. It means this tandem needs to be added to JSON-text by function JSONSetElement
      JSONSetElement ($$JSON; $id_record), результатом будет запись в $$JSON: “{"1":true,"3":true,"4":true, "5":true}”
      If JSONGetElement($$JSON; $id_record) returns 1, it means that in text record is already considered. We need to do back action,- delete tandem from JSON by function
      JSONDeleteElement
      JSONDeleteElement($$JSON; $id_record),  if
      $id_record was equal to 3, so tandem  "3":true,"  would be deleted and we would get:
      “{"1":true,"3":true,"4":true}”
      Thus , efforts are being made to fix and regulate chosen item in case of using JSON-function – minimum.
      Let us draw our conclusion. For implementation of this task we need:
      To create JSON-text in public variable $$JSON To check using function JSONGetElement, if value from  $id_record took place in $$JSON. If it there isn’t , needed value  from $id_record  should be added in $$JSON  using JSONSetElement If record  should be deleted from $$JSON, we use  JSONDeleteElement. Script "CheckButton" from MS.fmp12
      #Write the current value of the object named id Set Variable [ $record_id; Value:GetLayoutObjectAttribute ( "id";"content" ) ] #check if there is a JSON variable Set Variable [ $$MULTISELECT_LIST; Value:If (IsEmpty ($$MULTISELECT_LIST);"{}"; $$MULTISELECT_LIST ) ] #switch if the variable is empty then write, otherwise delete If [ JSONGetElement ( $$MULTISELECT_LIST;$record_id)] Set Variable [ $$MULTISELECT_LIST; Value: JSONDeleteElement ( $$MULTISELECT_LIST;$record_id )] Else Set Variable [ $$MULTISELECT_LIST; Value: JSONSetElement ( $$MULTISELECT_LIST;$record_id; 1; JSONBoolean) ] End If #refresh checkboxes Refresh Window Refresh Object [ Object Name: "checkbox" ] Download file MS.fmp12
      Invest in the development of our project
      We are ready to help in your development projects. Contact us and we will try to help you: artidog@gmail.com
      MS.fmp12
    • By eXcelisys
      Hierarchical JSON Viewer / Editor
      By Andy Persons & Doug West
      One of the standout new features of FileMaker Pro 16 is native support for the JSON data-interchange format. In addition to providing easy integration with a host of online services, it also provides developers with the tools to create robust hierarchical structures for use entirely within FileMaker. This hierarchical JSON viewer / editor file provides some tools for visualizing, manipulating, and leveraging JSON text.
      Features
      Automatically creates a representation of any JSON text as a hierarchical portal of records, where individual elements can be expanded and collapsed Dynamically replicates changes to the hierarchical records in the JSON text, including add, edit, and delete actions Highlights the corresponding JSON element when a record is selected Applications
      Easily visualize large JSON text, collapsing nodes to focus on just the relevant sections. Manipulate JSON without needing to worry about the correct syntax Convert JSON returned from a web service directly into usable Filemaker records, customizing it to your needs Create and store hierarchical structures entirely in text (such as global variables), and display it as hierarchical records on the fly How it Works
      When JSON text is initially entered, the “JSON – Create Children” script retrieves the root keys using  JSONListKeys(), loops through the result, and creates the root records. When an element is eXpanded, the same script creates its child records if they don’t eXist and eXpands the hierarchy. When eXpand All is clicked, a similar script “JSON – Create All Descendants” loops through every element recursively and creates all descendants. Values for each record are retrieved and set using JSONGetElement(). To keep things streamlined, JSON key paths are used for the parent-child keys. Records are marked as arrays based on the presence of a left bracket (“[“) and formatted accordingly. Since JSONFormatElements() imposes a standard format, elements have a predictable number of leading and trailing lines. These are recorded in lines_leading and lines_trailing, respectively. They are then used in the Highlight Element script to calculate which part of the JSON text should be highlighted when an element record is clicked. Enjoy!
      •• Download - JSONViewer.fmp12 ••

      **This article is provided for free and as-is, use, enjoy, learn, and experiment at your own risk – but have fun! eXcelisys does not offer any free support or free assistance with any of the contents of this blog post. If you would like help or assistance, please consider retaining eXcelisys’ FileMaker Pro consulting & development services.
      About eXcelisys, Inc.: Founded in 2001, eXcelisys (www.excelisys.com)is an FBA Platinum Partner and FileMaker Certified developer organization. eXcelisys specializes in designing, developing, customizing, supporting, consulting, migrating, upgrading, fixing, and integrating of database solutions for Desktop, Mobile, and Web applications. Our core technology competencies are FileMaker Pro, FileMaker Go, and MySQL for database frameworks, along with FileMaker WebDirect, WordPress, MySQL, PHP, CodeIgniter, PostgreSQL, Joomla, Drupal, Magento, CSS, HTML5, and Javascript for web sites and web applications. Aside from providing eXcellent customer service, our goals are to use these technologies to intuitively automate your organization’s data solution needs seamlessly and flawlessly across the web, mobile, and desktop platforms. Contact eXcelisys today for a free estimate and consultation about making your business more efficient through intuitive and effective software automation. 866-592-9235.
      eXcelisys, Inc. is an independent entity and this web site/information/blog post has not been authorized, sponsored, or otherwise affiliated with FileMaker, Inc. FileMaker is a trademark of FileMaker, Inc., registered in the U.S. and other countries.
    • By RyanESmith7
      I am getting a JSON response back from the UPS API that returns the shipping label in GIF format. I would love to display that as an image (and even print it), but none of the decode functions seem to do the right thing. Here is the JSON:
      (note the key for the GIF is ShipmentResponse.ShipmentResults.PackageResults.ShippingLabel.GraphicImage
      How do I get that GIF to display as an image in FileMaker?
      Thanks,
      Ryan
      {"ShipmentResponse":{"Response":{"ResponseStatus":{"Code":"1", "Description":"Success"}, "TransactionReference":""}, "ShipmentResults":{"ShipmentCharges":{"TransportationCharges":{"CurrencyCode":"USD", "MonetaryValue":"112.19"}, "ServiceOptionsCharges":{"CurrencyCode":"USD", "MonetaryValue":"0.00"}, "TotalCharges":{"CurrencyCode":"USD", "MonetaryValue":"112.19"}}, "NegotiatedRateCharges":{"TotalCharge":{"CurrencyCode":"USD", "MonetaryValue":"111.07"}}, "BillingWeight":{"UnitOfMeasurement":{"Code":"LBS", "Description":"Pounds"}, "Weight":"10.0"}, "ShipmentIdentificationNumber":"1Z22VA000197219429", "PackageResults":{"TrackingNumber":"1Z22VA000197219429", "ServiceOptionsCharges":{"CurrencyCode":"USD", "MonetaryValue":"0.00"}, "ShippingLabel":{"ImageFormat":{"Code":"GIF", "Description":"GIF"}, "GraphicImage":"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", "HTMLImage":"PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAzLjIvL0VOIj4KPGh0bWw+PGhlYWQ+PHRpdGxlPgpWaWV3L1ByaW50IExhYmVsPC90aXRsZT48L2hlYWQ+PHN0eWxlPgogICAgLnNtYWxsX3RleHQge2ZvbnQtc2l6ZTogODAlO30KICAgIC5sYXJnZV90ZXh0IHtmb250LXNpemU6IDExNSU7fQo8L3N0eWxlPgo8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIj4KPGRpdiBjbGFzcz0iaW5zdHJ1Y3Rpb25zLWRpdiI+Cjx0YWJsZSBjbGFzcz0iaW5zdHJ1Y3Rpb25zLXRhYmxlIiBuYW1lYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI2MDAiPjx0cj4KPHRkIGhlaWdodD0iNDEwIiBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgo8QiBjbGFzcz0ibGFyZ2VfdGV4dCI+Vmlldy9QcmludCBMYWJlbDwvQj4KJm5ic3A7PGJyPgombmJzcDs8YnI+CjxvbCBjbGFzcz0ic21hbGxfdGV4dCI+IDxsaT48Yj5QcmludCB0aGUgbGFiZWw6PC9iPiAmbmJzcDsKU2VsZWN0IFByaW50IGZyb20gdGhlIEZpbGUgbWVudSBpbiB0aGlzIGJyb3dzZXIgd2luZG93IHRvIHByaW50IHRoZSBsYWJlbCBiZWxvdy48YnI+PGJyPjxsaT48Yj4KRm9sZCB0aGUgcHJpbnRlZCBsYWJlbCBhdCB0aGUgZG90dGVkIGxpbmUuPC9iPiAmbmJzcDsKUGxhY2UgdGhlIGxhYmVsIGluIGEgVVBTIFNoaXBwaW5nIFBvdWNoLiBJZiB5b3UgZG8gbm90IGhhdmUgYSBwb3VjaCwgYWZmaXggdGhlIGZvbGRlZCBsYWJlbCB1c2luZyBjbGVhciBwbGFzdGljIHNoaXBwaW5nIHRhcGUgb3ZlciB0aGUgZW50aXJlIGxhYmVsLjxicj48YnI+PGxpPjxiPkdFVFRJTkcgWU9VUiBTSElQTUVOVCBUTyBVUFM8L2I+PGJyPgo8Yj5DdXN0b21lcnMgd2l0aCBhIERhaWx5IFBpY2t1cDwvYj48dWw+PGxpPgpZb3VyIGRyaXZlciB3aWxsIHBpY2t1cCB5b3VyIHNoaXBtZW50KHMpIGFzIHVzdWFsLiA8L3VsPgogPGJyPiAKPGI+Q3VzdG9tZXJzIHdpdGhvdXQgYSBEYWlseSBQaWNrdXA8L2I+PHVsPjxsaT5UYWtlIHRoaXMgcGFja2FnZSB0byBhbnkgbG9jYXRpb24gb2YgVGhlIFVQUyBTdG9yZcKuLCBVUFMgRHJvcCBCb3gsIFVQUyBDdXN0b21lciBDZW50ZXIsIFVQUyBBbGxpYW5jZXMgKE9mZmljZSBEZXBvdMKuIG9yIFN0YXBsZXPCrikgb3IgQXV0aG9yaXplZCBTaGlwcGluZyBPdXRsZXQgbmVhciB5b3Ugb3IgdmlzaXQgPGEgaHJlZj0iaHR0cDovL3d3dy51cHMuY29tL2NvbnRlbnQvdXMvZW4vaW5kZXguanN4Ij53d3cudXBzLmNvbS9jb250ZW50L3VzL2VuL2luZGV4LmpzeDwvYT4gYW5kIHNlbGVjdCBEcm9wIE9mZi48bGk+CkFpciBzaGlwbWVudHMgKGluY2x1ZGluZyBXb3JsZHdpZGUgRXhwcmVzcyBhbmQgRXhwZWRpdGVkKSBjYW4gYmUgcGlja2VkIHVwIG9yIGRyb3BwZWQgb2ZmLiBUbyBzY2hlZHVsZSBhIHBpY2t1cCwgb3IgdG8gZmluZCBhIGRyb3Atb2ZmIGxvY2F0aW9uLCBzZWxlY3QgdGhlIFBpY2t1cCBvciBEcm9wLW9mZiBpY29uIGZyb20gdGhlIFVQUyB0b29sIGJhci4gIDwvdWw+PC9vbD48L3RkPjwvdHI+PC90YWJsZT48dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI2MDAiPgo8dHI+Cjx0ZCBjbGFzcz0ic21hbGxfdGV4dCIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KJm5ic3A7Jm5ic3A7Jm5ic3A7CjxhIG5hbWU9ImZvbGRIZXJlIj5GT0xEIEhFUkU8L2E+PC90ZD4KPC90cj4KPHRyPgo8dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48aHI+CjwvdGQ+CjwvdHI+CjwvdGFibGU+Cgo8dGFibGU+Cjx0cj4KPHRkIGhlaWdodD0iMTAiPiZuYnNwOwo8L3RkPgo8L3RyPgo8L3RhYmxlPgoKPC9kaXY+Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjY1MCIgPjx0cj4KPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+CjxJTUcgU1JDPSIuL2xhYmVsMVoyMlZBMDAwMTk3MjE5NDI5LmdpZiIgaGVpZ2h0PSIzOTIiIHdpZHRoPSI2NTEiPgo8L3RkPgo8L3RyPjwvdGFibGU+CjwvYm9keT4KPC9odG1sPgo="}}}}}
      ups_response_json.txt
    • By Ronji
      Hi Guys

      Thank you to Richard Carlton for his video on integrating Zippapotamus with Filemaker and the zipcode lookup. In Australia you can have multiple cities for a zipcode and the parsing code is pulling out the first entry and I would like to populated a value list if more than 1 is returned?
      A scriptParameter is sending this: "place name"  &¶& $JSONdata
      to:
      Let (     ~startPosition = Position ( $JSONdata ; Quote ( $valueName ) ; 1 ; 1 ) + Length ( $valueName ) + 1 ;     Middle ( $JSONdata ; ~startPosition ; Position ( $JSONdata ; "\"" ; ~startPosition ; 1 ) - ~startPosition ) )
      Here is the JSON data

      {"post code": "4220", "country": "Australia", "country abbreviation": "AU", "places": [{"place name": "Burleigh Heads", "longitude": "153.45", "state": "Queensland", "state abbreviation": "QLD", "latitude": "-28.1"}, {"place name": "Burleigh Waters", "longitude": "153.4341", "state": "Queensland", "state abbreviation": "QLD", "latitude": "-28.0895"}, {"place name": "Burleigh Town", "longitude": "153.4341", "state": "Queensland", "state abbreviation": "QLD", "latitude": "-28.0895"}, {"place name": "Miami", "longitude": "153.4341", "state": "Queensland", "state abbreviation": "QLD", "latitude": "-28.0895"}]}
      Only the first "Place name" is being returned. Thank you in advance. Ron
    • By Richard Carlton
      Setting Tax Rates in FM Starting Point | FMSP Videos | FileMaker 16 101 Training
      https://www.youtube.com/watch?v=uuV9jKW0TH8
      Most Recent Upload https://goo.gl/Dbn9fm
      Get up to speed with the FileMaker Pro 16 Video Training Course! 
      Top Rated Course by FileMaker Expert, Richard Carlton.  
      http://learningfilemaker.com/fmpro16.php
      Experience Richard's dynamic and exciting teaching format, while learning both basic, intermediate, and advanced FileMaker development skills. With 26 years of FileMaker experience and a long time speaker at FileMaker's Developer Conference, Richard will teach you all the ins and outs of building FileMaker Solutions.  
      The course is 50 hours of video content!
      Richard has been involved with the FileMaker platform since 1990 and has grown RCC into one of the largest top tier FileMaker consultancies worldwide. 
      Richard works closely with RCC's staff: a team of 28 FileMaker developers and supporting web designers. 
      He has offices in California, Nevada, and Texas.

      Richard has been a frequent speaker at the FileMaker Developers Conference on a variety of topics involving FileMaker for Startups and Entrepreneurs, and client-server integration.

      Richard is the Product Manager for FM Starting Point, the popular and most downloaded free FileMaker CRM Starter Solution.
      Looking for FM Starting Point free software download: http://www.fmstartingpoint.com
      Richard won 2015 Excellence Award from FileMaker Inc (Apple Inc) for outstanding video and product creation, leading to business development.

      RCC, Filemaker Videos, and LearningFileMaker.com are headquartered in Santa Clara, CA.
      http://www.rcconsulting.com/
      Please feel free to contact us at support@rcconsulting.com
      FileMaker Pro is simply a powerful software used to create custom apps that work seamlessly across iPad, iPhone, Windows, Mac, and the web
      Transform your business with the FileMaker Platform
      Free FileMaker Training Videos Channel https://www.youtube.com/user/FileMakerVideos
      50 Hour FileMaker Pro 16 Video Training Course-FileMaker 16 News-Online FileMaker 16 Training Videos
      https://www.youtube.com/watch?v=KpQqLLDcZ8I
      Playlist https://www.youtube.com/watch?v=KpQqLLDcZ8I&list=PLjTvUZtwtgBTMCfjM6LLwBAwGf_yXfvd_&index=13
      Top 10 New Features in FileMaker 16-FileMaker 16 News-FileMaker 16 Instructional Videos-FileMaker 16
      https://www.youtube.com/watch?v=urh8iHOCxkg
      Playlist https://www.youtube.com/watch?v=urh8iHOCxkg&t=130s&index=1&list=PLjTvUZtwtgBTMCfjM6LLwBAwGf_yXfvd_
      Sharing your Database with Other Devices and Users-FileMaker 16 News-FileMaker 16 Database Sharing
      https://www.youtube.com/watch?v=GF82vkYtCtA
      Playlist https://www.youtube.com/watch?v=GF82vkYtCtA&index=8&list=PLjTvUZtwtgBTMCfjM6LLwBAwGf_yXfvd_
      Introduction to FileMaker WebDirect 16-FileMaker 16 News-Online FileMaker 16 Training Videos
      https://www.youtube.com/watch?v=uaZKIpBjMAM
      Playlist https://www.youtube.com/watch?v=uaZKIpBjMAM&list=PLjTvUZtwtgBSVV1-4pFG4SHAhCIP3Yy-I&index=17&t=10s
      FileMaker Behavior Change-Go To Object-FileMaker 16 Video Training-FileMaker 16 News-FileMaker Video
      https://www.youtube.com/watch?v=MFwFjZem3AM
      Playlist https://www.youtube.com/watch?v=MFwFjZem3AM&index=15&list=PLjTvUZtwtgBQVDIUvoRkcvrMLi7sTZmj5
      A database management system (DBMS) is a computer software application that interacts with the user, other applications, and the database itself to capture and analyze data
       
      Official site provides the SDK, Developer's Guide, Reference, and Android Market for the open source project
      http://learningfilemaker.com/FIAS.html
      Video introduction to iOS App Training https://www.youtube.com/watch?v=cVxQe_yAshw
      Free FileMaker videos check out ...http://www.filemakervideos.com
      Download the FileMaker Pro 16 & FileMaker GO 16 for mobile devices training videos at http://www.learningfilemaker.com
      Download FileMaker Go 16 video training at http://learningfilemaker.com/FMGO-16/fmgo16.php
      Download FileMaker 16 Full Video Training Bundle at http://learningfilemaker.com/subscription.php
      FileMaker Video Training Review-FileMaker 16 Video Course Review-FileMaker Pro 16 101 Course Review
      https://www.youtube.com/watch?v=mF6Uor0KmKo
      Playlist https://www.youtube.com/watch?v=mF6Uor0KmKo&list=PLjTvUZtwtgBT8tNHuzF6cOKC_37zCTQl6&index=18
      Use FileMaker to create an app with the FileMaker Training Series
      FileMaker Pro is a cross-platform relational database application from FileMaker Inc.
      Please Comment, Like & Share Our Videos.
      Feel Free to Embed any of Our Videos on Your Blog or Website.
      Follow Us on Your Favorite Social Media
      https://www.facebook.com/FileMakerVideos
      https://twitter.com/filemakervideos
      https://plus.google.com/+FileMakerVideos/videos
      #WhatisFileMaker16
      #FileMakerPro16Training
      #FileMaker16VideoTutorial
      #FileMakerPro16Videos
      https://www.youtube.com/watch?v=uuV9jKW0TH8&index=53&list=PLjTvUZtwtgBTMCfjM6LLwBAwGf_yXfvd_
      http://feeds.feedburner.com/SettingTaxRatesInFmStartingPointFmspVideosFilemaker16101Training
×

Important Information

By using this site, you agree to our Terms of Use.