Jump to content


  • Content Count

  • Joined

  • Last visited

Community Reputation

0 Neutral

About dual_mon

  • Rank
    Cat Lover
  • Birthday 12/09/1970

Profile Information

  • Title
    Director of Engineering
  • Industry
    Software Consulting
  • Gender
  • Location
    Los Angeles

FileMaker Experience

  • Skill Level
  • FM Application

Platform Environment

  • OS Platform
  • OS Version

FileMaker Partner

  • Certification
  • Membership
    FIleMaker Platinum Member

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Which JavaScript libraries would you like to see Bundled for Carafe/WS that aren't already available? Please feel free to add your own and upvote any you agree with. You can also suggest Bundles that have implementations with alternate implementations suggested.
  2. dual_mon


    Thanks to FMForums for providing a dedicated place to discuss topics related JavaScript WebViewer integration. This is a new and exciting specialization for FileMaker and JavaScript developers. I look forward to seeing this community grow. Jeremiah
  3. I think comment hovers six inches off the floor. He probably thought that up while he was making himself a sandwich.
  4. Okay, sorry for the long delay. (been a busy month!) Hope you can still use the advice. Since you already understand the concept of a self join to find duplicates, you are half way there. What I am suggesting is that you make a self join relationship using the three letter text field as the key field. This will return the set of all records that have the same three letter prefix. Once you have established this set of records, it is then possible to calculate the maximum value of the number field using the calculation Max ( field ) + 1. What Max of the self join does is return the highest value in the number field of all the records that share the same three letter prefix. If you simply add one to that value, you are ensured a unique value.
  5. Okay, setting the issue of *why* aside, I don't think I would handle this with a CF. I would consider building the desired result as a concatenation made up of a text field populated from the first three characters of the name (except "the" etc as the case may be), and a number field that you store in the record which is populated with the max + 1 based on a self join by the text field. Of course exactly what triggers the max + 1 would be contingent on your business rules. While an auto enter calc is one option, it would be most robust IMHO if the field were poplated by a script which would give you all kinds of validation options and control of error handling. Also, if the code is built from these two "source" fields by a script, you can store them all and not worry about any performance hits that you might have if they were live calc fields. Note that if you decide to allow users to "refresh" the code by running the script again, the script should clear the number field before recalculating max + 1. Does that make sense, or should I explain in more detail?
  6. Okay, first of all... WHY!!! Second of all... You could do this in a number of ways. One way that comes to mind is to sort by the client number and then loop through the records starting with the lowest number, testing each one to see if it equals the previous client number + 1. When you find a gap or reach the end, use that number. Third of all... Please use a subject line that is informative about what the thread is about. Subject: HELP!!! is very bad netiquette.
  7. You might also consider adding a Boolean attribute to your parent records which bestows template status on a record, allowing you to filter it out in finds and so forth. You can also use conditional record level access in your privilege sets to determine who is alowed to create and modify templates. This technique eliminates the need for a parallel template infrastructure. PS If you have an Advisor subscription, you can check out this article that I wrote on duplicating hierarchies. http://filemakeradvisor.com/doc/16095
  8. First of all, congratulations. This looks like a real eye-crosser. A few comments: You may have caught on to my preference for not exposing "utility" parameters. Recursive_Create_Folder ( start; stop; DrivePath; Save Path; Fpath; OS; FL_Name ) is just too confusing. I would pare it down to this for the "exposed" function: TrFilePath ( FileName ; SrcPath ; DstDrive ; DstPath ) Or better yet: TrFilePath ( FileName ; SrcPath ; DstPath ) Notice that I renamed the parameters that I kept to be more explicit about what input is needed. Second, I got rid of the counters, as they could be religated to a sub-function, or piggybacked if you really want to get insane. Third I got rid of the OS parameter, because I would just use Get ( SystemPlatform ) inside the function for this. Lastly, as you are requiring that the source disk be included as part of the source path, why not include the destination disk as part of the destination path? Lastly, why the huge function name? I picked something both more terse and descriptive. I'm not sure I totally get your objective here (is it to recreate the directory structure?), but I think you can still see my points with regard to simplifying and standardizing your parameter nomenclature. Last comment: You can markup your CF with actual comments that make it cut/pasteable. Example: Let ([ a = DrivePath; //Get DrivePath (Disk Name) b = Save Path; //Get SavePath c = Fpath; //Path to the file d = Substitute ( c ; a ; "" ); //Remove the disk name, and replace it with the name of the folder to save into <etc> ... or you could use this style: Let ([ a = DrivePath; /*Get DrivePath (Disk Name)*/ b = Save Path; /*Get SavePath*/ c = Fpath; /*Path to the file*/ d = Substitute ( c ; a ; "" ); /*Remove the disk name, and replace it with the name of the folder to save into*/ <etc> Either method of commenting your CF can be kept inline with the real code, and is highly recommended.
  9. I agree with BobWeaver. Here are the relevant definitions from dictionary.com. en
  10. This is a nifty utility. For those interested in color palette managment without a plugin, you can also try this FileMaker utility that is available free and unlocked for download from my website. Title: Palette Maker v2.2 Platform: Mac/Win Category: FM Utility PaletteMakerV22.fp7.zip 188KB Min Requirements: FileMaker 7.x Description: With Palette Maker you can define (and store) custom color palettes. Easily enter and retrieve colors in Hex and RGB. Requires no plug ins. This utility is particularly useful in FileMaker for Windows, where the built-in custom colors are lost between sessions. To make it easier to key in your custom colors to the Windows custom palette, the utility opens your colors in Palette Maker in small popup windows cascaded down the right edge of your screen. The popup windows are titled with the Color Name and RGB value. This allows you to have the color specs easily visible when the FM custom color dialog is open.
  11. Actually, I do not have the higher math (I will have to wait until I see my wife at home this evening so she can school me on the math to figure the exact numbers), however, I do believe that your instincts were correct about the non-linear increase in the number of function calls with the double nested version. After you asserted the n^2 increase, I did some quick Empiracal tests, as I alluded in my first reply by continually feeding it more values. As I mentioned, the function *does* seem to eat itself (hit the recursion limit) when you feed it somewhere between 10 and 20 values, depending on how many are matches. Either it is hitting the limit, or there is some other problem, because what happens, is it returns a "?" after a noticable delay while the processor spikes. However, I came up with this simple modification on the same structure that adds zero additional calls. Check it out: MatchPrefixAll ( List ; Prefix ) Case ( not IsEmpty ( List ) and not IsEmpty ( Prefix ) ; Let ( newlist = MatchPrefixAll ( MiddleValues ( List ; 2 ; ValueCount ( List ) - 1 ) ; Prefix ) ; Case ( Left ( List ; Length ( Prefix ) ) = Prefix ; If ( ValueCount ( newlist ) > 0 ; LeftValues ( List ; 1 ) ; Substitute ( LeftValues ( List ; 1 ) ; "
  12. This is true, however, I can't think of a way to do it, barring external handling, such as trimming the trailing CR externally by wrapping it in something like this: Substitute ( Right ( MatchPrefixAll ( List ; Prefix ) ; 1 ; "
  13. Sorry to be a grump, especially as I am new to FMForums, but why is this thread in the Custom Functions forum?
  14. I don't believe he has officially announced it yet, but if you add a new function to Brian Dunning's site, you will see that he has added a password field that lets you come back and edit your submissions later. I can only assume that in the process of making this change he changed the fn_ids because absolute links to his CFs no longer return the expected result. Example: http://www.briandunning.com/filemaker-custom-functions/detail.php?fn_id=225 and http://www.briandunning.com/filemaker-custom-functions/detail.php?fn_id=190 lead to a CF by Brian Hightower and a blank function. A little deductive reasoning and the search function on his site leads me to believe that the two functions comment originally referenced above are now: http://www.briandunning.com/filemaker-custom-functions/detail.php?fn_id=203 and http://www.briandunning.com/filemaker-custom-functions/detail.php?fn_id=173 BTW, comment, FMForums *does* have a Profile feature with name fields in it PS, I am going to send Brian an email an let him know that it looks like his id numbers got shifted by minus 22 or some such, so don't change your bookmarks yet.
  15. Okay, so I hate it when people hijack a thread, but since I started it, I guess I can give myself permission... Remember my MatchPrefixAll at the top of this thread that Ender rewrote using the same 'setting aside' technique that you used in your rewrite of DecToHex? (Okay, so Ender and comment have now drilled this simple concept into my thick skull. *******, one less thing I can do the hard way now!) Anyway, I had made an aside that I was looking for a way to have it return it's result list with no trailing CR. Since Brian Dunning just added the ability to edit your CFs on his site, I decided to update it with Ender's better version. As such I put my thinking cap on and figured out a way to rewrite Ender's rewrite with no trailing CR and no external function calls. I settled on using a second recursive call inside each iteration of the primary recursion to count the remaining prefix matches in each new input list. When it comes up with 0, it strips the CR off the value before setting it aside. At first I was worried that this would eat itself, but it works. Check it out: MatchPrefixAll ( List ; Prefix ) Case ( not IsEmpty ( List ) and not IsEmpty ( Prefix ) ; Case ( Left ( List ; Length ( Prefix ) ) = Prefix ; If ( ValueCount ( MatchPrefixAll ( MiddleValues ( List ; 2 ; ValueCount ( List ) - 1 ) ; Prefix ) ) > 0 ; LeftValues ( List ; 1 ) ; Substitute ( LeftValues ( List ; 1 ) ; "
  • Create New...

Important Information

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