fmAccounting Link (MYOB Essentials Edition) Preview Video

We’ve just uploaded our first preview video for fmAccounting Link (MYOB Essentials Edition). This video demonstrates the following:

  • authenticating against the MYOB Essentials API
  • downloading a list of available MYOB Essentials Businesses
  • downloading Inventory Items, Tax Types and Chart of Accounts from MYOB Essentials
  • uploading a Contact from FileMaker Pro to MYOB Essentials
  • uploading an Invoice from FileMaker Pro to MYOB Essentials
  • uploading a Payment from FileMaker Pro to MYOB Essentials

You can watch the video below or directly on YouTube via this link.

We should be releasing fmAccounting Link (MYOB Essentials Edition) in the next couple of weeks – please Contact Us if you have any questions in the meantime.

fmAccounting Link (Xero Edition) Customers Map

Every now and then I like to generate a map and see where in the world our customers are located. We’ve shared some maps of where our fmSMS Customers are located and I’ve just generated a map for our fmAccounting Link (Xero Edition) customers. Xero currently reports that it has over 600,000 subscribers in more than 180 countries, however these 4 countries/regions represent their largest customer base:

  • Australia
  • New Zealand
  • UK
  • North America

Xero will be announcing their annual results next month, but we know that as of 30 September, 2015 these countries/regions had the following subscribers:

  • Australia: 262,000
  • New Zealand: 163,000
  • UK: 102,000
  • North America: 47,000

Xero UK total subscribers recently overtook Sage 50, the UK’s #1 desktop accounting software product for the past 30 years. Australia and New Zealand is seeing subscriber growth of over 50% and North America is their fastest growing region.

It came as no surprise to see that our fmAccounting Link (Xero Edition) customers reflect these Xero numbers – as you can see in the following map all fmAccounting Link (Xero Edition) users are based in the four main Xero target markets:

fmXERO Customers April 2016

It will be interesting to see what happens over the next 12 months – based on Xero’s growth we’ll see more Australia, New Zealand, UK and North American customers, but we’re also expecting to see some interest from other countries that Xero is actively targeting such as Asia where Xero did it’s first ever Roadshow in February.

Databuzz releases fmAccounting Link (MYOB AccountRight Edition) – Integrate FileMaker Pro and MYOB AccountRight Accounting Software

Sydney, Australia – April 12, 2016 – Databuzz today announced fmAccounting Link (MYOB AccountRight Edition), a FileMaker solution that integrates with the MYOB AccountRight Accounting Software.

fmAccounting Link (MYOB AccountRight Edition) allows you to upload and download data between your FileMaker solution and MYOB AccountRight, the powerful accounting software with business management capabilities that allows you to work off or online. fmAccounting Link (MYOB AccountRight Edition) removes double data entry and human errors saving your company significant time, money and hassle by automating the exchange of data between FileMaker and MYOB AccountRight.

fmAccounting Link (MYOB AccountRight Edition) is completely unlocked allowing you to integrate it into your FileMaker solution. You can copy and paste examples showing you how to authenticate with the MYOB AccountRight API and upload Contacts, Invoices, Payments and more at the click of a button.

fmAccounting Link (MYOB AccountRight Edition) features include:

  • works with FileMaker Pro v12, v13 and v14
  • completely unlocked
  • can be hosted by FileMaker Pro or FileMaker Server
  • works with Macintosh and Windows
  • works with MYOB AccountRight running in the Cloud or on the Desktop (online and offline)
  • works with MYOB AccountRight Live 2013, 2014, 2015 and 2016

“Previous integrations between FileMaker and MYOB AccountRight have involved manual exports and imports of multiple text files or a Windows only ODBC connection,” said Andrew Duncan, Director of Databuzz. “These are now a thing of the past – with fmAccounting Link (MYOB AccountRight Edition) you can push and pull data between FileMaker and MYOB AccountRight at the click of a button.”

fmAccounting Link (MYOB AccountRight Edition) includes examples for the following MYOB AccountRight API endpoints:

  • Company Files: select from all available MYOB AccountRight Company Files that you have access to
  • Contacts: download and upload Contacts (Customers and Suppliers)
  • Invoices: download and upload Invoices (including Invoice line items)
  • Items (Products): download and upload Items (Products price list)
  • Payments: download and upload Payments against an Invoice
  • Employees: download and upload Employees
  • Account Codes: download Account Codes from MYOB AccountRight
  • Tax Codes: download Tax Codes from MYOB AccountRight
  • Categories: download Categories from MYOB AccountRight

Availability, Pricing, and Compatibility

fmAccounting Link is available in a number of licenses: Company, Vertical Solution and Developer. It is available now from the Databuzz website at http://www.databuzz.com.au/fmaccounting-link-myob-accountright-edition/. Company Licenses start at AUD $495.00. fmAccounting Link (MYOB AccountRight Edition) requires FileMaker Pro v12, v13 or v14 and MYOB AccountRight Live 2013, 2014, 2015 or 2016.

Media/Customer Contact:

Andrew Duncan

Phone: +61 418 468 103

sales@databuzz.com.au

http://www.databuzz.com.au

About Databuzz: Databuzz is a long standing member of the FileMaker Business Alliance. We have been developing and deploying FileMaker solutions for clients in Australia and internationally since 1999. Our clients are individuals, small-medium businesses, government agencies and multi-national corporations. Databuzz was founded by Andrew Duncan, a Certified FileMaker 14 Developer. For more information please visit our website at http://www.databuzz.com.au.

###

FileMaker is a trademark of FileMaker, Inc., registered in the U.S. and other countries. All other trademarks are the property of their respective owners.

fmAccounting Link (MYOB AccountRight Edition) Preview Video

We’ve just uploaded our first preview video for fmAccounting Link (MYOB AccountRight Edition). This video demonstrates the following:

  • authenticating against the MYOB AccountRight API
  • downloading a list of available AccountRight Company Files
  • selecting the AccountRight Company File and entering the credentials for the selected Company File
  • uploading a Contact from FileMaker Pro to AccountRight
  • uploading an Invoice from FileMaker Pro to AccountRight
  • uploading a Payment from FileMaker Pro to AccountRight
  • downloading Chart of Accounts, Tax Codes, Categories and Inventory Items from AccountRight to FileMaker

The video also demonstrates how you can integrate with MYOB AccountRight (a Windows only application) from a Mac OS X computer.

You can watch the video below or directly on YouTube via this link.

We should be releasing fmAccounting Link (MYOB AccountRight Edition) in the next couple of weeks – please Contact Us if you have any questions in the meantime.

North West Sydney FileMaker Developer Meetup Dates for 2016

The dates for the North West Sydney FileMaker Developer Meetups for the rest of 2016 have been locked in:

June 17

September 16

December 9

Venue: Pennant Hills Bowling Club (short walk from Pennant Hills train station)
Time: 12.30pm

If you would like to join the mailing list just visit the signup page at:

http://databuzz.us12.list-manage.com/subscribe?u=366d1a87399a120a9d438cb56&id=8bb1fea366

We’ll send our reminders before each meeting – anyone is welcome to attend and no RSVP is required.

FileMaker PHP API Layout Tips

Over the past few months we’ve been working on a large FileMaker PHP Project for a client that required a web based interface to their FileMaker solution that worked on smartphones and tablets (both iOS and Android),  as well as the traditional desktops (Mac and Windows). The web interface was for users who were out of the office for large amounts of the week but needed to access the office solution from their car, client meetings or at home.

We’ve done many FileMaker PHP projects since the PHP API was first released in 2007 but this was by far our largest. Having worked closely with the PHP API for many months we’ve picked up a few tips and tricks along the way that we wanted to share, starting with Layouts.

If you’re not familiar with FileMaker’s PHP API the way the API interacts with your database is via FileMaker layouts – if you wish to find, edit, create or delete a record you need to specify the layout to use. Specifying the layout establishes the context for the query. It’s also important to note that everything on the layout is returned when performing a API command such as finding a record – this is why best practise has always been to only included the fields required by the PHP pages. The XML data that is returned by the API is quite verbose so you want to keep this to an absolute minimum as it can have significant performance implications if you don’t optimise your layouts for the API.

The following are some tips that you should be aware of when working with FileMaker Layouts and the PHP API:

Watch out for hidden fields not visible on the layout

In the screenshot below you can see there are only 5 fields on the ‘ContactsDetailsWeb’ layout: Title, First, Last, Initial and Name:

ContactsDetailsWeb

If we use the PHP API to request all the fields on that layout and echo this back to the browser:

$layout = $fm->getLayout('ContactsDetailsWeb');
// Get an associative array with the names of all fields as keys and FileMaker_Field objects as the array values
$layoutFields = $layout->getFields();
echo '<p><pre>'.print_r ($layoutFields).'</pre></p>';

we get the following:

Array(
 [Title] => FileMaker_FieldObject([_impl] => FileMaker_Field_ImplementationObject([_layout] => FileMaker_LayoutObject([_impl] => FileMaker_Layout_ImplementationObject([_fm] => FileMaker_ImplementationObject([V73ee434e] => Array(
 [charset] => UTF - 8[locale] => en[logLevel] => 3[hostspec] => 127.0.0.1[recordClass] => FileMaker_Record[prevalidate] => [database] => ContactsStarterSolution[username] => Admin[password] =>
 ) [Vea4b3413] => [V9a3dcbce] =>) [_name] => ContactsDetailsWeb[_fields] => Array * RECURSION * [_relatedSets] => Array() [_valueLists] => Array() [Vab234ad8] => Array() [_database] => ContactsStarterSolution[_extended] =>)) [_name] => Title[_autoEntered] => [_global] => [_maxRepeat] => 1[_validationMask] => 0[_validationRules] => Array() [_result] => text[_type] => normal[_valueList] => [_styleType] => [_maxCharacters] => 0)) [First] => FileMaker_FieldObject([_impl] => FileMaker_Field_ImplementationObject([_layout] => FileMaker_LayoutObject([_impl] => FileMaker_Layout_ImplementationObject([_fm] => FileMaker_ImplementationObject([V73ee434e] => Array(
 [charset] => UTF - 8[locale] => en[logLevel] => 3[hostspec] => 127.0.0.1[recordClass] => FileMaker_Record[prevalidate] => [database] => ContactsStarterSolution[username] => Admin[password] =>
 ) [Vea4b3413] => [V9a3dcbce] =>) [_name] => ContactsDetailsWeb[_fields] => Array * RECURSION * [_relatedSets] => Array() [_valueLists] => Array() [Vab234ad8] => Array() [_database] => ContactsStarterSolution[_extended] =>)) [_name] => First[_autoEntered] => 1[_global] => [_maxRepeat] => 1[_validationMask] => 0[_validationRules] => Array() [_result] => text[_type] => normal[_valueList] => [_styleType] => [_maxCharacters] => 0)) [Last] => FileMaker_FieldObject([_impl] => FileMaker_Field_ImplementationObject([_layout] => FileMaker_LayoutObject([_impl] => FileMaker_Layout_ImplementationObject([_fm] => FileMaker_ImplementationObject([V73ee434e] => Array(
 [charset] => UTF - 8[locale] => en[logLevel] => 3[hostspec] => 127.0.0.1[recordClass] => FileMaker_Record[prevalidate] => [database] => ContactsStarterSolution[username] => Admin[password] =>
 ) [Vea4b3413] => [V9a3dcbce] =>) [_name] => ContactsDetailsWeb[_fields] => Array * RECURSION * [_relatedSets] => Array() [_valueLists] => Array() [Vab234ad8] => Array() [_database] => ContactsStarterSolution[_extended] =>)) [_name] => Last[_autoEntered] => [_global] => [_maxRepeat] => 1[_validationMask] => 0[_validationRules] => Array() [_result] => text[_type] => normal[_valueList] => [_styleType] => [_maxCharacters] => 0)) [Initial] => FileMaker_FieldObject([_impl] => FileMaker_Field_ImplementationObject([_layout] => FileMaker_LayoutObject([_impl] => FileMaker_Layout_ImplementationObject([_fm] => FileMaker_ImplementationObject([V73ee434e] => Array(
 [charset] => UTF - 8[locale] => en[logLevel] => 3[hostspec] => 127.0.0.1[recordClass] => FileMaker_Record[prevalidate] => [database] => ContactsStarterSolution[username] => Admin[password] =>
 ) [Vea4b3413] => [V9a3dcbce] =>) [_name] => ContactsDetailsWeb[_fields] => Array * RECURSION * [_relatedSets] => Array() [_valueLists] => Array() [Vab234ad8] => Array() [_database] => ContactsStarterSolution[_extended] =>)) [_name] => Initial[_autoEntered] => 1[_global] => [_maxRepeat] => 1[_validationMask] => 0[_validationRules] => Array() [_result] => text[_type] => calculation[_valueList] => [_styleType] => [_maxCharacters] => 0)) [Name] => FileMaker_FieldObject([_impl] => FileMaker_Field_ImplementationObject([_layout] => FileMaker_LayoutObject([_impl] => FileMaker_Layout_ImplementationObject([_fm] => FileMaker_ImplementationObject([V73ee434e] => Array(
 [charset] => UTF - 8[locale] => en[logLevel] => 3[hostspec] => 127.0.0.1[recordClass] => FileMaker_Record[prevalidate] => [database] => ContactsStarterSolution[username] => Admin[password] =>
 ) [Vea4b3413] => [V9a3dcbce] =>) [_name] => ContactsDetailsWeb[_fields] => Array * RECURSION * [_relatedSets] => Array() [_valueLists] => Array() [Vab234ad8] => Array() [_database] => ContactsStarterSolution[_extended] =>)) [_name] => Name[_autoEntered] => [_global] => [_maxRepeat] => 1[_validationMask] => 0[_validationRules] => Array() [_result] => text[_type] => calculation[_valueList] => [_styleType] => [_maxCharacters] => 0)) [Mobile] => FileMaker_FieldObject([_impl] => FileMaker_Field_ImplementationObject([_layout] => FileMaker_LayoutObject([_impl] => FileMaker_Layout_ImplementationObject([_fm] => FileMaker_ImplementationObject([V73ee434e] => Array(
 [charset] => UTF - 8[locale] => en[logLevel] => 3[hostspec] => 127.0.0.1[recordClass] => FileMaker_Record[prevalidate] => [database] => ContactsStarterSolution[username] => Admin[password] =>
 ) [Vea4b3413] => [V9a3dcbce] =>) [_name] => ContactsDetailsWeb[_fields] => Array * RECURSION * [_relatedSets] => Array() [_valueLists] => Array() [Vab234ad8] => Array() [_database] => ContactsStarterSolution[_extended] =>)) [_name] => Mobile[_autoEntered] => [_global] => [_maxRepeat] => 1[_validationMask] => 0[_validationRules] => Array() [_result] => text[_type] => normal[_valueList] => [_styleType] => [_maxCharacters] => 0)) [OfficeEmail] => FileMaker_FieldObject([_impl] => FileMaker_Field_ImplementationObject([_layout] => FileMaker_LayoutObject([_impl] => FileMaker_Layout_ImplementationObject([_fm] => FileMaker_ImplementationObject([V73ee434e] => Array(
 [charset] => UTF - 8[locale] => en[logLevel] => 3[hostspec] => 127.0.0.1[recordClass] => FileMaker_Record[prevalidate] => [database] => ContactsStarterSolution[username] => Admin[password] =>
 ) [Vea4b3413] => [V9a3dcbce] =>) [_name] => ContactsDetailsWeb[_fields] => Array * RECURSION * [_relatedSets] => Array() [_valueLists] => Array() [Vab234ad8] => Array() [_database] => ContactsStarterSolution[_extended] =>)) [_name] => OfficeEmail[_autoEntered] => [_global] => [_maxRepeat] => 1[_validationMask] => 0[_validationRules] => Array() [_result] => text[_type] => normal[_valueList] => [_styleType] => [_maxCharacters] => 0)) [OfficePhone] => FileMaker_FieldObject([_impl] => FileMaker_Field_ImplementationObject([_layout] => FileMaker_LayoutObject([_impl] => FileMaker_Layout_ImplementationObject([_fm] => FileMaker_ImplementationObject([V73ee434e] => Array(
 [charset] => UTF - 8[locale] => en[logLevel] => 3[hostspec] => 127.0.0.1[recordClass] => FileMaker_Record[prevalidate] => [database] => ContactsStarterSolution[username] => Admin[password] =>
 ) [Vea4b3413] => [V9a3dcbce] =>) [_name] => ContactsDetailsWeb[_fields] => Array * RECURSION * [_relatedSets] => Array() [_valueLists] => Array() [Vab234ad8] => Array() [_database] => ContactsStarterSolution[_extended] =>)) [_name] => OfficePhone[_autoEntered] => [_global] => [_maxRepeat] => 1[_validationMask] => 0[_validationRules] => Array() [_result] => text[_type] => normal[_valueList] => [_styleType] => [_maxCharacters] => 0)) [Fax] => FileMaker_FieldObject([_impl] => FileMaker_Field_ImplementationObject([_layout] => FileMaker_LayoutObject([_impl] => FileMaker_Layout_ImplementationObject([_fm] => FileMaker_ImplementationObject([V73ee434e] => Array(
 [charset] => UTF - 8[locale] => en[logLevel] => 3[hostspec] => 127.0.0.1[recordClass] => FileMaker_Record[prevalidate] => [database] => ContactsStarterSolution[username] => Admin[password] =>
 ) [Vea4b3413] => [V9a3dcbce] =>) [_name] => ContactsDetailsWeb[_fields] => Array * RECURSION * [_relatedSets] => Array() [_valueLists] => Array() [Vab234ad8] => Array() [_database] => ContactsStarterSolution[_extended] =>)) [_name] => Fax[_autoEntered] => [_global] => [_maxRepeat] => 1[_validationMask] => 0[_validationRules] => Array() [_result] => text[_type] => normal[_valueList] => [_styleType] => [_maxCharacters] => 0)) [PersonalEmail] => FileMaker_FieldObject([_impl] => FileMaker_Field_ImplementationObject([_layout] => FileMaker_LayoutObject([_impl] => FileMaker_Layout_ImplementationObject([_fm] => FileMaker_ImplementationObject([V73ee434e] => Array(
 [charset] => UTF - 8[locale] => en[logLevel] => 3[hostspec] => 127.0.0.1[recordClass] => FileMaker_Record[prevalidate] => [database] => ContactsStarterSolution[username] => Admin[password] =>
 ) [Vea4b3413] => [V9a3dcbce] =>) [_name] => ContactsDetailsWeb[_fields] => Array * RECURSION * [_relatedSets] => Array() [_valueLists] => Array() [Vab234ad8] => Array() [_database] => ContactsStarterSolution[_extended] =>)) [_name] => PersonalEmail[_autoEntered] => [_global] => [_maxRepeat] => 1[_validationMask] => 0[_validationRules] => Array() [_result] => text[_type] => normal[_valueList] => [_styleType] => [_maxCharacters] => 0)) [PersonalPhone] => FileMaker_FieldObject([_impl] => FileMaker_Field_ImplementationObject([_layout] => FileMaker_LayoutObject([_impl] => FileMaker_Layout_ImplementationObject([_fm] => FileMaker_ImplementationObject([V73ee434e] => Array(
 [charset] => UTF - 8[locale] => en[logLevel] => 3[hostspec] => 127.0.0.1[recordClass] => FileMaker_Record[prevalidate] => [database] => ContactsStarterSolution[username] => Admin[password] =>
 ) [Vea4b3413] => [V9a3dcbce] =>) [_name] => ContactsDetailsWeb[_fields] => Array * RECURSION * [_relatedSets] => Array() [_valueLists] => Array() [Vab234ad8] => Array() [_database] => ContactsStarterSolution[_extended] =>)) [_name] => PersonalPhone[_autoEntered] => [_global] => [_maxRepeat] => 1[_validationMask] => 0[_validationRules] => Array() [_result] => text[_type] => normal[_valueList] => [_styleType] => [_maxCharacters] => 0))
 )

As you can see the result is quite verbose and includes some additional fields that you can’t see on the layout: Mobile, OfficeEmail, OfficePhone, Fax, PersonalEmail and PersonalPhone. So how does the PHP API see these fields? Let’s have a look at the same layout in Layout mode:

ContactsDetailsWeb Layout Mode

You can see these fields are hidden off to the right of the layout’s visible boundary and don’t appear in Browse mode using the FileMaker Pro client, but the PHP API sees all fields on the layout including the hidden fields. It’s advisable to not only have PHP specific layouts that contain just the fields you need for the PHP pages but don’t park/hide other fields off the edge of the layout. The PHP API will retrieve them as well and add additional overhead to your queries causing pages to take longer to load.

This only applies to those using FileMaker Pro/Server v12 or above – the ability to set a layout width was introduced in FileMaker Pro v12.

Beware of Layout Folder Names

We encountered an issue that caused quite a few hours of troubleshooting to resolve but seems obvious in hindsight. Here’s a screenshot showing a list of layouts in a FileMaker database:

List of Layouts

We had a PHP page that interacted with the ‘ContactsPHP’ layout – it would find records, edit records, create records etc and had been working fine for weeks without any issues when all of a sudden it stopped working one day. We ran multiple tests, double checked the spelling of the layout names, checked privileges etc but couldn’t understand what had happened.

We used the API to list out all the layouts in the database and echo this back to the browser:

$layout = $fm->getLayout('ContactsDetailsWeb');
$layouts = $fm->listLayouts();
echo '<p><pre>'.print_r ($layouts).'</pre></p>';

This returned the following array showing the ‘ContactsPHP’ layout:

Array(
 [0] => StartupScreen[1] => - [2] => Contacts[3] => ContactDetails[4] => Contacts | iPad[5] => ContactDetails | iPad[6] => Contacts | iPhone[7] => ContactDetails | iPhone[8] => Contacts | Web[9] => ContactDetails | Web[10] => ContactsDetailsWeb[11] => - [12] => Labels[13] => ContactList[14] => - [15] => ContactsPHP[16] => [17] => [18] => [19] => [20] => [21] => [22] => [23] => [24] => [25] =>
 )

Once again we couldn’t spot any issues with the layouts – the ‘ContactsPHP’ layout was amongst the list of layouts returned.

We then decided to rename the layout, update the PHP page and run some tests and it started working again. We renamed it back to ‘ContactsPHP’ and it failed immediately. Finally the penny dropped – we had a layout folder with exactly the same name that appear above the layout in the list of layouts. We tried renaming the layout folder and voila it started working again. It seems that for certain commands having a layout folder with the same name as the layout works fine, but there are times when it will cause the API to fail. We haven’t been able to isolate the specific circumstances yet but the safest approach is to simply avoid having layout folders with the same names as actual layouts entirely – remember that layout folders are special layout types and it appears that the PHP API can still interact with them when they share the same name as actual layouts.

We’ve run a number of tests and have been able to reproduce this many times on a sample file. We’ve found that if you’re checking for a 401 ‘no records found’ error with a find command like this:

if (FileMaker::isError($result)) {
    if ($result->code = 401) {
    $findError = $result->getMessage(). ' (' . $result->code . ')</p>';
    } else {
    $findError = $result->getMessage(). ' (' . $result->code . ')</p>';
    }
}

you will be mislead into thinking there was a real 401 ‘no records found’. If you examine the FileMaker_Error Object you should see it’s returning a 102 error:

[code] => 102

which is “Field is missing” and makes more sense if it’s using the Layout Folder instead of the actual Layout with the same name (we’ve also seen other instances where the API returns a misleading 401 error, such as when the XML returned is too large for the PHP XML  parser to handle – another reason to carefully optimise your PHP layouts). We first noticed this when we had a Layout Folder named ‘Websites’ and another layout used for a PHP find command called ‘WebSites’, but we have been able to reproduce this with other names as well.

Find Commands and the setResultLayout method

As we’ve discussed it’s ideal to optimise your FileMaker layouts used for the PHP API to only have the required fields on the layout necessary for the particular command, such as creating a new record or performing a find. It’s also possible to further optimise your queries to use separate layouts for the find command and the find results. For example you might have a form on your website that allows users to search for contact records by first name and last name only, however the PHP page is using a layout that has 25 fields from the Contacts table as you using the one Contacts layout for all PHP requests. For smaller record sets you can probably get away with this, but if you would like to optimise this further you can create a layout just for the find command with the 2 fields that you can search on and then have a separate layout that is used to display the find results, which might only require 6 fields for first name, last name, company, email, phone and mobile.

A typical PHP API find command that uses the one layout for both the find request and the find results looks like this:

$request = $fm->newFindCommand('ContactsDetailsWeb');
$request->addFindCriterion('FirstName', 'John');
$result = $request->execute();
if (FileMaker::isError($result)) {
    if ($result->code = 401) {
    $findError = 'There are no Records that match that request: '. ' (' . $result->code . ')';
    } else {
    $findError = 'Find Error: '. $result->getMessage(). ' (' . $result->code . ')';
    }
} else {
$records = $result->getRecords();
}

Here we are performing a find command on the ContactsDetailsWeb layout for any records that have a FirstName that equals ‘John’. We are then checking for any errors with the find command – if there are no matching records it will return a 401 error code, otherwise it will return another find error. If there is no error we are then retrieving all the found records.

To modify the find request to also use a different layout for the find results (to reduce the amount of XML data returned by the API by specifying a layout with just the fields required to show the search results) would look like this:

$request = $fm->newFindCommand('ContactsDetailsWeb');
$request->addFindCriterion('FirstName', 'John');
$request->setResultLayout( 'ContactsSearchResults' );
$result = $request->execute();
if (FileMaker::isError($result)) {
    if ($result->code = 401) {
    $findError = 'There are no Records that match that request: '. ' (' . $result->code . ')';
    } else {
    $findError = 'Find Error: '. $result->getMessage(). ' (' . $result->code . ')';
    }
} else {
$records = $result->getRecords();
}

The only difference between the 2 examples is the addition of this line that uses the setResultLayout method :

$request->setResultLayout( 'ContactsSearchResults' );

The setResultLayout method requests that the command’s result be returned in a layout different from the current layout. This certainly helps speed up the display of search results, however it does have one side effect. When you use the setResultLayout method as part of your find command and there are find errors (such as no records found) the API no longer returns a FileMaker_Error Object but instead returns a FileMaker_Result Object. This is a subtle but important difference – it means you can no longer simply trap for any find errors by calling:

if (FileMaker::isError($result)) {

as you will not get a FileMaker_Error Object. You can check for the number of matching records found, e.g.:

$found = $result->getFoundSetCount();

but it is certainly not as neat as simply checking for a FileMaker_Error Object.

I had trouble finding out more information about the setResultLayout method and ended up submitting a bug report with FileMaker Inc. The response they came back with suggests this is a known limitation when using the setResultLayout method. It would be great if this could be addressed in a future release of the PHP API.

(N.B. all references are to FileMaker Pro/FileMaker Server v14 which was the current shipping version at the time this article was written)

North West Sydney FileMaker Developer March Meetup

Databuzz has been organising an informal gathering of Sydney based FileMaker developers for the past few years – we  catch up over lunch at the Pennant Hills Bowling Club in north west Sydney 3-4 times per year. It started as an informal lunch between a number of developers who live within a few suburbs of each other (and the majority were named Andrew). We’ve since spread the word and called our gathering the the North West Sydney FileMaker Developer Meetup.

We don’t have a website and there’s no formal presentations – we sit around the table over a meal and a few drinks discussing all things FileMaker. We’ve recently setup a mailing list so you can be notified of upcoming meetings – we’re planning on setting the dates for the rest of 2016 in the next few weeks so everyone can put these into their diaries. If you would like to join the mailing list here’s the signup form.

The first meetup for 2016 will be happening in March where we will be discussing FileMaker’s new iOS App SDK.

Here’s the details:

Date: Friday, 18 March 2016
Venue: Pennant Hills Bowling Club (short walk from Pennant Hills train station)
Time: 12.30pm

Anyone is welcome to attend – no RSVP required.

FileMaker Inc. releases State of the Custom App Report

FileMaker Inc. today released their State of the Custom App Report –  a survey of custom app usage and results. After surveying over 490 FileMaker customers internationally in November/December 2015 they found that teams are building and using custom apps to achieve a meaningful impact for their organisations. The Key Findings included:

  • 74% saw an increase in productivity
  • 81% saw a reduction in inefficient tasks
  • 60% saw a return on investment
  • 73% consider mobility moderately to extremely important
  • 82% built internally and 52% built in less than 3 months

Custom apps are changing the way teams work – Databuzz has helped many organisations to plan, create and deploy a custom app using FileMaker Go for the iPhone and iPad in a wide variety of industries. Customers love to automate inefficient processes and reduce unnecessary paperwork and double data entry, boosting the productivity of their teams.

You can download a copy of the report here.

FileMaker Inc. has also recently released the first in a three-part series of free how-to guides that will lead teams through the process of building a custom app using the FileMaker Platform. The three-part series will cover:

  1. Plan – Your first steps toward creating a successful custom app
  2. Create – Your step-by-step guide to successfully create an app with FileMaker
  3. Deploy  – Your step-by-step guide to successfully deploy an app with FileMaker

Click here to download the Plan ebook – the Create and Deploy eBooks will be released over the next few months.

If you would like to discuss a custom app for your organisation please contact us for a free initial consultation.

Coming Soon – fmAccounting Link (MYOB AccountRight Edition)

Ever since we released our FileMaker to Xero integration solution – fmAccounting Link (Xero Edition) – in 2014 we’ve been planning to release a version for the MYOB Accounting platform. We ended up focussing solely on the Xero version for most of 2015, adding new features as Xero expanded their API and in response to customer requests.

We’ve finally been able to focus some resources on the MYOB version and while we’re not quite ready to release it to the general public we’re very happy with the progress that we’re making and wanted to share some details with you. We’re planning on releasing the following versions:

  1. fmAccounting Link (MYOB AccountRight Edition) – this will be the first version released and will work with the MYOB AccountRight Live API. There are a number of versions of AccountRight available, including Standard, Plus and Premier – as long as you’re using AccountRight Live (2015.x versions or later) you will be able to use our solution to integrate FileMaker with MYOB. Development of this version is largely completed – we still need to do more testing and create the documentation and videos etc, but we’re planning for a March 2016 release.
  2. fmAccounting Link (MYOB Essentials Edition) – this will be the second version released and will work with the MYOB Essentials Accounting API. MYOB Essentials is MYOB’s browser based accounting solution. We don’t have a release date for this at the moment but we’re hoping we can leverage a lot of the development for the AccountRight edition and have this ready in the April/May timeframe.

The initial release will allow you to perform the most requested integration functions between FileMaker and MYOB, including:

  • upload a Contact from FileMaker to MYOB
  • download Contacts from MYOB to FileMaker
  • upload an Invoice from FileMaker to MYOB
  • upload a Payment from FileMaker to MYOB

fmAccounting Link (MYOB AccountRight Edition) will work on both Windows and Macintosh platforms and work with FileMaker Pro v12, 13 and 14. It will be completely unlocked so you can integrate it into your existing FileMaker solution in whatever way suits you or your developer best.

We’re very excited about this release as FileMaker MYOB integration has always been clunky and involved lots of exporting and importing of .tab files or working with their ODBC driver which was Windows only and had it’s own set of limitations. The new MYOB APIs allow for true integration without having to export or import any data and can run on both Windows and the Macintosh platforms – in fact you can use your Mac to upload invoices to your MYOB AccountRight file, even though there is no native Mac OS X version of MYOB AccountRight!

Unfortunately there’s no developer API for AccountEdge, the Mac version of MYOB so we can’t do the same integration as we can with AccountRight and Essentials. Hopefully MYOB will release API access to AccountEdge in the future.

Please contact us if you have any questions about fmAccounting Link (MYOB AccountRight Edition) – if you would like to be notified when we release fmAccounting Link (MYOB AccountRight Edition) please join our mailing list here.

fmSMS now supports over 70 SMS Gateways

We’ve just finished updating fmSMS to support 3 more SMS Gateways, bring the total number of supported SMS Gateways to over 70! The most recent additions were

  • ClickSend – a global SMS Gateway (head office in Perth, Australia)
  • directSMS – an Australian based SMS Gateway
  • Wholesale SMS – another Australian based SMS Gateway

If there are any SMS Gateways that you would like us to support please contact us and let us know the details – we’re more than happy to support as many SMS Gateways as possible.