OlgerDiekstra

Members
  • Content count

    169
  • Joined

  • Last visited

  • Days Won

    2

OlgerDiekstra last won the day on December 18 2015

OlgerDiekstra had the most liked content!

Community Reputation

8 Neutral

About OlgerDiekstra

  • Rank
    member
  • Birthday

Profile Information

  • Gender
    Male
  • Location
    Gold Coast, Australia

FIleMaker Profile

  • FM Application
    15 Advanced
  • Platform
    Cross Platform
  • Skill Level
    Intermediate
  • Certification
    15
  • Title
    FileMaker Developer

Recent Profile Visitors

5,862 profile views
  1. Nope, custom theme born from enlightened in the app we first noticed it in, a new one being developed from scratch. Other apps we tested briefly were modified enlightened.
  2. We've noticed recently an odd behaviour that we don't recall seeing prior to v15.0.3. Tested on Mac Sierra with FMA v15.0.3. On Win10 with v15.0.2 this doesn't happen, When switching from a list layout to a form layout, the form layout that s being loaded is very briefly loaded in the body part of the list layout before the layout is refreshed and loaded normally. We've been able to reproduce this in various older apps (no change to the app). We've found a temporary solution to prevent the 'flicker' from showing by entering find mode, then switching layout and then going back to browse mode. Has anyone else encountered this?
  3. Especially if you look at the cost of buying and hosting your own server, ie, in Australia you'll easily pay up to $3K for a half decent server, a license for Windows server will also set you back some $1k, and then there's the cost of managing/patching the server, ensuring backups happen, AV protection, networking kit etc that will all cost money. In the end, you'll end up paying more for a self hosted system than a cloud hosted. $120 for 5 users per month isn't such a bad deal. Sure you can run without backups, keep using the server beyond 3 years, and there's a good chance you'll get away with it. But if it's an important server, one that the business depends on to make a profit, would you really want to endanger your company like that? That's the message you need to relay. As of today, the Australian Taxation Office knows only too well what it feels like to no longer have access to an enormous amount of data. 1PB gone. s**t happens. I've been in a similar situation where two 55TB NAS's crashed at the same time. https://www.pedestrian.tv/news/arts-and-culture/an-ato-server-crash-just-erased-1000tb-of-data-so-/c9b261ce-2250-4f4f-b20f-c00c12f9d5cb.htm You can't make money if you're not willing to spend it. Most organizations that engage (FileMaker) devs do so because they see an opportunity to improve efficiency, reduce cost. And yes, they can demand a lower fee, but it's up to the dev to accept such. There's no point in developing an app for someone if it's going to cost you money.
  4. This article: https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Forms/Sending_and_retrieving_form_data does a decent job of explaining the differences between a GET and POST. When a form is POSTed, the parameters are never included in the url. You would only ever specify the script to call. If properly written (at the server side) they should also only retrieve data from a POST, not from a GET. But there might be other functionality that uses this in a similar way on this particular website. This is also why client side data checks/validation is only really useful to minimize data traffic (ie, forms don't get submitted back and forth until the user types the data in the right formats). It's too easy to bypass local validation, so you have to validate every bit of data coming from a client on the server as well.
  5. This seems to work: http://www16.co.hennepin.mn.us/pins/addrresult.jsp?house=1234&street=Main
  6. How would you use the data viewer to debug CF's? You can't step through the various commands using the data viewer that I know. What I do at the moment is use a result var in the CF and add data from variables that I use in the CF as the CF progresses so that I have an idea how data is manipulated or handled. I then populate a Global var with the CF result var as one of the last actions in the CF. That works, but is a little convoluted to setup. For instance I have the following CF: /* GetKeyValue( keylist; key; separator ) keylist = list of keys and values separated by "separator". key = key to look for and to return the value of. separator = the character that separates the key from the value. Usually "=" but can be anything. result in the CF is used to capture debugging information. If the global variable $$Debug is true, then "result" will be copied into $$DebugResult. */ If( Position( keylist; key & separator; 1; 1 ); Let([ result = "Passed parameters:¶keylist: \"" & keylist & "\"¶key: \"" & key & "\"¶separator: \"" & separator & "\"¶"; key = Lower( ";" & key ); keylist = ";" & keylist & ";"; result = result & "¶key: \"" & key & "\"¶keylist: \"" & keylist & "\""; pos = Position( Lower( keylist ); key & separator; 1; 1); keyvalue = Right( keylist; Length( keylist) - Pos ); result = result & "¶position of \";\" leading the key: \"" & pos & "\"¶keyvalue: \"" & keyvalue & "\""; pos = Position( keyvalue; ";"; 1; 1); keyvalue = If( Pos; Left( keyvalue; Pos - 1 ); keyvalue); result = result & "¶position of \";\" following the value: \"" & pos & "\"¶keyvalue: \"" & keyvalue & "\""; pos = Position( keyvalue; separator; 1; 1); value = Right( keyvalue; Length( keyvalue) - Pos ); result = result & "¶value: \"" & value & "\""; $$DebugResult = If( $$Debug; result; "" ) ]; If( not IsEmpty( value ); value; "" ) ) ) I call that CF with a ";" delimited list of keywords/values like "var1=value1;var2=value2;var3=value3" and use the CF to extract the value of the key I'm after. The Global var ends up with the following content: Passed parameters: keylist: "var1=value1;var2=value2;var3=value3" key: "var2" separator: "=" key: ";var2" keylist: ";var1=value1;var2=value2;var3=value3;" position of ";" leading the key: "13" keyvalue: "var2=value2;var3=value3;" position of ";" following the value: "12" keyvalue: "var2=value2" value: "value2" But I don't like the added complexity of all the result lines and was hoping someone would have a better idea.
  7. Hi Guys, I have been looking for an easy way to debug CF's, and stumbled upon CF Explorer, but that was developed for FMv7 and hasn't been updated afaik. The original website isn't there any more. Are there any tools/plugins that can be used to debug CF's? Similar to the standard debugger? Thanks!
  8. Hi Guys, Stumbled onto this (old) article: http://www.databuzz.com.au/an-approach-to-filemaker-server-side-script-debugging uses a case with a single condition: Set Variable [ $serverLogSQL; Case ( $EnableLoggingSQL ; BE_FileMakerSQL ("DELETE FROM ServerLog") ) ] My question, what would be the benefit of using case as opposed to an if statement? Both would look and act pretty similar. Is there a performance difference?
  9. As Wim indicated, it's an expensive convoluted setup for just 8 people. I have a single FM 15 server (Win2k8R2), currently running on it's own hardware (also had it on a ESXi server for a while). We've generally got anywhere between 8-14 people logged on to it. I make nightly (local) backups of the DB, and use 15 minute progressive backups to cover all likely scenario's. Easy to setup and maintain. I copy every nightly backup DB to my NAS where it's stored for a week. I maintain a weekly backup for 4 weeks on the server too. Backups stored on the NAS get backed up to AWS S3 as well. Everyhting is automated so all I do is weekly checks to ensure everything worked as intended. And every now and then I do some restore tests. If the hardware dies, I use either a Win2k8R2 install disk or restore a standard image of a preinstalled Win2k8R2 OS using Clonezilla. Installing FMS is quick and easy and I keep a record and backup of all settings. To mitigate any attacks or malware, I use a strong password and no user ever logs on to the server. Passwords are stored in an encrypted DB (not FM). I have a good firewall with IPS that will keep the casual attacker at bay. I use Observable Networks to keep an eye on what happens on the network. I use Comodo AV on my servers with whitelisting enabled so only known good apps can run. My servers are locked in a server room. I get alerts when things happen that deviate from the baseline. I get regular reports from various systems. It's a boring live and nothing much happens here. :-D But it's not expensive, suits the business and performs well. As for NAS's vs SAN's, that line is blurring every day. The Synology NAS's we have can do iSCSI just the same as old style SAN's (though I don't use it). They're way cheaper though. And there are plenty other NAS's that can do the same. There's even NAS's now that allow you to run VM's in it (not Synology's unfortunately). Our NAS's (we have 3) are used for file storage, that means all images, documents/pdfs and what not are stored on a fileshare, not in the DB. We have some 300,000 customers, so storing relevant documentation in the DB would grow it beyond a manageable size (imho).
  10. I use a variant of the Selector Connector concept as well. Your last comment had me thinking. Afaik unstored calcs can't be used for creating relationships as they can't be indexed. It's a nuisance sometimes but understandable and something we just have to live with. As globals only live on the client, that would imply that creating a relationship using a global means in order for that relationship to be created, the entire table would have to be transferred to the client first? (as in all it's data). Which means it kinda works like a filtered portal? Or does the client submit the global value to the server, and the server creates a temporary client based relationship just for that session/client?
  11. Create logs. Because these are serverside scripts, you can't test it using the debugger. Create a batchfile that outputs all it's output to a logfile (make sure you append and not overwrite each new call to the script) so that you can trace what happened and where it went wrong. Echo information to the logfile like the userdetails and timestamps. Do checks such as whether files or folders exists that are needed. Echo results to the logfile of each test. If you create a folder in the batchfile, test afterwards if it exists, and report the result in the logfile. When invoking recurring scripts (ie every 15 minutes) use a flag (ie a field in a table for the purpose with just one record) to indicate the script is running so that when the next runtime arrives, the script isn't invoked again if it is still running. In your FMS script, if you loop through records and invoke a cmd script for each record, have an option to stop the loop from a client (ie check a field in the same table to see if it is true or false or whatever). BaseElements is generally invoked using a variable and all cmd output that is not send to NUL is captured in that variable. Output from commands in the batchfile is too. You can store that in a FM table as well. I'm running quite a few scripts on the server using BE and have no issues. I do have lots of logfiles. Make sure you clean up those logfiles too after a while (automated), and don't store them on the C: drive.
  12. Personally, I don't like portals where you can add data on a blank line. as you state, that line is always at the end of the portal for one (which isn't necessarily an issue with only a few records) and, more importantly, it's too easy to add unintentional data. I see that happening here all the time and as a result, I end up cleaning constantly. Well, that's what used to happen. I prefer using a popover to edit and add data. Generally I'll create an "add" button which will create a new record, and open a popover using the new record. I have amended the Vehicle Tracker DB which you mentioned and attached it. I use a technique known as "Magic Key" for this https://filemakerhacks.com/2011/07/31/magic-key-and-check-box-reporting to create new records in a different table than associated with the layout, without changing layouts. I agree with LaRetta's comments about the creation fields, however, in the Vehicle Tracker I have taken a shortcut and inverted the sorting of the Maintenance portal (which is done in the relationship). The Vehicle Tracker is missing quite a few standard fields, like ID fields, timestamp creation fields etc. Vehicle Tracker.zip
  13. So more TO's than tables is better? Multiple portals on a layout is not good? Does that mean sorting relationships is something we shouldn't be doing? More CF's is better? Especially in larger solutions? As long as they are used to reduce redundancy in code? It's an interesting list, and I'd like to understand more about the rationale behind it.
  14. I'm not saying it's the best solution or even a great solution, but it can work. In fact, Filemaker suggests (without saying it out loud) it themselves. Have a look in the starter solutions. The Invoices have a customer table where they have a home and office phone number ("office phone" and "mobile phone") and email ("office email" and "home email") with the customer. Same thing. So they're basically telling their novices (who they expect to start with these starter solutions) that this is a solution. It doesn't scale well, but there are situations where that is not such a problem.
  15. I assume because you have multiple codes, an employee can be issued with multiple codes? Some have 1, some have 3, some have 6? In which case you'd create a codes table, and link that to your employee. The relation would be between the employee id in the employee table and an employee id (called the foreign key) in the codes table. You make the codes table visible on your employee layout via a portal. This would be a one-to-many relationship (many codes reference one employee). However, if there are never more than 6 codes, and your employee table isn't expected to grow to millions of records, you could choose to opt for a simpler design and keep the 6 code fields with your employee details. It's a trade off between complexity and storage. But if more codes may be needed in the future, or you want to retain a history of codes, this may not be the best solution.