Brisbane training courses scheduled

We have been running a survey asking for expressions of interest in alternative locations for our FileMaker training courses. We currently offer FileMaker training in major centres where demand is highest. But we can travel anywhere there is demand.

If you would like to attend FileMaker training closer to you, please complete our online survey. There is no obligation to enrol. We will schedule courses in locations where there is a good expression of interest. You can still complete our survey here.

Brisbane Wins!

As a result of our current survey responses, we have scheduled new FileMaker training courses in Brisbane in late October. We are still negotiating a venue somewhere in the CBD area. Course descriptions will be updated as soon as this is confirmed.

Get Started with FileMaker Pro
Brisbane CBD location (to be advised)
Mon-Tue, 23-24 October 2017
Building Effective FileMaker Solutions
Brisbane CBD location (to be advised)
Wed-Thu, 25-26 October 2017

These two day courses are at an introductory and intermediate level respectively. Course details including outlines and videos can be found on the Training page.

Bookings are open now for both courses and can be made through the Training Schedule.

Prepare for FileMaker Developer Certification – now in Melbourne

Due to popular demand, the Prepare for FileMaker Developer Certification has been moved to a Melbourne CBD location.

The course is an intensive advanced level course designed to prepare candidates for the Developer Essentials for FileMaker 16 exam. The course covers all knowledge areas of the exam paying attention to the approximate weighting for each.

When and Where

It runs for two full days – Mon 25 & Tue 26 September 2017. The location has not yet been finalised but will be in the Melbourne CBD and likely to be at Ether Conference Venue at 265 Little Bourke St, Melbourne.

The course cost is AU$1190 but there is an Early Bird Special – AU$990 – running until 31 August 2017.

So get in now to book your place and save $200.

WHO SHOULD ATTEND?

This course is designed for people preparing to sit the Pearson VUE exam to achieve the certification as FileMaker 16 Certified Developer. The course does not aim to teach you about FileMaker development per se, but to look at what should be the knowledge and skills of a competent FileMaker developer across the entire FileMaker Platform. To gain the most from the course, you should have hands-on experience developing and deploying recent FileMaker solutions including installation, configuration and maintenance of FileMaker Server.

Course Details and Booking

For more details and to book online, please go to our Training Schedule page.

Get FileMaker 16 Developer Certification

Are you a FileMaker Certified Developer?
Why should you care? Why should your customers care?
How do you study for the Certification exam?

FileMaker Inc., has released the Developer Certification exam for the FileMaker 16 Platform. In their words:

“This credential demonstrates to clients, peers and management that you have achieved an essential level of knowledge, experience, and skills in developing on the FileMaker Platform.”

Candidates who pass the exam receive the FileMaker 16 Certified Developer credential.

Why get Certified?

This is the only industry certification available for FileMaker developers. While it does necessarily mean you are a great developer, it does give you the best chance of being great. Passing the exam means that you have a competent level of knowledge of the FileMaker Platform.

FileMaker Inc., lists the benefits of Developer Certification. These include:

  • Expand your FileMaker developer skill set
  • Stay up-to-date on current FileMaker technologies
  • Increase your credibility (“dev cred”)
  • Promote yourself with the FileMaker Certification logo
  • Preferred listing on the FileMaker website (FBA only)

How do you prepare for the exam?

There is an exam study guide provided on the FileMaker web site. FileMaker recommend “at least 6 months of development experience with the FileMaker Platform before attempting the exam”.

While there is nothing better than hands-on experience with FileMaker products, many people still struggle with what to study and how to study in each of the areas identified. The exam covers areas where you may not have had any practical development experience. So what do you need to know?

Do a Certification Preparation course

uLearnIT is seeking expressions of interest from people to attend a Certification Preparation course. This course is written and presented by David Head. He is a Certified Developer in every version of the FileMaker Platform beginning with version 7.

David has successfully run this course for previous FileMaker versions. Many people attending not only passed the exam, but also recognised benefits in how they approach and develop their FileMaker solutions.

The course does not “teach to the exam”. David covers materials that will be in the exam and also material that will not (but probably could be). He presents material from the point of view of “why is this important to a FileMaker Developer?”. The presentations and exercises will make you question your ideas about FileMaker products. You will think more about how they work and why they behave the way they do.

Example

For example, when a FileMaker script is run with Full Access privileges, does that present any security risk? Can a user get access to parts of the solution that they should not? How do this feature actually work? What Get functions are affected by running a script in this way?

The course is a series of intense study sessions over consecutive days. There is a combination of theory and group exercises. Group discussion should challenge your ideas about how FileMaker works.

You will think about content from the point of view of what is important and what you really need to know. The exercises will give you skills to go and investigate parts of FileMaker in a structured way. It will get you thinking the right way.

Expressions of Interest (EOI) now open

uLearnIT is calling for expressions of interest in attending a Developer Certification Preparation course. This course will not be able to be run in every location. We are looking for locations where there is enough interest to make the courses viable. We will need a minimum of eight (8) participants in any location to schedule a course.

If you express interest in the course, there is no commitment on your part to attend and the expression is not an enrolment. When course locations and dates are confirmed, we will open limited enrolment. People who express interest will be given first priority.

If you are interested in this course, please fill out the EOI survey at:

surveymonkey.com/r/7PTZYJS

If you have any questions, please email us at info@ulearnit.com.au or use the contact form on this web site.

The A-Z of FileMaker: N is for Navigation (part)

FileMaker layouts are composed of parts. Layouts, and therefore layout parts, are used to display data and other objects. Parts can be used to control how data is displayed.

Navigation parts were introduced in FileMaker Pro 14. There are two available for any layout – top and bottom. On screen, these parts display at the top and bottom of the window. They are called navigation parts because they will typically contain buttons and other objects that help the user to navigate the solution and identify the current location.

Adding parts to a layout

The easiest way to add parts to a layout is using Insert > Part… (when in Layout mode). Some parts may be greyed out to indicate that you already have one on the layout (and you can only have one).

Insert > Part…

Removing parts

If you need to remove a part from a layout, click the part tab at the left when in Layout mode. Then press delete on your keyboard. If the part contains objects you will be asked if you are sure (delete the part and all objects in it), otherwise the part will be deleted immediately.

Aren’t navigation parts just a header and footer?

At first glance, navigation parts appear to behave in the same way as header and footer parts. Fields placed in any of these parts will display data from the current record when in Browse mode.

When working in List or Table view, these parts will behave in a very similar way. The top navigation part appears at the top of a window and then the header part below. The bottom navigation part is at the bottom of the window with the footer above. None of the parts move as the user scrolls through a list of records.

Displaying parts in Table view

If you use Table view, you may not see navigation, header and footer parts. You can turn on display of any of these parts for any layout via Layouts > Layout Setup… Then in Views, click the Table View Properties button to access display for these four parts. Not easy to get to is it?

table view properties

When working in Form view and the body part is longer than the window, the header will disappear off the top of the screen when the user scrolls down. Similarly, the footer will only be visible when the user scrolls to the bottom of the body part. If the body part is shorter than the window, the footer will appear immediately after the body part (perhaps halfway up the window).

A difference to note is that the navigation parts will always fill across the entire window. In Form and List views, header and footer parts only extend to the implicit right edge of the layout (set in Layout mode). In Table view all parts fill across the entire window.

Forcing a header or footer to fill across the window

This can be done by setting any object in the part with a right anchor. Interestingly, if this is done in either the header or footer, it will affect both parts.

To print or not to print

A major difference between the part types is that navigation parts do not print – they are intended purely for on screen use. Of course, this also means that navigation parts do not display in Preview mode.

When printing headers and footers, they will appear at the top and bottom of each page. However, unlike in Browse mode, the header will display data from the first record on the page and the footer from the last record on the page.

There also exist title header and title footer parts. When printing, these parts will appear at the top and bottom of the first page (replacing the header and footer).

Zoom locked

Unlike all other parts, navigation parts will not zoom. With any change to the zoom level, navigation parts and their objects will remain at 100%.

Formatting part display

All parts can be styled through the Appearance tab of the Inspector. First click the part tab at the left of the part in Layout mode. Changes can be applied to the fill (none, solid, gradient or image), line and inner shadow.

part formatting

The default style for each part is set according to the theme chosen. All parts share the same set of custom styles. So it is possible to use styles to ensure that your top and bottom navigation parts are exactly the same.

Conclusion – when to use navigation parts

Use navigation parts when you need an on screen area that is fixed to the top or bottom of the window. Use them to present buttons for various actions and information that needs to be constantly available.

The difference between navigation parts and header/footer parts is most evident when working with a long body part and scrolling in Form view. In this instance, it may be useful to use a footer part to contain a button that can only be actioned when the screen has been scrolled to the bottom. For example, if you want to force a user to scroll through terms and conditions (and pretend they read them) to get to an Accept button.

Look at some of popular apps like Facebook and Instagram to see how they are using the app equivalent of fixed navigation parts and a header that scrolls off the top of the screen.

The A-Z of FileMaker: M is for Merge

There are a number of methods to display data on a FileMaker layout, the most common being using field objects. Often it is more convenient and flexible to use merge items within a text object.

What can be merged in text?

Text objects can contain three types of merge data:

  • fields
  • variables
  • symbols

All can be accessed via the Insert menu while working in Layout mode.

Insert menu merge

What do merge items look like?

When looking at a text object in Layout mode, merge fields and variables in the text appear within double chevrons <<like this>> and <<$likethis>>; merge symbols are enclosed in double curly braces {{like this}}.

merge items in layout mode

Merge fields

When inserting merge fields, you can specify any field that you could physically place on the layout (current table, related or global). Text objects containing merge fields can be placed as you would normal fields – on the layout, in a portal, in a popover, etc – and will display the same data as it would for a standard field object.

The exception for using merge fields is container fields. If these are merged, the text object will display the container data file name.

Concatenating data

Merge fields can be very useful for stringing together (concatenating) data. A common example is when displaying a person’s full name – you will want a single space between first and last names or perhaps a comma and space between last and first names. This can be done using a calculation field but merge fields for display may save creating a number of calculations.

concatenate with merge

Note also in the above that the merge fields have been formatted with styling (bold and uppercase) within the text object.

Merge variables

You can insert both local ($) and global ($$) variables in text objects. The value of a local variable will only be displayed during the script in which it exists.

To ensure correct display, you will need to use either the Refresh Window or Refresh Object (specifying the named text object) script step.

Tip: Displaying page count

As in the above screenshot, you may want to display the page count in the footer of a report – Page 3 of 10. While the page number is displayed with a symbol, the page count is determined dynamically for the report. When in Preview mode, you will go to the last page using the Go to Record/Request/Page [Last] script step, and set a variable to Get ( PageNumber ).

Idea: use Merge variables as Layout calculations

There have been various feature requests over the years for layout calculations. This feature would reduce the need for calculation fields in tables. Merge variables may satisfy that request in a number of cases. During a script, you can define a variable using any calculation. Then you can display the result of the calculation on a layout using a merge variable.

Merge symbols

Merge symbols use the Get functions available in the calculation engine (see the blog article The A-Z of FileMaker: G is for Get for more). If the function used is Get (AccountName), then the merge symbol is {{AccountName}}.

The merge symbol displays the result of the Get function in Browse, Find and Preview modes. It is evaluated when the text object is drawn on the layout and when it is refreshed.

Challenge

If the {{CurrentTime}} merge symbol is placed on a tab panel that is not the default front tab, when will the current time be evaluated?

a. when the layout first loads
b. when the tab panel is first selected
c. every time the tab panel is selected
d. when any tab panel is selected

(answer is at the end of the article but you would be wise to experiment for yourself to see whether your results agree)

The most commonly used merge symbols are available for immediate selection – date, time, user name, page number and record number. All others can be accessed through the Other Symbol… command and dialog.

Formatting merge data

Data displayed by merge fields, variables and symbols can be formatted for display by applying Data Formatting via the Inspector to the text object.

Only one format per data type (number, date, time) can be applied to a single text object. This means that it is not possible to have two numbers in a single text object display with different formatting.

CHALLENGe Answer

b. when the tab panel is first selected

After that event, it will not be re-evaluated except if the window or object is refreshed. If the window is refreshed and the tab panel is not active, then it behaves as it does when the layout is first loaded – it evaluates next time the tab panel is selected.

Why is this useful to know? It contributes to an understanding of how FileMaker draws layouts and layout objects, and when it evaluates calculations. Such understanding will help a developer to create efficient layouts and troubleshoot performance.

Inside FileMaker 16 Seminars

With the release last week of the new FileMaker 16 platform, we are excited to announce a series of full day seminars in Brisbane, Melbourne and Sydney.

FileMaker 16 banner

Each new release brings some great new features and FileMaker 16 is no exception. But how do you get up to speed quickly what is new and how to implement them in your FileMaker apps? Easy – come along to one of our Inside FileMaker 16 seminars.

In a jam-packed day, you will see why the new features are important and how to implement them in a FileMaker app. We will give you a lot of ideas around how you can make best use of the features. Then we show you specifically how to get them working. And you will see things that are not in the FileMaker marketing materials that could be important to you.

At the end of the day, you will be much better informed about how you can move to FileMaker 16 and about what you can use in the new feature set.

Seminar Details and Bookings

For more details about the seminar (locations, dates and content) and to book your place online, see the Inside FileMaker 16 seminar page.

The A-Z of FileMaker: L is for Loop

L is for Loop

FileMaker scripting provides the features of any structured programming language. Conditional and looping structures are key features.

Conditional structures like the If / End If in FileMaker scripting allow for different subroutines to run on the evaluation of a condition. See our previous blog article on If statements.

A loop is a series of instructions that are continuously executed until a condition is reached. A simple example is working through a set of records performing certain operations until the last record is reached.

Loops in everyday life

We often perform repetitive processes. These can be considered to be loops with an exit condition.

peel potatoes loop

For example, if you had to peel a bag of potatoes, you would prepare by getting the equipment required and opening the bag. You pick up a potato, peel it, rinse it and place it in a bowl. Then you check for more potatoes. If there are more, you pick up the next one and repeat – peel, rinse, place. When all the potatoes are gone, you finish and clean up.

Loop steps in FileMaker scripting

The basic loop script steps in FileMaker scripting are Loop and End Loop. The script steps placed between (‘inside the loop’) form the looping operation. Any loop is expected to have two components:

  • procedures to be carried out each time through the loop
  • an exit condition which, when true, will exit the loop
Infinite loops are bad

A loop without a valid exit condition is called an infinite loop – it will continue without ever exiting. This is not something you want in a script.

In many cases, there are steps before the loop to set up the environment. For example, if the loop is going to work through a set of records, you may ensure it goes to the first record of the found set before entering the loop.

Example: Loop creating new records from a list

Sometimes you have a list of values that you want to turn into a list of records.

In this example, we have a list of children’s names in a global field. A scripted button will create records related to the current parent.

The screenshot above shows the Parent layout. In the Children section, the names are in a global text field. Child records will display in a portal at the right. The relationship is a simple one to many from Parent to Child.

Why would you be doing this?

Good question. Sometimes it is easier for users to enter a list of data than to create new records. This may be by pasting from another source. Then you provide an easy process to create the required records.

The looping script will work through the child values creating a new record for each. The challenge here is that we do not know ahead of time how many children will be in the list. So the script will count the names to know how many times to repeat the loop.

The pseudocode for the looping script is:

Store the parent ID and the child list
Count the child records required
Set loop counter
Go to the child table 
Enter the loop
Create new record for nth child in list
Exit loop if last child processed
Else increment counter
Return to the parent table

Here is the script:

looping script

How does it work?

The first four steps are setting variables to store required values:

  1. primary key of the parent record
  2. list of children from the global field
  3. count of the children
  4. loop counter initialised to 1

Then we go to the Child layout to create new records in the loop.

Inside the loop, the first step is to create a new record. Two Set Field steps are used to set the foreign key (ID parent) and the child’s name. The child’s name is  extracted from the child list using the GetValue function and the $counter to know which one to take.

GetValue ( $children ; $counter )

The loop will then exit if the $counter is greater than or equal to the $childcount i.e. if the required number of child records has been created. If the loop does not exit, it continues on to increment (add 1 to) the $counter and then loop back to the start where it creates another new record.

When the loop exits, the script returns to the original layout (where it started).

Q. Moving script steps around

Consider what might be the positive effects of moving the Exit Loop If step to line 7 – being the first step in the loop.

[see the end of the article for a suggested answer]

Anything else needed?

This script is bare bones. At a minimum, you will probably also check that the user is happy to proceed and error trap to stop the script if no child names exist. You may also choose to clear the global field if the loop ends successfully.

dialog check record loop create

dialog error loop no children

The above example shows the simple structure of a looping process with:

  • setup before the loop
  • doing things in the loop
  • checking the exit condition
  • returning to the start
Loop alternatives

There are many times that a loop will be the right thing to do. However, you need to be aware of alternative methods and possible speed implications of looping scripts.

For example, if you need to loop through a found set of records and set fields according to some conditions, then consider using the Replace Field Contents script step.

If a looping script ‘touches’ every record on the way through, that may slow the process. Consider the methods to avoid opening and closing records, and even jumping to key records in the set. A Freeze Window script step before the loop may result in speed improvements.

A. Moving script steps around

If you move the Exit Loop If step to the start of the loop, this will have the positive effect that a new record would not be created unless needed. Since the $counter has been set to 1 before entering the loop, if there are no values in the children list ($childcount = 0), the loop will exit immediately.

What do you use loops for?

Feel free to leave a comment below.

Building Effective FileMaker Solutions

uLearnIT is pleased to present an intermediate FileMaker training course – Building Effective FileMaker Solutions. This two day course provides a comprehensive look at FileMaker development for building robust multi-user and mobile solutions. We cover topics like relational design, scripting, calculations and user interface.

Build Effective FileMaker Solutions

COURSE OUTLINE

FileMaker Structure – schema, layouts, calculations and scripts
Planning for Success – what to think about, good developer habits
Relational Design – systems analysis, ERDs and the relationship graph
Calculations – storage and execution, top 20 functions, documenting
Scripting – running scripts, top 20 steps, variables and parameters
UI Design – process modelling, interface design, custom themes
Security – accounts, privilege sets, extended privileges, file access
Next Steps – where to from here

Classes now scheduled

Classes have been scheduled for Tauranga (New Zealand), Sydney and Melbourne. See all the course details on our FileMaker training schedule. Email us any queries you have or go ahead and book your place.

Each course has strict limits on numbers. While we would love to sell out, we don’t want you to miss out. So jump in and book online now.

Kia Ora New Zealand!

G’day to everyone in New Zealand. We bring great news – FileMaker courses are coming to you. We are starting on the North Island but there have been a couple of requests for courses down south too. So we will have to see how to make that happen.

Get Started in Auckland

Our beginner course, Get Started with FileMaker Pro,  is running in downtown Auckland on 10-11 July 2017.

Auckland NZ

This is a great course to get a solid grounding in FileMaker development. We assume nothing about your knowledge of the FileMaker platform. You will leave the course with all the skills needed to tackle your first project, or to get that existing project flying.

Build Solutions in Tauranga

To learn more about FileMaker development, you will need to go further afield. But what a great place to visit – Tauranga. We will be running our intermediate course, Building Effective FileMaker Solutions, at the Oceanside Resort in Mount Maunganui on 13-14 July 2017.

Mt Maunganui NZ

This course takes your FileMaker development skills to the next level. We get to dive into topics like relational design, scripting, calculations and user interface. We look at essential knowledge for building great multi-user solutions for your workgroup.

Bookings are open now

Each course has strict limits on numbers. While we would love to sell out, we don’t want you to miss out. So jump in and book online now.

See all the course details on our FileMaker training schedule. Email us any queries you have or go ahead and book your place. We look forward to seeing you in New Zealand.

The A-Z of FileMaker: K is for Key

K is for Key

In a relational database like FileMaker Pro, key fields are used to establish relationships between tables. Depending on where you get your information, there are many types of keys. In this article, I will focus on just two – primary and foreign keys.

Primary keys defined

A primary key (PK) is a field that contains data unique to the record in that table. As such, it can be thought of as a record identifier. There are some required characteristics of a primary key:

  • never be empty
  • contain unique data (in the table)
  • never change

It is also most useful if it is not real or meaningful data. To understand this better, let’s consider some fields that seem to fit the requirements for a primary key but should not be used as such.

Avoid using these as primary keys
  • tax file number (TFN)
  • email address
  • student number
  • phone number

Although most people in Australia (and certainly those who are employees) will have a TFN, it can fail the PK test. First, if a person cannot provide their TFN for whatever reason, the field is left empty. Second, if the number is wrongly entered, it will need to be changed.

An email address could be shared by multiple people and may change.

A student number is generated by another database system. As for a TFN, it may not be available or may be incorrectly entered. Student numbers may be re-issued in some circumstances.

A phone number may be shared by multiple people and will likely change.

Good primary keys

The best primary keys are generated by the database system in which they are used.

The most basic is a simple serial number. In FileMaker Pro, the field option can be set to auto-enter a serial number on record creation. This will ensure sequential creation of unique serial numbers even in multi-user systems.

serial field option key field

Many database systems can generate a universally unique identifier (UUID). In FileMaker databases (as in many others), the UUID is a unique 16-byte (128-bit) string. In the standard representation, the UUID is 32 hexadecimal (base 16) digits, displayed in five groups separated by hyphens, in the form 8-4-4-4-12. An example of this is:

012F5382-37FF-413B-A93C-D957A5C6F451

The function used to generate this is Get ( UUID ). To create a primary key in this way, set the field options to auto-enter a calculation that uses the function. We covered this (Set a primary key) in a previous blog article The A-Z of FileMaker: G is for Get.

Foreign keys defined

A foreign key (FK) is a field that contains a unique identifier from a PK of another table. In this way, the record with the FK is linked (or related) to the record with the key data in the PK.

Consider a FileMaker solution for recording issues with equipment. There is a table for equipment with a PK field. There is a table for issues with a PK field. The issues table also has an equipment FK field.

When a new issue is created, the unique identifier of the equipment is copied into the equipment FK field. This serves to relate the issue record to a specific equipment record.

By definition, the values in a FK will not be unique. In the above example, all issue records for a specific equipment item will have the same data in the FK.

Usually the FK will not be empty. In the above example, if the FK is left empty, the issue is not attached to any equipment and would be considered invalid. In some cases, it may be valid to leave the FK empty.

Generally the FK will not change. If it does change, this means that the record is relating to a different record. In the above example, the FK may be changed to correct an error when the wrong equipment was identified.

Referential integrity

Referential integrity refers to a rule that every foreign key value must match a primary key value in an associated table. In other words, the FK value must exist in one record of the other table.

Naming Keys – What do you think?

Most developers have opinions and conventions for naming their keys. For what it is worth, I name all my PK fields with a simple name – ID. I find that the context of the field is usually self-evident. It also allows me to copy and paste a PK into a new table.

I name my FK fields simply too – IDtable. In the above example, the FK would be named IDequip or IDequipment.

Here is an ERD from a previous post on the Join Table.

Do you have a naming convention for keys and a reason for using it? Feel free to leave a comment below.

Other keys

Often when we import data from other systems, we may be provided with a key from that system. It may seem like we have a ready-to-use PK supplied for us. Beware! Do not use the PK from another system. However, it is useful to store it with our data. In reporting, we can then refer to records with our key or their key.