Leaderboard


Popular Content

Showing most liked content since 05/26/2016 in all areas

  1. 4 likes
    Hi All, I am happy to present the FmDynamix project, including cfCall () and #load (), my new 2 custom functions .... In an interest to further test FileMaker more and more ... I tried to give you a presentation of this new method, as explicit as possible, I hope to have succeeded ! You have the description and the presentation here, and take before the file demo : fmx_FmDynamix_Presentation.fmp12 I hope that this file will give you the urge to see this method, I do not think I have view of similar thing I hope that this "modularity" will please you and will give some ideas, feel free to test and give me your comments ! Thanks for your interest Agnès ( and thank you to Google Translate too )
  2. 4 likes
    Security Vulnerabilities of FileMaker Platform API’s: An Update January 9th 2017 In an April 2016 entry on this BLOG titled The FileMaker Platform API’s Are Your Friends, Right? [http://fmforums.com/blogs/entry/1535-the-filemaker-platform-api’s-are-your-friends-right/] I discussed a number of FileMaker Platform security issues centered on the uncontrolled use of a number of external Application Program Interfaces (API’s). There are at least nine of these API, possibly more, if ExecuteSQL is included. The central thesis of that article was that these API’s provide unexpected attack vectors to compromise FileMaker Platform files. As noted at the time: Many FileMaker developers are not aware, however, that these API’s have the capability to access customer or client solutions in unexpected ways and to extract or insert data, to manipulate business processes developers embedded into these solutions, and to compromise the integrity of these solutions. Unfortunately, in the intervening nine-month time span, we continue to see cases where several of these API have been used for malicious purposes to compromise FileMaker Platform files’ business process integrity, to manipulate data, and to extract data. And many in the developer community remain unaware of this problem. In this BLOG entry, I will describe two of these API’s in greater specificity and detail, including describing a variety of attacks they can facilitate. This article will not discuss the ActiveX API that is available on Windows OS; however, developers should give similar attention to that approach. Developers need to be aware of these items in order to protect their files and those of their clients. The two API at the center of this focus are Apple Events and the FMPURL process. In the earlier article, I noted several elements about these that bear repeating here: [These API] cause particular concern because of their breadth and relative ease of use…. The Apple Events Suite has an extensive set of commands that can read and write data, read metadata, manipulate the UI, and trigger scripts. In addition, they can work outside the normal constraints found on layouts in a file. [http://thefmkb.com/5671] The FMPURL…can open a file and run a script in it. If the file is already open, then the script will still run. [http://thefmkb.com/5560] A few general comments about both of these API’s: · They are not platform-specific in the sense that just because a client organization is an all Windows OS environment that it is immune from an Apple Event attack. It’s the OS of the attacker that controls whether the API can be used. · There are some ways within Privilege Sets to constrain behavior of these API commands when they are applied on a file. The Export privilege bit can control the ability of Apple Events to extract data from a file. The Layout Access privilege bits can also constrain the ability to see contents of a layout. Likewise, Script Access privilege bits can control the availability of a script to either of these API. · These API often perform actions in unexpected fashions that fall outside the normal, traditional, and familiar FileMaker Pro User Interface behavior. This is part of what catches developers by surprise. —Apple Events— When a file is open, whether standalone or hosted by FileMaker Server, an attacker can send Apple Event commands to it causing it to perform a variety of actions, including: · Run any script to which the user has access, irrespective of whether that script is in the list of Scripts or whether it is attached to some UI element, such as a button. · Navigate to any Layout irrespective of whether that Layout’s name is in the list of Layouts or not. If the user’s Privilege Set has access to see that Layout, then its contents are visible whether the developer ever intended for the user to view the Layout or not. · Return various metadata about the file, including such items as Script Names, Value List Items, Layout Names, Field Names, etc. If a user’s Privilege Set does not allow access to the item, its name does not appear in the list returned. · Put data into any field in the database or extract data from any field, irrespective of whether that field is on the active Layout or is on any Layout for that matter. Here are several examples of these scripts, all working on a file named Our_Secret_Information.fmp12. tell application "FileMaker Pro Advanced" activate go to first layout end tell tell application "FileMaker Pro Advanced" activate do script FileMaker script "Relog_as_Admin" end tell tell application "FileMaker Pro Advanced" activate set somevar to name of every layout end tell tell application "FileMaker Pro Advanced" activate set somevar to name of every field end tell tell application "FileMaker Pro Advanced" activate set somevar to get data field "CreditCardNumber" end tell —FMPURL— The FMPURL command’s principal attack vector is that it can be used to run any Script in a file to which a user’s privileges has access. Similar to Apple Events, this occurs irrespective of whether that script is in the list of Scripts or whether it is attached to some UI element, such as a button. If the file is closed, the command first opens the file with supplied credentials, then runs any OnFirstWindowOpen script, and then runs the designated script from the FMPURL command. As a result of this behavior, a Halt Script step at the end of the opening script has the effect of blocking the running of the FMPURL designated script. Some developers have utilized this technique to block FMPURL calls to scripts in a file. However, if the file is already opened or if there is no opening script, then the designated script does run. Here is an example of calling a script, again in our file Our_Secret_Information.fmp12 being hosted at a server at IP address 0.0.0.0. fmp://0.0.0.0/Our_Secret_Information.fmp12?script= Relog_as_Admin —What Is the Significance Of This and How Do We Address This?— One of the many reasons we caution developers against embedding security elements such as Identity and Access Management controls into the data layer of FileMaker Pro databases is precisely because such elements are vulnerable to these API attacks. Think for a minute about that Relog_as_Admin script that presumably relogs into the file with a [Full Access] Account. If an Attacker can trigger that script and cause it to run, irrespective of what the developer might have intended, then the Attacker has full access to the file. This has actually happened. Or, suppose that a developer has made a “Developer_Only” layout in the file, removed it from the list of layouts, and left sensitive information on it. If the Attacker can navigate to that layout, and if it is not protected by settings in the Privilege Set, then the Attacker can learn the contents of the information on it. This has actually happened in numerous instances, including unbelievably, the appearance of [Full Access] level credentials left exposed on the layout! Likewise, suppose that a developer has made a so-called “Privileges Table” with various fields that purport to control whether a user can do such things as create records. Using the Apple Event Set Data command, an Attacker could likely change the values in these fields if they do not enjoy additional protection. More likely even, the Attacker could simply issue a Make New Record command and create the record. That is a process frequently used to thwart developer-imposed limitations on the number of records in a demonstration version of a vertical market solution. So, what can be done to manage this situation and to prevent these type attacks? In FileMaker® Pro 15, FileMaker, Inc. added a new Extended Privilege option in the Privilege Set called fmscriptdisabled. Developers must explicitly invoke this option; it is not a default option. What it does is to prevent Apple Events (Macintosh OS) and ActiveX commands (Windows OS) from activating scripts, just as the name implies. It has no impact on FMPURL or on other Apple Event commands that do not involve triggering of scripts. Some of the other items in a Privilege Set, notably Export and data layer modification elements, can control Get Data and Set Data Apple Events. If Export is disabled, then Get Data will not return data from the selected field. In tables where the editing privileges are restricted, likewise, Set Data will not add data to a field. Creation and deletion privileges behave in similar fashion. Remember, we are talking here only about Apple Events. Other processes may behave differently. Controlling API behavior is important; however, it is not the only security feature that developers must invoke to assure Confidentiality, Availability, and Integrity of their database systems. So, clearly what we need here is a way to block these API from interacting with FileMaker Pro files. FileMaker, Inc. is aware of these issues and has been working on new ways to address them. In the Product Road Map Webinar presented on November 30th 2016, FileMaker, Inc. noted that the next version of the FileMaker Platform will contain a number of additional security enhancements. I am authorized to say that one of those enhancements will be a new process for more closely and granularly controlling several of these API’s. At such time as there is any new version of the FileMaker Platform, I will have additional comments and analyses of the issues related to these API’s.
  3. 3 likes
    Couldn't this be much simpler? AppleScriptSpeak.fmp12
  4. 2 likes
    Hello Everyone, I've written a PowerShell script to allow you to get a free SSL certificate from Let's Encrypt to use with FileMaker Server. You can schedule this to run every few months and renew your certificate automatically. Now there's no reason to keep using that default certificate. Check out the post for instructions! How to Use Let’s Encrypt SSL Certificates with FileMaker Server | Blue Feather - FileMaker Developer, Android, Web EDIT: One compatibility note for everyone - While it looks like it's all compatible with FileMaker Pro 13-15, only FileMaker Go 15 is compatible. FileMaker Go 14 is unable to connect with these certificates installed. I'd recommend using FM Go 15 anyway, but it's something to be aware of if you're still using FM Go 14.
  5. 2 likes

    Version 1.0.0

    28 downloads

    This technique was inspired by @Claus Lavendt in a tweet. Now with offset new card style mode you can now create a tool pallet to interact with a document in preview mode

    Free

  6. 2 likes
    http://www.soliantconsulting.com/blog
  7. 2 likes
    See: http://www.filemaker.com/help/16/fmp/en/#page/FMP_Help%2Fextended-privileges.html%23wwconnect_header (the last item in the table).
  8. 2 likes
    That doesn't actually help the user find the answer to his question, it answers a different one, and there are reasons for wanting this one answered.
  9. 2 likes
    Clearly the file was damaged and in order to make it open FM had to delete large chunks of the corrupted file. In this case that were data blocks. Nothing much that can be done with it. You can try to recover with different versions of FM. You can try to recover on Mac and on Windows. Those are all long shots but you never know. What it really points to is that the file was used in a manner that led to this corruption. Very often that is because of OS-level file sharing, AV scanning,... If you have other FM files in use, carefully scrutenize your deployment to make sure you minimize the risk that other files will get damaged.
  10. 2 likes
    You could write simply: If ( CountryAbbreviated1__lxt = "CA" and ( StateAbbreviated1__lxt = "NU" or StateAbbreviated1__lxt = "NT" or StateAbbreviated1__lxt = "YT" ) ; "Territory" ) Or, if you prefer a shorter version: If ( CountryAbbreviated1__lxt = "CA" and not IsEmpty ( FilterValues ( StateAbbreviated1__lxt ; "NU¶NT¶YT" ) ) ; "Territory" ) I see no good reason to use the Let() function only to rename your fields. I also don't see a good reason to use such gobbledygook field names to begin with. And the numeric suffixes raise a red flag: if you're using numbered fields, you almost certainly have a structural issue.
  11. 2 likes
    Here is a trick I use on popovers, since its difficult to place an object edge to edge on them without activating the scroll bars. select the object set fill to gradation pull the left and right gradation handles tight towards each other
  12. 2 likes
    if you change layouts while in find mode, the OnLayoutEnter will fire. But it has to be enabled for Find mode of course. If you want to trap the user switching modes on the same layout then the OnModeExit will do. OnRecordLoad fires after the Layout change but if you only want to capture the layout or mode change then RecordLoad is overkill since it fires on all record changes. Soliant has a big blog post with a triggers playground demo file that has all possible triggers enabled to make it easy to see the exact firings and sequences.
  13. 2 likes
    One way to do it is with conditional formatting. Based on the results of a calculation, you can change the color of the text to match the layout background; or, you can change the size of the text to a very large number so that it's pushed outside the boundaries of the field or text box.
  14. 2 likes
    One could turn your argument around: suppose you are editing the script, and you want to make a change to the Set Field[] step; you would have to leave the script workspace and look for the calculation field in order to make the change there. I believe that if an action is scripted, it's good practice to place all the necessary logic within the script. And if you divide your scripts into logical parts and take care to comment each part, you should not have to look very hard in order to find what you're looking for.
  15. 2 likes
    You can also use Export Field Contents and skip specifying the field. There are a few more ways as well, such as exporting 0 records using same path file name. All similar principle so it's which you like best. I like Export Field Contents; picked up from Comment, I suspect.
  16. 2 likes
    Yet another option: sort the found records by the DeliveryRemaining field, ascending (or descending) and check the value of the last (or first) record.
  17. 2 likes
    Good points, well-taken; but I can't shake the feeling that you're thinking like salesmen rather than like customers. Many people are "penny wise and pound foolish", whether we like it or not, and I used to make my living getting hired to cater to that and then guiding them to better decisions — but only if their decision to use FileMaker allowed me to get my foot in the door. It's nice if you can say, "Well, I really don't know if I want those people as clients" but I made a decent living off them, once, and now I'm not anymore. I agree FileMaker Cloud is a step in the right direction (taking your calculations at face value - I have a cold right now and can't really think through the figures myself at the moment.) Thinking back to when my clients were mostly small mom & pop businesses and nonprofits (and I was much busier as a consultant than I am today) I'm sure about half of them would have seen your reasoning. But for half of them, the appeal was that they could host FM on the old mac mini they had sitting in the corner and never have to think about it. The conceptual hurdle of dealing with AWS & EC2, for the non-computer-literate clients that it used to seem to me were FileMaker's bread and butter, is much more immense than it is to you and me. For the same reason that clients still insist on onsite visits even after TeamViewer and Skype have made physical presence 99.9% unnecessary, mom & pop operations also aren't going to cotton to offsite virtual servers with complicated administrative interfaces that they have to learn (when they can just barely figure out how to use word.) It makes them feel like they're now dependent on more things outside their control, and they don't like that. I can't imagine selling a virtual-server-based 5-seat-minimum system with monthly licensing to a lot of the people who I used to survive off of. They just wouldn't bite. Even if it was free they'd still think it was too complicated for them, it's too weird and abstract, and they'd be too worried about perpetual dependence on me keeping the server running. Whether it was true or not. The whole point was the FileMaker used to be for people who didn't want to have to become technically-adept computer geeks. AWS is precisely for technically-adept computer geeks, and it's a very beautiful thing for them, but that's who its for. The thing that sucks, to me, is, FileMaker doesn't necessarily have to be one or the other. There can be both a monthly cloud-based licensing model for teams AND a FileMaker-Go-for-desktop-type "thin client". Also, I know I've seen people cringe when I mention the software subscription model. I know it's worth it, and you know it's worth it, but Mr. McGintee whose little heath food store could improve its narrow margins running much more efficiently on on FMP only hears "I want you to keep paying forever and ever for something you used to only have to pay for once". Yes, I know the flaws in that reasoning. But that's what people hear. And I, for one, would really just rather be developing databases than trying to sell Mr. McGintee on whatever licensing model FMI has decided to adopt this year. Sucks dealing with human quirks, but until I can reliably score consulting gigs on planet Vulcan, these are the things we have to think about. If FM could find a way to increase their penetration in the enterprise realm, and I could get steady enough corporate gigs not to miss the small businesses who used to call me all the time, I'd have no complaint. And the funny thing is, I still get a fair number of calls for help from solitary users using one-person databases. It's that small business, the 3-5 person companies that used to be a rich vein for me, are where the demand seems to have completely been hollowed out. I hope to be pleasantly surprised, but I just don't see FileMaker Cloud bringing those kind of people back to the platform. And there used to be a lot of them. I've posted this elsewhere, but look at this Google Trends graph for search interest in FileMaker: Despite vast improvements in the program, interest (as expressed in google searches for information ) has dropped by 50% every 4 years. It's now declined to about 1/10th of its peak. That should scare the bejeezus out of anyone who makes their living this way, and I just don't think that decline was because of lack of a technically abstruse (to non-IT-professionals) monthly cloud-based licensing option. I firmly believe, based solely on my own experience then and now, that 10 years ago there was a huge, solid base of very small, funky business users that just aren't there anymore, and I would really like FMI to try to find a way to get them back. Not a way that sounds good to you or to me, but to THEM, something simple and uncomplicated yet still powerful under the hood (just like FileMaker used to be.) AWS support isn't that, regardless of price. And, again, it doesn't have to come at the expense of other options. They could offer thin clients on the bottom and all kinds of fancy licensing at the top, broaden their appeal on both ends. Oops, looks like I've ranted again. Apologies, I didn't mean to harangue you. But that graph above is what it all comes down to for me, and I find it very frustrating, because FMI's product marketing strategy seems to be alienating a formerly lucrative segment of their former user base, as if they must be sacrificed to attract a new segment - one which isn't proving itself at the same rate. It baffles me. I just think "FileMaker Go For Desktop" is a good step towards getting those lost customers back in the fold.
  18. 2 likes
    There are some nuances worth mentioning here. For example, the default Filemaker find looks for words that begin with the search phrase. Highlighting the search phrase as pattern is more inclusive. Say you searched for "little" and the found record contains "Doctor Doolittle belittled his little friend". Highlighting the pattern "little" will result in "Doctor Doolittle belittled his little friend" - but the first two highlighted occurrences played no part in the search.
  19. 2 likes
    This cannot be done by using find alone. Filemaker will find records that contain something. It will not do calculations or comparisons during the find. Now, there are two ways to accomplish what you want: a slow one, and a fast one: The slow method requires that you find the records that will participate in this (if you want to see the latest revision of all products, then do Show All Records at this stage) and sort them by the field in question, ascending. Then go to the first record and loop: If the product-code part in the current record matches the product-code part of the next record, omit the current record. Otherwise go to next record. Note: if you only want to see the latest revision of a single product, then it can be simpler (and much faster). Find the records of the wanted product, sort them, go to first record and omit multiple records using Get ( FoundCount ) - 1 as the number of records to omit. The fast method would require a structural change. At minimum, you need to split the field in question into two separate fields (that's always good practice, embodied by the maxim "one fact per field") . This would enable you to use the Fast Summaries method and omit an entire group of records (except the last record in the group) at once. You would also have to add a summary field that counts the records. Even better solution would have a table of Products, where each product-code would be unique, and a related table of Revisions. Then you could get the latest revision of each product by using a calculation getting the Max() or Last() revision number. Or show it directly from the Revisions table using a sorted portal/relationship.
  20. 2 likes
    I'll echo the recommendation for the scripted approach - but with a caution about not overdoing the script triggers. Where possible roll the field updates into the normal scripted flow. Script triggers have a tendency to fire even when you really wish they wouldn't and the extra maintenance can be a hassle.
  21. 2 likes
    Okay, then. The first thing that needs to be clear here is this: if you want your report to show every day of the selected month, even if you have no records for that day, you will need a reporting table with 31 permanent records numbered serially and global fields for the month and year to report on. The relationship between this table (Days) and your existing table (Records) will be: Days:cDate ≥ Records::DateAdmitted AND Days::cDate ≤ RecordsDateDismissed where cDate is of course a calculation field = Date ( gMonth ; SerialNumber ; gYear ) Then you can count the related checkbox field in order to get the number of events that should be shown in each day's record. Your reporting script needs to look at gMonth and gYear and omit the appropriate number of records from the report (e.g. the last 3 records if it's February in a non-leap year).
  22. 2 likes
    Hi John, One thing you can do is go to Manage > Themes and duplicate the Classic theme. YOu'll need to also then change all layouts to point to this new theme. You can then modify the new custom theme all you wish. Keep in mind that you may lose some of your fields' formats if you've set them 'outside' of the defined style and have probably even used 'format painter' on many fields (which can greatly impact your layout loads). You will find that a newer theme will lighten your solution's footprint but there might be some cleanup to do. Once done, you should be good to go. Hi Barbara!!
  23. 2 likes
    In a true transaction model you never delete a transaction, you compensate by making another if an adjustment is needed... Think accounting.
  24. 2 likes
    I would start by defining the Recruiting Event field to validate as Unique. Then make your script: Freeze Window Set Variable [$Source; Value: Person::Source] Go to Layout ["RecruitingList" (Recruiting)] Set Error Capture [ On ] New Record/Request Set Field [Recruiting::Recruiting Event; $Source] Commit Records/Requests If [ Get ( LastError ) = 504 ] Revert Record/Request [ No dialog ] End If Go to Layout [original layout]
  25. 2 likes
    Try: Set Variable [ $txt; Value:AnyTable::gTextfield ] # # OUTER LOOP Go to Layout [ “Questions” (Questions) ] Set Variable [ $i; Value:1 ] Loop Exit Loop If [ $i > ValueCount ( $txt ) ] New Record/Request Set Field [ Questions::Question; GetValue ( $txt ; $i ) ] Set Variable [ $qID; Value:Questions::QuestionID ] # # INNER LOOP Go to Layout [ “Options” (Options) ] Loop Set Variable [ $j; Value:$j + 1 ] Exit Loop If [ $j > 5 ] # Set Variable [ $option; Value:GetValue ( $txt ; $i + $j ) ] Set Variable [ $correct; Value:Left ( $option ; 4 ) = "[X] " ] # New Record/Request Set Field [ Options::QuestionID; $qID ] Set Field [ Options::Option; If ( $correct ; Right ( $option ; Length ( $option ) - 4 ) ; $option ) ] Set Field [ Options::IsCorrect; $correct ] End Loop # Go to Layout [ “Questions” (Questions) ] Set Variable [ $i; Value:$i + 7 ] Set Variable [ $j; Value:"" ] End Loop Note that this assumes more than one option can be correct. Otherwise it would be better to store the correct option's ID in the parent question's record.
  26. 2 likes
    I am not aware of any system that can summarize millions of records on demand. The general idea is to denormalize some aspects of the solution. For example, you could pre-summarize the transactions from previous years, and supplement this by a "live" summary of this year's records. Hopefully, the reason why "sadly the stored values occasionally become inaccurate" is not modification of history records - otherwise you will need more help than any human can provide.
  27. 2 likes
    For years, I have used Case() exclusively, because it does everything that If() does and more. In fact, I viewed If() as a legacy function, provided only for backward compatibility. Recently, however, under the influence of other programming languages, I have decided that the better practice is to use Case() only when there are multiple tests. This makes it easier for anyone reading the formula. I've never understood the "I may need to add more tests later" thing; how long does it take to double-click "If" and type "Case" over it? I am not aware of any differences in performance.
  28. 2 likes
    The Brooms they "swap away crazy styling of the text". LOL So if you have copied and pasted some test in from an email or another source...and it has some weird styling... cleaning it can be a pain in the butt. I know this personally. I eat my own dog food. So I put in the broom!!! Yay baby!!! - Richard Carlton
  29. 2 likes
    No, it's not a bug at all. The result of the Round() function is a number. A number does not have trailing (or leading) zeros. If you want to format the number to always display one decimal digit, you can use: Let ( r = Round ( final grade ; 1 ) ; Int ( r ) & SerialIncrement ( ".0" ; 10 * Mod ( r ; 1 ) ) ) which calculates a text result.
  30. 2 likes
    The fields that you need to have in the Attendance table: • StaffID • Branch_Code • Hours_Worked (Number) • Hourly_Rate (Number) • cWage (Calculation = Hours_Worked * Hourly_Rate) • sTotal_Hours (Summary, Total of HoursWorked) • sTotal_Wage (Summary, Total of cWage) Once you have that in place, produce your report using a layout of the Attendance table, with three sub-summary parts: a leading sub-summary when sorted by StaffID; a leading sub-summary when sorted by Branch_Code; a trailing sub-summary when sorted by StaffID; and no body part. Place the staff name field/s from the Staff table In the leading sub-summary by StaffID part. Place the Branch_Code, sTotal_Hours and sTotal_Wage in the sub-summary by Branch_Code part. Place the sTotal_Wage field in the trailing sub-summary by StaffID part. Note: Rates can change over time. This is why you should have an individual Hourly_Rate value for every record in the Attendance table (you would probably look this up from the related record in the Staff table). The way you have described this - calculating a sub-total of hours for each branch and multiplying it by the hourly rate - would produce incorrect result when the rate has changed during the course of the period being reported or since.
  31. 2 likes
    What you are suggesting is often referred to as a 'thin client'. To some extent FMI is trying to address the licensing aspect of this with their FLT (FileMaker Licensing for Teams). Under that licensing you get an FMS and a # of connections that you can consume with either Pro, Go or WebD. Not quite at the 50-100 USD range that you are suggesting, more like closer to 200 per user at that lower range of 5 users. But FMS is part of that. I must admit that I don't really get the "$299 x 4" is big bucks for a small business. The cost is never a standalone factor; it is compared to the value of your solution. Either the solution provides value over and beyond the total cost (your fee + licensing) or it doesn't. The size of the company does not really matter; it is the value that they think they can get out of it. It is not an expense but an investment, calculating the ROI is important before buying any system. Perhaps the conversation would go easier if you present it as a total cost without breaking it down into your fee and "oh, here's an additional cost"? Or help them calculate the ROI?
  32. 2 likes
    I would think that if you issue unique IDs, you would keep track of them. Anyway, if you want to build a "secure" system, you need to learn some basic rules of security first. I don't need to guess. All I need is to read one of your IDs and I can generate close to 500 others that will pass your verification. For example, given your "937N493X814R" I can generate: 919N493X814R 928N493X814R 946N493X814R 955N493X814R 964N493X814R 973N493X814R 982N493X814R 991N493X814R 919N439X814R 919N448X814R .. and so on.
  33. 2 likes
    To select a random number between 1 and 20 (inclusive), use = Int ( Random * 20 ) + 1 Very likely so. Hard to be sure without knowing the purpose (what happens after the selection).
  34. 2 likes
    See if the attached demo helps: GenerateItems.fp7
  35. 2 likes
    Just as an informational point. Our office moved from an older Mac Pro to the new model, and reports were that there was a noticeable drop in overall performance. It simply did not handle the constant bashing of 60 users very well. We are in the process of getting things ready to be deployed on a server grade server running Windows.
  36. 2 likes
    Bruce was not being sarcastic, he was pointing out that you failed to provide us with enough information to help. Lose your anger, we are all volunteers and don’t deserve it. There are many ways to share your script. Here is the Help information on how http://fmhelp.filemaker.com/fmphelp_12/en/html/preview_print.6.6.html Please read this topic by Ocean West Anatomy of a Good Topic
  37. 2 likes
    Hope this link helps https://github.com/timdietrich/fmeasysignature
  38. 2 likes
    For the most part people come to FM Forums seeking advice or assistance. If given a little thought, your topic can really engage the reader to want to assist you in finding the best answer or solution. Step 1: Choose Wisely! By first looking at the topical nature of the forums you can see there are many different forums that cover a wide range of discussions. By way of self-curating the site, try to choose a forum that covers the intent of your topic. We realize that some items cross boundaries and that is ok, just choose a forum that fits the spirit of your topic. If it's wrong a moderator will move it to a forum that best suits the conversation. Step 2: Titles, Names, & Tags Be terse but informative. With your topic title, encourage your reader to want to read your topic. Don't be needy or demanding with "please help" post titles. We realize you've hit a brick wall or may be very frustrated or have a demanding boss. But take a breath - it will be ok. Then compose a topic title that draws them in. Add a tag or two, they will appear next to the topic, it can just be a simple word or phrase that tags the post to some FileMaker-centric topic. Step 3: No Need for Apologies It is not necessary to start your post with an apology to the reader regarding where you are posting or your current understanding of a topic. We are pretty nice here and won't fault you for trying. Step 4: Prerequisite In order for your reader to provide the best response, make sure your profile has been updated with the platform and version of FileMaker that you are using. Otherwise we will assume you are using the most current versions, and the advice given may not work in older versions. If your post is specific to a version / platform / deployment please inform the reader — we don't necessarily need your computer specs, just enough background so that the reader can envision your environment. Step 5: Goals Stating your desired goals, and what you are attempting to achieve in a simple statement will aid the reader as they read further in to the details of your conversation. Step 6: What have you tried? Outline your process and steps you have taken, to get to you the point you are at. It doesn't have to be overly verbose, an essay isn't necessary. Step 7: Format for Emphasis Use the WYSIWYG editor to format text as needed to provide details. You can reference generic terms such as table::field or use your own nomenclature but if the context dictates provide the reader clarity what things may mean if they would not be apparent to someone outside your organization, or industry. this is code from a calculation bullets lists Step 8: Pictures & Sample Files Admit it, you know you miss Show & Tell from kindergarten. Re-live a past life by providing a screen image of your solution. Provide the reader information and context. Use third party tools to draw arrows on your image if needed. Can you send a clone of your solution? - If you do please make sure confidential data is removed, and your boss says it is ok. If you are modifying a commercial version of software that you have purchased — we request that you not do post a clone of these files; as that would be most likely against your terms of service. In that case you can make and post a sample file that recreates the issue you are having. Step 9: A Sense of Humor Keep your sense of humor, and don't forget to smile. The site is visited by members of all skill levels, many are full time developers and consultants and generously volunteer their time and energy to the site. When the occasion calls for it give them your gratitude . A little levity never hurts. Also keep in mind that American English is not everyone's native language -- some things may not translate. If English is not your first language, just do your best. We really appreciate this! It gives us a little spring in our step.
  39. 2 likes
    Stacey Chamblee has a modified FMEASY Signature that is moddified to work on windows. Here is the link if that helps. https://www.dropbox.com/s/p79mjv6g1rnypwn/FMEasySignature-Mac%26Windows.fmp12?dl=0
  40. 1 like
    FileMaker's 'Open' command will work with Excel and text files -- converting them to FileMaker files in the process -- but not PDF. I believe you can fill in PDF forms using Scribe: 360works.com/filemaker-pdf-plugin/
  41. 1 like
    I believe the best strategy for field labels (and perhaps for all language-dependent strings) would be to load some global variables with strings in the selected language, at the time the language is selected. How to store these strings depends on whether the number of languages is constant or not. Note that in v.14 and higher you have the option of placeholder text, which can be calculated.
  42. 1 like
    For clarity, I will be using the names Parent and Child for the two tables. I would suggest you start by identifying which values are missing. This can be done by setting a variable to the following calculation = Let ( existingValues = List ( Child::Category ) ; List ( If ( IsEmpty ( FilterValues ( "MF" ; existingValues ) ) ; "MF" ) ; If ( IsEmpty ( FilterValues ( "BP" ; existingValues ) ) ; "BP" ) ; If ( IsEmpty ( FilterValues ( "CC" ; existingValues ) ) ; "CC" ) ) ) Once you have that, you can go to a layout of the Child table and create a record for each missing value. Here's a complete script for one Parent record: Set Variable [ $missingValues; Value:Let ( existingValues = List ( Child::Category ) ; List ( If ( IsEmpty ( FilterValues ( "MF" ; existingValues ) ) ; "MF" ) ; If ( IsEmpty ( FilterValues ( "BP" ; existingValues ) ) ; "BP" ) ; If ( IsEmpty ( FilterValues ( "CC" ; existingValues ) ) ; "CC" ) ) ) ] If [ not IsEmpty ( $missingValues ) ] Set Variable [ $parentID; Value:Parent::ParentID ] Go to Layout [ “Child” (Child) ] Loop Set Variable [ $i; Value:$i + 1 ] Exit Loop If [ $i > ValueCount ( $missingValues ) ] New Record/Request Set Field [ Child::ParentID; $parentID ] Set Field [ Child::Category; GetValue ( $missingValues ; $i ) ] End Loop Go to Layout [ original layout ] End If --- Note: There is something fundamentally "wrong" with this requirement. Your records should reflect some physical reality. If the parent does not have children in some category, then that should be the end of it. There should be no need to artificially manufacture a fake record that doesn't represent a real object.
  43. 1 like
    You could define a self-join relationship along the lines of: Bookings::ProductID = Bookings 2::ProductID AND Bookings::Date = Bookings 2::Date AND Bookings::BookingID ≠ Bookings 2::BookingID Then if there are any related records, you have a duplicate booking. However, as Wim points out, the question then becomes what to do when a conflicting booking is detected.
  44. 1 like
    You're mixing up a few things here: - if you are using ESS you don't need the 'execute sql' script step, you can treat the MySQL table like a native FM table and use regular script steps to create and update records - the 'execute sql' script step can work with any ODBC data sources whereas ESS works with only a few. As to the syntax: you'll need to make that a calculation where you work your variables in. Something like: "INSERT INTO enlist_load_dtl (studid, schedcrsid, coursecode, fromtime, totime, days, room) values (" & $$StudID & "," & $$schedcrsid"," & $$Coursecode"," & $$Fromtime"," & $$Totime"," & $$Day"," & $$Room");" In addition to that you'll have to add the proper quoting for text fields on the MySQL side and make sure that the date and time variables are in the right SQL format.
  45. 1 like
    You don't need to reformat a working AppleScript in any way when using the 'Native AppleScript' option. You can just paste it as is from the Script Editor application into the "Perform AppleScript" Options window. The only required change is to disable or remove any «tell application "FileMaker Pro"» wrappers you might have. AFAICT, the real problem with your script is the «on idle» part. I don't think that's ever going to be executed in Filemaker's Perform AppleScript script step, same as it's not going to be executed when running from the Script Editor. You need to save the script as a stay-open application in order for the «on idle» handler to have any meaning. Then you can use another script, called from Filemaker, to launch that application. Or perhaps you could use Filemaker's native OnTimer script mechanism instead of AppleScript's «on idle».
  46. 1 like
    Actually, LaRetta deserves a lot of credit for for this, as she caught two errors of mine and was kind enough to notify me back channel.
  47. 1 like
    If you want to print barcode labels, you want to stay away from Dymo. Zebra printers and even Brother are much better. Scripting the process is not that difficult. Grab a pen and paper and figure out what you want to happen when the QR code is scanned. Scan it into a global field and parse the data out according to your needs.
  48. 1 like
    Consider: Let ( [ required = List ( "002" ; "003" ; "004" ) ; passed = List ( "001" ; "002" ; "003" ; "004" ; "005" ) ] ; ValueCount ( FilterValues ( required ; passed ) ) = ValueCount ( required ) ) returns 1 (true). Let ( [ required = List ( "002" ; "003" ; "004" ) ; passed = List ( "001" ; "003" ; "004" ; "005" ) ] ; ValueCount ( FilterValues ( required ; passed ) ) = ValueCount ( required ) ) returns 0 (false).
  49. 1 like
    You are correct, you can not have a space after the Field Name. This is a good thing, because if you were allowed have spaces after the names, it will haunt you in relationships, calculations, etc. The fields need to be corrected on import to the non-space name. You can have leading spaces in a Field name which you do NOT want either. HTH Lee
  50. 1 like
    Even if it was possible, you would not want to disable the consistency check. That would putting your head in the sand instead of solving the issue It sounds like you are NOT copying from the backup location but copying from the live folders; which is only possible if those folders are shared on the OS-level and THAT is very very very dangerous. It is the #1 known cause for corrupted files (by the risk of other processes - like copying - touching the live files). FMS backup files are always closed properly. Are you taking files from an FMS backup schedule or from some other backup software's backup (for instance: a Windows VSS snapshot)? If the latter; it means that they are taking a copy of the live files without pausing FMS. Only use FMS itself to take backups. The best setup to do what you need is: - disable all file sharing on the FMS box - disable all other backup mechanisms except FMSs (or at the very least, configure the other backup to exclude the FMS live files) - set up remote desktop access on the FMS box when you need a backup - log into the remote desktop on the FMS box - find a backup --> stay away from the live folders! - zip it - copy it to a networks share somewhere on the network (or share a folder on your desktop for the purpose).
This leaderboard is set to Los Angeles/GMT-07:00