6 Replies Latest reply on May 14, 2015 8:40 AM by giosbob

    How to Automatically Reset Database to Initial State After Timed Interval of No Use?

    giosbob

      Hi,

       

      I've created a database that is going to run in kiosk mode for non-admin accounts and I have a script that runs when the file is opened that finds specified records, sorts them, goes to a specified layout, etc. Is there a function or script available that would let me run that same script after a predetermined period of inactivity, for example, the database would reset to its initial state (essentially run the open file script I created) if there have not been any keystrokes or clicks in the last 5 minutes?

       

      I've looked at the Install OnTimer script -- and do use it elsewhere in the database to set some variables and move from one screen to another after a set amount of time -- but I don't know if that is the right way to do it.

       

      Any thoughts or hints would be appreciated.

       

      Thanks,

       

      -Robert.

        • 1. Re: How to Automatically Reset Database to Initial State After Timed Interval of No Use?
          matthew_odell

          Hi Robert,

           

          Install OnTimer Script is definitely the script step you would want to use, but you'll need help from other script triggers, like OnLayoutEnter/Exit, OnLayoutKeystroke, OnObjectEnter/Exit, etc. Basically Install OnTimer Script will run a script in a number of seconds, but any time you set it for a window, it will override the old setting. So the simplest way would be to have a single script that does something like:

           

          Install OnTimer Script [ "On Open Script" ; Interval: 300 //5 minutes ]

           

          The basically have all of those triggers call that script. This will continually push the timer out 5 minutes from the last time they did something. The toughest part here though is deciding what constitutes "doing something", and which triggers will do that for you. My initial thought is using OnLayoutKeystroke to see if they're typing anything. If the kiosk is going between multiple layouts, have it OnLayoutEnter or Exit. Possibly OnObjectEnter/Exit if they're tabbing between fields. Possibly call this script anytime they click a button also. You'll have to play around with this a bit to find everything that works for your solution.

           

          Hope that helps.

          • 2. Re: How to Automatically Reset Database to Initial State After Timed Interval of No Use?
            Datagrace

            Matt, how can you capture on-click? You can capture it for fields, but OnLayoutEnter doesn't capture a non-directed click. Sounds like Robert wants to know if the user's home or if they've gone to lunch. I thought along the same lines-- starting the time and re-starting it with any event, but I can't see how to capture all events.

             

            Worse would be if he wants to capture mouse movement for an area or object, i.e., onEnter/onLeave; we just don't have that. Closest is hover, but we don't have hover triggers, only formatting.

             

            John

            • 3. Re: How to Automatically Reset Database to Initial State After Timed Interval of No Use?
              matthew_odell

              Hey John,

               

              Most of the time someone is clicking, they are clicking on something specifically, right? They're clicking into a field, or clicking out to commit, or clicking on a button (or switching tab/slide control panels, etc...). In this case the only clicking we would be missing is blindly tapping on anything that's not a button or field.

               

              I was assuming that since it's a kiosk solution, you're probably taking someone through a process, and that they're doing a lot of clicking into specific fields, typing, or clicking buttons. This solution would work pretty well for that.

               

              It probably wouldn't work well (or would need a lot of dev time) if it was on a large solution with a lot of objects on a single layout, or in a solution where you're giving someone a lot of freedom to use FileMaker menus and the status toolbar, though even those can be controlled if necessary.

              • 4. Re: How to Automatically Reset Database to Initial State After Timed Interval of No Use?
                electon

                Not sure if this will help but if the solution is run on a server you can set up an option for a privilege set to "disconnect users when idle" with a specific timeout. This however will force close the file which will have to be reopened again manually. I'd try and play around with onlastwindow close to see if this will trigger so you can restore the session. Otherwise there are tricks like putting a transparent object over the layout and triggering off the tooltip calculation to run a script via a plugin like the free BaseElements. ttkes some playing around to get it right.

                • 5. Re: How to Automatically Reset Database to Initial State After Timed Interval of No Use?
                  Datagrace

                  Fair point that a kiosk user is likely going to be clicking from point to point. Sounds like it's up to the OP to know whether or not this gives him enough coverage.

                   

                  Just noticed a typo in my earlier reply; I left the 'r' off 'timer'.

                  • 6. Re: How to Automatically Reset Database to Initial State After Timed Interval of No Use?
                    giosbob

                    The kiosk is a fairly simple runtime solution on a touch screen (Windows based, not iOS) and contains only a handful of records and a couple of navigation buttons. (It's a screen based label for a museum exhibition. The original artifact data was compiled in FileMaker and this is an easy and inexpensive way to port the information to the gallery floor.) Everything happens in a single layout. I think it would be fair to assume that if the navigation buttons have not been tapped in 5 minutes then the user has moved on. (There isn't 5 minutes worth of information on the screen, even if you read really really slowly.) I must admit that when I first started to think about this, I was trying to figure out some sort of timer that would reset itself after every click/tap; however, just monitoring the two navigation buttons (previous & next) is sufficient, and more importantly, I think I can figure it out!

                     

                    Thank you all for your input, I really needed someone to point me in the right direction and thinking about click/taps on some discrete component of the layout rather than trying to monitor everything is just the thing. Now... comes the execution. I may be back, but in the meantime, thank you again.

                     

                    -Robert.