Dynamic Layouts in Filemaker

codeHammer picture codeHammer · Oct 20, 2011 · Viewed 10.4k times · Source

First off I am new to FM but I have a good handle on the basics. What I need to do is this - in a contact information type layout I want to be able to alter the layout based on a specific field. Ex. When the record is brought up, the background of the layout will change colors for a client, another for vendor, etc.

I tried to change a label based on a field, with no success. My guess is that the layout is static and only the data fields change.

We use FM Pro.

Thanks, Mark

Answer

pft221 picture pft221 · Oct 20, 2011

FileMaker layouts are static, but there are still some things you can do to alter the layout based on the values of fields:

Calculation Fields

If you want the data shown in an area to change, you can use a Calculation field. A typical example of this would be a status field. To do this you would add a new field to your table and use enter a calculation on that field like:

Case (
     IsEmpty(myTable::myField) ; "Please enter a value for myField." ;
     myTable::myField = "wrong value" ; "Please enter a correct value for myField." ;
     "Everything seems okay."
 )

Conditional Formatting

To make things like background color change you can use a conditionally formatted field. I will typically add an empty numeric field (for this example we'll call it emptyField) and set it so that it can't be edited during modification.

If you place emptyField on your layout, below all the other fields and disallow the user to enter the field in either Browse or Find mode, you can then use conditional formatting to change the field's color.

Portal Hiding

You can use this technique when you want some elements of your UI to disappear when they aren't needed. For example, if you want a "submit" button to appear only when all of the records on a field are filled out.

To use this technique I will usually create a Calculated number field, called ReadyForSubmit, on the original table and give it a logical calculation like:

not IsEmpty(field1) and ... and not IsEmpty(fieldN)

(Note that the value of the above function would be 1 or 0)

I will then create a new Support table in my database and add to it a field One with a calculated value set to 1.

I will then make a relationship between myTable::readyForSubmit and Support::One.

On the layout, create a portal with one row. Put your Submit button in that layout. Now, when readyForSubmit calculates to 1 the button will appear. When it calculates to 0 the button will be hidden.

Hidden Tab Browser

Finally, you can use a tab browser where you set the title font size to 1 point, hide the border, and control the browser programmatically. You can use this for having different field arrangements for different types of records. To do this you would first give an Object name to each tab of the tab browser, say Tab1, Tab2, Tab3.

Then you would add a script, goToTab, with the logic for when you want to go to each tab. Say:

If (myTable::myField = "corn")
    Go to Object (Tab1)
Else If (myTable::myField = "squash")
    Go To Object (Tab2)
End If

You would then use Script Triggers to run goToTab when On Record Load.