Zulu Related Contact Fields
Regretfully, we've just never been able to get the contact sync in Zulu to be reliable with Google Contacts. Some of this is that Google Contacts is changing and some if that contacts are inherently more complicated than calendar events (the calendar sync in Zulu is rock solid). So until we can get this rock solid we're demoting the contact sync to Beta and no longer supporting it.
We'll continue playing with this here but won't be able to help customers try and get it working: it just isn't reliable enough. At this point we don't have an ETA as to when this feature may be available again, if ever. Believe me, we wanted this to work as bad as you did.
Zulu knows that some of you contact data may be in related tables. For example, some databases store all a contact's phone numbers in the contact's record, while others store the numbers in a related table. And still others store main numbers in the contact's record and others in related tables. Zulu can sync all three scenarios. And Zulu treats Phone numbers, email addresses, and physical addresses this way.
How Does Zulu Map Related Phone Numbers and Emails?
Zulu knows that you may have phone numbers, for example, IN your contacts record, or in a related table. Or both. And Zulu handles phone, email, and physical addresses the same way: you can have some of these fields IN your contacts table, or store them in a related table.
Here is how it works:
You can map up to three phone fields IN your contacts record. If you have phone numbers in a related table, you can map that instead of or in addition to the local fields. If you have both, Zulu will use the locally mapped fields in the contact's record first, then the related fields.
Example: you have 1 main phone number field in your contact's record, then a table of additional phone numbers. You create a new contact on your iPhone with 5 phone numbers. When this contact is synced to FileMaker, the first phone entered will go into the main field in the contacts record, and the 4 additional phones will be added as related records.
Work exactly like phones: you can map up to three IN the contact's record, and then map a related table.
You may only map 1 local fax number. Same with URLS: one local field only. Note that you can, of course label some of your other mapped phones as faxes or label email addresses as URLs. In this way you can have as many as you want, but Zulu will only send one fax and one URL to the dedicated fax / url fields in Google.
Work just like phones and emails except that you may only map 1 address locally, the others can be mapped to your related address table.
- Country Codes Google only supports two digit Country Codes in Contact address information. Please make sure you map a field with these codes rather than the Country name. Attempting to sync with a full Country name will cause a syncing error.
Even though FileMaker can make use of related records for phones, emails and addresses, Google can not. There is just a single Contact record in Google, so related information in FileMaker is written to the single Contact record in Google, and in the process any additional information in the related records is lost. To deal with this, Zulu needs to delete and rewrite the related records in FileMaker if they are edited in Google. Since they are being rewritten, any information not stored in one of the Google fields will be lost. This includes the primary key of the related record, and can present some limitations for certain data models.
Notes about Phone, Email, and Address Labels
Google can be finicky about what it accepts as a valid Phone or Email label. For example if I have a related table of phone numbers in FileMaker and I create a new one with the label "Sally", that phone record won't show up in Google when I sync.
However, if I first label it "Work" and then after it has been synced I change the label to "Sally" that label will be moved up to Google.
It seems Google wants labels to begin with one of a few words: the label "Work Sally" is accepted where "Sally" is not. So it is best practice to begin your labels with one of the following words: work, home, mobile, pager, other, car.
You should also check out the limitations Google has when syncing this phone, fax, and email data to iPhones and iPads: Zulu Limitations.
Mapping Related Records
On the field mapping layout for Contacts you'll see a tab for "Related Phone, Addr & Email". In our sample file this tab contains portals to related tables, but those are just for your convenience and can be delete: the real work of the layout is done in the 3 bold layout names at the top of the tab:
If you have related tables for any of these entities (phone numbers, email addresses, physical addresses) create a new blank layout based on that table and name it according to this legend: so name your phone number layout "ZuluRelatedPhone".
If you don't have related tables for one or more of these entities, replace the bold name you see here with "none" like this:
Now find our layout of the same name in the Zulu sample file and copy the area inside the red dotted line, pasting it on to your new layout. Complete the field mapping on this layout as you did your main contacts layout.
Note that as with contacts you may need to add the field zulu_MODIFICATIONT_TIMESTAMP to your related table. Phone numbers and email addresses will also need the field zulu_RECORD_TYPE.
Syncs and Related Records
Zulu polls the modification timestamp of CONTACTS to see when a record needs to be synced: since changed to related data (like related phone numbers) won't change the contact's modification timestamp, changes to related data can get missed until the parent contact record is again modified.
To get past this and "force" Zulu to sync a contact, you'll use a script trigger to modify the contact's record every time a related data point is modified. You can see examples of this in the ZuluContacts_SampleData file that comes with Zulu. Here is how it works.
The Script. You'll find a script in our sample file called "Zulu_ScriptTriggerExample" this simply sets a field in the contact's record, updating the record's modification timestamp. You'll probably need to edit this script to set the field zulu_ModifiedFlag in your table.
Script Triggers. Firing this script is a little different depending on where you're editing related data. You'll see examples of both approaches in our example file.
- Portals. When editing the related info in a portal on the contact's record, you'll assign a script trigger to each related field, calling the "Zulu_ScriptTriggerExample" script. Make this an OnObjectSave trigger.
- Layouts. When editing related data in a wholly different layout (a layout based on the related table)-- which is unusual-- you'd set up a layout script trigger calling the same "Zulu_ScriptTriggerExample" script: set this up as an OnRecordCommit trigger.
That's it. Now edits to related data will also edit the parent contact record and trigger Zulu's syncs.