FileMaker: Explore
by .(JavaScript must be enabled to view this email address) on Jan 10, 2012,
filed under: Get ( Answers ), Tips & Tricks, General Tips
I recently had a student ask, “How do I get word wrapping to indent the second line, and all lines thereafter, for a standard [edit box] text field?”.
“That’s easy,” I said, and I proceeded to show the class by going into Layout Mode, selecting a large text field, turning on the text ruler and … uh… what? I suddenly remembered that the indent tools (i.e., the “first line indent”, “left indent”, and “right indent” sliders) are only activated when a text object (or merge field) is being edited … but cannot be leveraged at all for edit boxes.

I looked up and saw the entire class staring at me, waiting, with that same smug look on their collective face: “Let’s see you explain this one, smart guy.”
After a good cry, I finally found the answer by playing with the Paragraph menu (located in Format > Line Spacing > Other… or, using the Inspector tool, on the Appearance tab > Paragraph). By selecting the edit box and using this dialog, I set the “Left” indent to 8 pixels, and set the “First line” to -8 pixels. This is how we tell FileMaker, “Indent by 8 pixels all lines in this word-wrapping edit box; except the first line, have that one start right up against the left margin.”


Whew. Sometimes all we need is a good cry.
by .(JavaScript must be enabled to view this email address) on Dec 28, 2011,
filed under: Tips & Tricks, Advanced Techniques
Over the years I have noticed that some beginner and intermediate level developers are not aware of the possible uses of extended privileges, other than as a means of controlling methods of sharing (such as through standard FileMaker Pro to Server networking, Instant Web Publishing, PHP, etc…). Extended privileges are probably one of the most underused features in FileMaker and at the same time incredibly simple and powerful with regards to enforcing security and access control. I have seen people write very complex scripts that attempt to manage or limit access to specific areas of a system, creating elaborate, complex security access levels or hard coding some of this security functionality within the data structure when they could have used custom extended privileges to do the same in a cleaner and most efficient manner.
What are extended privileges? Extended privileges are just permissions that can be attached to an existing access privilege set and are used to determine whether a user has access to certain elements within a system or not. The most common type of extended access privileges are used to determine if users can access files via FileMaker networking ([fmapp]), ODCJ/JDBC, or the web publishing options.
Why are they powerful? FileMaker allows developers with the ability to create custom extended privileges, which are basically keywords, that can be called from any script, calculation or custom function in your file. This simple feature gives you the ability to setup access control groups.
Read more ►
Let’s say we are managing a system for a company that has three departments: Accounting, Production, and Sales. Each department has three levels of user privileges that need to be setup: a Manager level, a Supervisor level and a User level access. That’s a total of nine different privilege sets, not including development accounts.
We have a set of financial reports that must be accessible to all managers and to the accounting supervisors. For simplicity purposes, let’s pretend we have a script that runs all reports and at the beginning of this script we run a test to determine if the user running the script has access to these report; if not, the script should stop.
Without the use of extended privileges we could just setup the following script steps:
# test access
Set Variable [ $privilege ; Value: Get ( AccountPrivilegeSetName ) ]
If [ $privilege ≠ "Accounting-Manager" and $privilege ≠ "Accounting-Supervisor" and $privilege ≠ "Production-Manager" and $privilege ≠ "Sales-Manager" ]
# User doesn't have access
Exit Script
End If
# User has access, continue with reports…
A problem here could be if at one point in the future the developer decides to change the names of the access privileges, add more levels or departments or maybe revoke access to these reports to a certain group. He would have go into all the scripts that handle this restriction and make the changes.
The solution: we can create an extended privilege set called FinancialReports and assign it to the privilege sets that should have access to the reports. Defining a new extended privilege is as simple as specifying a keyword, giving it some sort of description, and then checking off which privilege sets should have it.


When it comes time to test for user access we can simplify our script steps with the following:
# test access
Set Variable [ $privilege ; Value: Get ( AccountExtendedPrivileges ) ]
If [ IsEmpty ( FilterValues ( $privilege ; "FinancialReports" ) ) ]
# User doesn't have access
Exit Script
End If
# User has access, continue with reports…
The Get ( AccountExtendedPrivileges ) function returns a carriage return separated list of all the extended privileges associated with the privilege set the account is part of. In this case, if we were logged in as an accounting supervisor, it would return
The FilterValues function compares that list to the second input (“FinancialReports”), and shows all matching values. So, if the result of the FilterValues function is empty with no matches, the user does not have access to the reports, and the script aborts itself.
This way, if we rename, add, or remove privilege sets or revoke or grant access to certain groups, our test won’t have to change (unless we rename the extended privilege itself, so it will require some careful planning on your part). In this scenario we can control access to these reports using only the custom extended privileges we created.
The same solution could be applied to other scenarios were there we have access to areas of a system that overlap within different accounts. For example, you might want to show a Daily Production Report to users in either the Production-Manager, Production-Supervisor, or Sales-Manager privilege sets every time they log in into the system.
Contract post ▲
by .(JavaScript must be enabled to view this email address) on Dec 27, 2011,
filed under: Tips & Tricks, General Tips
Have you ever wanted to find records where a certain field is empty? Suppose you are updating your contact database and trying to capture email addresses for as many people as possible. You need to find every person for whom you do not have an email address. When searching in FileMaker, the equal sign operator (=) is used to find an exact match; when used by itself in a field, with nothing else following it, it tells FileMaker to find records where the field is empty. So… easy enough, right? Just go to the contact detail view, enter Find mode, type an equals sign into the email field (or select the symbol from the Operators popup in the toolbar), and click the Perform Find button.
But… suppose you are tracking contacts that may have multiple emails. Such a setup probably requires a relational system where emails are stored in a separate table, with a relationship defined from the contact table to the email table. On your contact detail screen, a portal can show you the many related email addresses for each person.
In this scenario, typing the equal sign in the (related) email field isn’t going to work. The problem is that we are no longer trying to find contacts records where an email field is empty. Instead, we’re looking for contact records that do no have a related email address record. In other words, it’s not that the email field is empty (using the equal operator will find contacts where a related email address record was created but not filled in); it’s that the email record doesn’t exist. And finding a non-existent record is kind of hard. I mean, you can’t… it doesn’t exist.
Read more ►
To find our records, we need to invert our original approach, in a way. Start by finding contact records that do have a value — any value — in the related email field: enter Find mode and type an asterisk (*) into the email field, to find email addresses with any character. Next, before clicking the Perform Find button, comes the key step: in the toolbar, next to the label Matching Records, choose Omit instead of the default Include. FileMaker understands this as a request to subtract records that have any value in the related email field. Starting from the complete set of contacts, this leaves us with all those without an email address.
What if we need to perform a search for contacts where some fields are filled in and other, related fields are empty? For example, how do you find all email-less contacts that are also active (a field in the contacts table, in this case formatted as a checkbox). In this case, we need to first search for active contacts, and then omit from that group those with emails. Start by entering Find mode and select the Active checkbox, leaving the Matching Records option on the default Include. Next, from the Requests menu, choose New Request command, and repeat the above omit procedure (enter an asterisk in the related email field, and choose Omit). Finally, click Perform Find. FileMaker first finds the active contacts, subtracts those with emails, and leaves us with the remaining active contacts without emails.
Want to see more tips on searches with operators, multiple requests, and different actions? Check out the Finding and Sorting Your Data webinar that our Chad Novotny, our Vice President of Technology, presented last year.
Contract post ▲
by .(JavaScript must be enabled to view this email address) on Dec 22, 2011,
filed under: Success Stories
The Support Group Helps Mass Insight Help Schools
Mass Insight is a Boston-based group that works to benefit education and provide competitive advantages to schools on multiple levels. The organization is comprised of two segments: Mass Insight Global Partnerships, a consulting firm that unites schools, companies and government agencies for the purpose of building competitive advantage, and Mass Insight Education, a non-profit affiliate that works to improve public school performance in the maths and sciences as well as help to revive the schools themselves.
The organization uses a FileMaker Pro database to store every one of their contacts for both sides of the business. As of the spring of 2009 the system was still running on 5.0, the version it was originally built in. It was a single flat file that had grown haphazardly over the years and was now a mass of entry layouts and hard-coded checkboxes that the staff used to categorize their records. The system was confusing to use; some of the labels were so old that “no one knew what anything meant,” says Joanna Manikas, VP of Business & Information Systems. “There was no common language or identifiers.” Furthermore, accurate searches were nearly impossible for users that needed to be able to pull up a set of contacts at a moment’s notice. Manikas wanted to do a lot more with the system but it was clear that a massive overhaul was needed before any new functionality could be added.
Read more ►
Enter The Support Group, Inc.‘s J Caprioli, who took over as Mass Insight’s lead developer and continues to work with them to this day. J’s first order of business was to upgrade the system to FileMaker 10, and then begin a complete restructuring of the file. He condensed the 50+ category fields (along with their 50+ matching value lists) into a much more manageable four - for program, sector, type/level of school, and district - and converted all of their data to related records so that users could enter more relevant categories and perform more targeted searches. He streamlined the data entry process and created more flexible reporting tools. Once the initial work was completed many new features were added as well, including the ability to log notes for each contact, track fundraising efforts, and schedule meetings with multiple attendees. The meeting component in particular “has been huge,” says Manikas. “We can now facilitate gatherings of leaders and track the invitees with ease, as well as record if they accepted, declined, or attended. We can easily pull attendance lists, send emails to a group of attendees, and see all meetings for a contact and all attendees for a meeting. I love it.”
Manikas says she is “thrilled” with J’s work and everyone she’s dealt with at The Support Group. “The relationship has been great right from the start. Every touch with company has been terrific - whether I’m going to a training, working with J, or just contacting their sales team to put together a proposal for another project. J has done a great job; I haven’t thrown him any curve balls that he hasn’t been able to figure out for us, and very quickly. He goes right at it and immediately understands what we’re trying to do.” Manikas looks forward to the relationship continuing and says there are already plans in the works for additional modules.
Most importantly, says Manikas, the team at The Support Group has been “extremely responsive and helpful in getting us to think about how we use data and what data can do. A lot of times people have a hard time knowing what they want. These guys ask the right questions.”
Contract post ▲