Yesterday I arrived here in San Antonio in the JW Mariott Hill Country Hotel for the
FileMaker Developer Conference.
I already found my way through this huge resort and found the registration desk.
So if you are here nearby, we can of course meet for diner or a coffee and chat about FileMaker, Xojo or Plugins.
Today we want to show you how to translate a PHP script with CURL commands step by step to a FileMaker script. Here is a PHP script:
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($params))
);
$result = curl_exec($ch);
curl_close($ch);
So lets go through the script line by line. First line is "$ch = curl_init();" which simply creates a new curl session in PHP. The result is the handle which is stored in $ch variable. This handle value (a number) is than used to to reference the CURL session later in the script. In FileMaker, the call to the MBS plugin is MBS("
CURL.New"). This function starts a new session and we store it in a variable, exactly as in PHP.
Next calls set a couple of options. First for SSL, you should use a certificate to have the plugin verify the identity of the server. But in this example we simply disable verification. So we use the calls MBS("
CURL.SetOptionSSLVerifyPeer"; $curl; 0) and MBS("
CURL.SetOptionSSLVerifyHost"; $curl; 0). The option CURLOPT_RETURNTRANSFER in PHP is not needed by the plugin. The plugin automatically collects the data downloaded and your script can query the result later.
Next option sets the URL to use. This can be an URL for one of the supported protocols including FTP(S), HTTP(S) or SFTP. In the script we use MBS("
CURL.SetOptionURL"; $curl; $URL) to pass the URL as text to the plugin. Than we can set other options like a 30 seconds timeout using MBS("
CURL.SetOptionTimeout"; $curl; 30).
As this example transfer is a HTTP Post operation for sending form data, we have to turn on the post option. All the web services like SOAP normally use POST queries which use the request xml as the form data. So with the call MBS("
CURL.SetOptionPost"; $curl; 1) we enable post operation. With the custom request option you can of course explicit also set POST, but here it is optional: MBS("
CURL.SetOptionCustomRequest"; $curl; "POST"). Often we custom requests like DELETE with a REST API.
For the actual content of the transfer we have a couple of functions to set input data. So for the CURLOPT_POSTFIELDS we can use the plugin function MBS("
CURL.SetOptionPostFields"; $curl; $params) with the right text in the variable. The plugin will copy the data for the transfer and also set internally the size for the transfer. So when setting the http headers (CURLOPT_POSTFIELDS), we don't need to include the Content-Length line with MBS Plugin. For the http headers we need to pass the content type to the plugin to inform our web server that we pass data as JSON here: MBS("
CURL.SetOptionHTTPHeader"; $curl; "Content-Type: application/json").
To run the transfer, the PHP script calls curl_exec function. In the plugin we call MBS("
CURL.Perform"; $curl) and get back an error code. This error code is zero on success. For a list of error codes, please check the plugin documentation. The PHP function returns the result directly. But with our plugin, we have the function CURL.GetResultAsText. Depending of the transfer, the result could be text, an image or some other data. To show text in a field in FileMaker, we also need to make sure the line endings match. FileMaker always uses Mac line endings, so we use the
String.ReplaceNewline function. So we get the result with the calculation MBS("
String.ReplaceNewline"; MBS("
CURL.GetResultAsText"; $curl);1).
To know what reason a failure has, you can get debug messages. So before the perform call, we enable verbose debug messages with a call to MBS("
CURL.SetOptionVerbose"; $curl; 1). To actually get the text for showing in a field, we query the messages as text with this call: MBS("
String.ReplaceNewline"; MBS("CURL.GetDebugAsText"; $curl);1).
Finally we do some cleanup. In PHP the curl_close call and in FileMaker the MBS("
CURL.Cleanup"; $curl) call. As you see the function calls are quite similar and you can easily translate PHP scripts using CURL for use in FileMaker.
The final script looks like this:
Set Variable [$curl; Value: MBS("
CURL.New")]
Set Variable [$result; Value: MBS("
CURL.SetOptionURL"; $curl; $URL)]
Set Variable [$result; Value: MBS("
CURL.SetOptionSSLVerifyPeer"; $curl; 0)]
Set Variable [$result; Value: MBS("
CURL.SetOptionSSLVerifyHost"; $curl; 0)]
Set Variable [$result; Value: MBS("
CURL.SetOptionVerbose"; $curl; 1)]
Set Variable [$result; Value: MBS("
CURL.SetOptionTimeout"; $curl; 30)]
Set Variable [$result; Value: MBS("
CURL.SetOptionPost"; $curl; 1)]
Set Variable [$result; Value: MBS("
CURL.SetOptionPostFields"; $curl; $params)]
Set Variable [$result; Value: MBS("
CURL.SetOptionHTTPHeader"; $curl; "Content-Type: application/json")]
Set Field [Webservice::Error; MBS("
CURL.Perform"; $curl)]
Set Field [Webservice::Input; $input]
Set Field [Webservice::Result; MBS("
String.ReplaceNewline"; MBS("
CURL.GetResultAsText"; $curl);1)]
Set Field [Webservice::DebugMessages; MBS("
String.ReplaceNewline"; MBS("
CURL.GetDebugAsText"; $curl);1)]
Set Variable [$result; Value: MBS("
CURL.Cleanup"; $curl)]
New in this prerelease of the 14.3 plugins:
- Added EncodeEmailSubjectMBS function.
- Added more parameters to AUPlayerMBS.LoadFile.
- Added two VAT ID check examples for your convenience.
- Updated LibXL to version 3.6.0.
Download:
macsw.de/plugin/Prerelease. Or ask us to be added to our shared Dropbox folder.
New in this prerelease of the 4.3 plugins:
- Added QLPreviewPanel functions.
- Added String.EncodeEmailSubject function.
- Updated FileDialog.SelectFolderDialog to use newer API to get nicer dialog.
- Added support for Windows for ListDialog functions.
- Added String.DecodeFromXML and String.EncodeToXML.
- Updated LibXL to version 3.6.0.
Download at
monkeybreadsoftware.de/filemaker/files/Prerelease/ or ask for being added to the dropbox shared folder.
Version 3.6.0
* added autofit column width support (use -1 for width parameter in setCol method)
* added hyperlink support
* added direct access to merges
* added a possibility to create xltx and xlsm files
* added a possibility to read errors "#NULL!", "#DIV/0!", "#VALUE!", "#REF!", "#NAME?", "#NUM!", "#N/A" with readFormula method from xls files.
* added support Windows-1251 encoding in XML files
* added support RGB colors without alpha component in xlsx files
* added a cell range support in formula expressions (xls)
* improved performance of cellFormat() method (xls)
* optimized xls files reading
* fixed a bug with copying a sheet with pictures in addSheet() (xls)
* fixed a memory bug when used a second parameter in addSheet()
* fixed issue with nested quotes in formula expressions (xls)
* fixed bug with using a single quote in formula expressions (xls)
* fixed issue with loading some xlsx files which were created in Numbers on Mac ("Unknown exception")
* fixed bug with UTF-8 encoding in custom format strings (xlsx)
* fixed bug with reading some non-standard characters (xlsx)
New methods:
* Sheet MergeSize - Returns a number of merged cells in this worksheet.
* Sheet Merge - Gets the merged cells by index.
* Sheet DelMergeByIndex - Removes merged cells by index.
* Sheet HyperlinkSize - Returns the number of hyperlinks in the sheet.
* Sheet Hyperlink - Gets the hyperlink and its coordianates by index.
* Sheet DelHyperlink - Removes hyperlink by index.
* Sheet AddHyperlink - Adds the new hyperlink.
* Sheet SplitInfo - Gets the split information (position of frozen pane) in the sheet.
this will be included in next prerelease plugins in a few days.
With CURL plugin functions you can use the IMAP protocol for downloading emails. The plugin connects to the imap server, performs a query and returns result, e.g. a list of email, the content of an email or something else. As you probably want to use SSL, please use "imaps://" as prefix. Our examples are normally without SSL.
So for querying folders, you can simply query URL:
URL = "imap://server/"
This gives you back a result like "." and "INBOX" or other folder names.
To query list of emails, you run a custom request to fetch flags for all emails like this:
Same URL with /INBOX to specify folder and you use OptionCustomRequest with "FETCH 1:* FLAGS".
Than to query a single email, you use no custom request, but you add to URL the postfix "/INBOX/;UID=1". 1 is here the index of the email you want to query.
Now if you need to delete email, change flags or create folders, you can check the IMAP specifications and pass commands using CustomRequest option.
For next plugin version, we'll have examples showing this.
In the last days I collected a list of German Xojo Developers available for consulting:
Newer version available
If you like to be added, please email me with details.
Over 70 sessions at the biggest FileMaker event of the year!
Still time to register for the FileMaker Developer Conference!
There is still time to register for the FileMaker Developer Conference with
over 70 sessions to choose from at the biggest FileMaker event of the year. Come to DevCon 2014 and discover how the FileMaker Platform can help you run your business without boundaries. Join over 1,200 developers in San Antonio, Texas from July 28-31, 2014 and take the first steps to achieving your business goals.
Take a look at
this year's DevCon Exhibitors. The FileMaker community is rich with smart, creative developers that are creating add-ons, plug-ins, and ready-made solutions to use with the FileMaker Platform. They also offer services that will make using FileMaker even more delightful and customized to your needs. If you’re looking to solve a business problem, come to DevCon and see how others can help make your job easier.
Other FileMaker conferences:
- FM Summit, 9th and 10th October in Den Haag, see fmsummit.info
- FM Devcon, 14th to 16th October in Bolonga, see fmdevcon.com
- FileMaker Konferenz, 16th to 18th October in Winterthur, see filemaker-konferenz.com
- fm conférence, 23rd to 25th October in Toulouse, see fmconf.com
- .fmp[x]Berlin, 4th to 6th June 2015 in Berlin, see dotfmp.com/tiki-index.php
Over the summer the conference is coming closer quickly. Just about 2 month left and our hotel contingent will end soon. So if you want to come and you have not yet a hotel room, please reserve one soon.
Hotel in Koblenz is reserved for 17th to 20th September 2014.
17th -
training in German
18th and 19th -
conference in English
20th -
training in English
Registration is open and we are looking for speakers. If you are interested in coming, you can already email me to put you on the list.
New in this prerelease of the 14.3 plugins:
- Fixed a problem with Carbon apps if they create a new picture in plugin. Plugin now calls SetGWorld to make sure there is a valid gworld.
- Fixed plugin bug in DynaPDFMBS.GetTextHeightExAnsi and others.
- Updated to OpenSSL 1.0.1h.
- Changed NSOpenPanelMBS/NSSavePanelMBS to keep reference of itself while sheet is open to avoid trouble with objects being destroyed to early.
- Added IKCameraDeviceViewControlMBS, IKDeviceBrowserViewControlMBS and IKScannerDeviceViewControlMBS controls.
- Added events for ICDeviceBrowserMBS, IKCameraDeviceViewMBS, IKDeviceBrowserViewMBS and IKScannerDeviceViewMBS classes.
- Fixed an issue where automatic conversion to variant did return a CFObjectMBS instead of a NSFontMBS.
Download:
macsw.de/plugin/Prerelease. Or ask us to be added to our shared Dropbox folder.
New in this prerelease of the 4.3 plugins:
- The functions Time.UnixTimeStamp, ZipFile.CreateFile and SQL.SetParamAsDateTime now report an error if the timestamp parameter is not a time, date or timestamp value. So please don't simply pass text there.
- Added NetworkInterfaces functions.
- Fixed a problem with reading file data from container.
- The plugin can now read compressed container data.
- Added DialogModifications functions.
- Added Barcode.WriteFile function.
- Added functions to query special folders.
- Updated to OpenSSL 1.0.1h.
- Added DragDrop.CreateWithControl parameters to define an offset relative to container.
- WebViewer field setter/getter functions can now find field by name if form name is empty and find fields in all forms.
- Changed CGImageSource.ImageAtIndex and CGImageSource.ThumbnailAtIndex to convert image to RGB color space if necessary.
- For DynaPDF PDF import we now automatically enable duplicate check and normalize by default.
Download at
monkeybreadsoftware.de/filemaker/files/Prerelease/ or ask for being added to the dropbox shared folder.
for our MBS Complete plugin users, we have this distribution:
Spain: 2%
Switzerland: 3%
Netherlands: 3%
Canada: 3%
Japan: 3%
Australia: 3%
France: 4%
Italy: 4%
United Kingdom: 8%
Germany: 12%
United States: 40%
and just a few in Egypt, Colombia, South Korea, Iceland, Latvia, Costa Rica, Dominican Republic, Ireland, Macau, Kuwait, Madagaskar, Jamaica, Jordan, Estonia, Cyprus, Uruguay, New Caledonia, Pakistan, Malaysia, Argentina, Croatia, Puerto Rico, Slovakia, Chile, Serbia, Israel, Georgia, Turkey, Romania, Czech republic, Namibia, Slovenia, Ukraine, Indonesia, Luxembourg, Taiwan, Hong Kong, Portugal, Greece, India, Thailand, Poland, South Africa, Hungary, Finland, Russia, China, Singapore, United Arab Emirates, Norway, Denmark, Brazil, New Zealand, Mexico, Austria, Sweden and Belgium.
In general plugin users are living where a lot of people live, who speak some english (to read documentation) and have enough knowledge to do software development and know about Xojo.
I always expected Apple to drop it at some date, but now it seems like Xojo Inc. drops Carbon for 2014r3 release later this year.
For us, we will continue to provide plugin with carbon code and also continue to build our own projects for Carbon using existing Xojo versions for some years.
See blog:
xojo.com/blog/en/2014/07/the-end-of-carbon-support.php
Just a quick note that in Xojo 2014r2 the RegEx plugin from Xojo links to the pcre library in /usr/lib. That's a reason for Apple to reject your application.
So if you want to submit an app to Mac App Store, you have a few choices:
- Wait for a 2014r2.1 or r3 release to fix it.
- Do not use RegEx class.
- Use MBS RegExMBS class instead.
And our
MBS RegEx plugin has a few other advantages.
Ad the links to
forum thread and the
feedback case 34392.
If you import PDF files into DynaPDF for combining or editing, you may want to use the if2DuplicateCheck flag for SetImportFlags2. This enables the engine to replace duplicate items in the PDFs with one common item. e.g. avoid storing images or fonts twice if referenced on several places.
With next FileMaker plugin we enable it by default. Xojo developers please use a line like this:
call pdf.SetImportFlags2( bitwiseor(pdf.kif2DuplicateCheck, pdf.kif2Normalize))
From 2015 on some things
change in VAT rules. The VAT collected is now the VAT of the country of client and no longer the VAT of the seller's country.
One of the good things is that companies like Apple now need to bill us with German VAT instead of Luxembourg or Ireland VAT. They have a different percentage so it was cheaper for Apple, but we had to do a lot of paper work to reclaim the VAT for our business.
Now from 2015 Apple and also MBS need to charge VAT for EU customers based on their country. But as our company wants to keep things simply and not report VAT for 28 countries, we simply delegate this to Share-it.
So if you are located in the European Union (but not in Germany) and you want to order something from us and you have no VAT ID, we will send you to Share-It. We will no longer process those orders ourself via bank transfer or Paypal.
The July/August 2014 (12.4) issue of xDev Magazine is now available. Here's
a quick preview of what's inside:
* What About Swift? * by Marc Zeedar
Apple has introduced a new programming language. How does it compare to Xojo? Marc takes a
quick first look at Swift.
* Inside ServerSocket * by Christian Schmitz
Christian explains how to use the ServerSocket control in your own apps, to let you process your own network connections.
* Writing OS X Apps for Game Center * by Tom Baumgartner
Apple's Game Center provides developers with an API for connecting gamers. However, creating a Game Center app with Xojo requires extensive steps. Never fear: Tom's figured it out and will show you how to get started.
* Mercurial and Xojo * by Craig Boyd
Mercurial is a power version control system. Craig likes its command-line interface and shows how to use it with your Xojo projects.
Plus columns on OOP, database design, optimization tricks, creating usable
code, Regex lookarounds, and much more.
* World Cup Sale! *
Don't forget about our World Cup sale -- there's only a couple of weeks left until the 2014 World Cup (and the sale) ends on July 13, 2014. Until then, just use coupon code WORLDCUP to save 15% on your order! (A $25 minimum order is required, but there are no other restrictions. It even works on renewals!)
* * * Print Edition * * *
Would you prefer xDev in print? Now you can! We've partnered with MagCloud, a third party print-on-demand service, and now you can obtain xDev in a full-color printed copy (much higher quality than anything we've offered in the past). Issues 6.5-12.3 are available now (12.4 will be available shortly):
rbd.magcloud.com
Less than 24 hours until the FileMaker users meeting in Hamburg.
You can come and learn about our latest MBS FileMaker plugin.
Meeting is in Block House Wandsbek in Hamburg at 7pm.
see
filemaker-magazin.de/service/filemaker-stammtische/hamburg
New in this prerelease of the 14.3 plugins:
- Added ChromiumBrowserMBS.LibVersion function.
- Added several IK and IC classes to cover all the Cocoa ImageCapture classes from Apple.
- Adjusted plugin to work better with Chromium in future Xojo versions.
- DynaPDF plugin no longer complains about a required Pro license for the InsertMetaFile functions. Those required years ago a Pro license, but today only a Lite one.
- Added WinRTFDataMBS and WinInsertImageMBS to TextArea control.
- Deprecated a few of the controls like oval and rectangle as I think the built in onces are better long term.
- Added more methods to NSSoundMBS class.
- Added events willOpen, willHighlightItem and DidClose event to NSMenuMBS class.
- Updated DynaPDF to version 3.0.33.96.
- You can now set offsets in PictureMBS class.
- Fixed byte order for PictureMBS when using pictures with alpha channel on Windows.
- Added folderitem.WinThumbnailMBS to get thumbnails of files on Windows.
- Added parameters to Picture.CombineMBS to select area.
Download:
macsw.de/plugin/Prerelease. Or ask us to be added to our shared Dropbox folder.
New in this prerelease of the 4.3 plugins:
- Added Container.ExtractStream and Container.RenameStream.
- Added IsClient, IsRuntime and IsServer functions.
- Added ZipFile.CRCFile function.
- Added Socket.LastError function.
- Updated DynaPDF to version 3.0.33.96.
- Added DragDrop.GetTypes function.
- Changed DragDrop.CreateWithSize to be relative to content frame.
- Changed GMImage.Annotate to accept gravity parameter also as text and not just as number.
- Weak linked all libraries. This way even on older Mac OS X versions the plugin should load again. But if functions like GraphicsMagick use a function which does not exist on Mac OS X 10.4 or 10.5, it may crash.
- Added SQL.GetFieldAsPDF and SQL.GetParamAsPDF.
- Added Files.SetPosixPermissions and Files.GetPosixPermissions.
- Added function to control size of list dialog.
- Fixed an issue where ListDialog being closed left FileMaker window disabled.
Download at
monkeybreadsoftware.de/filemaker/files/Prerelease/ or ask for being added to the dropbox shared folder.
You can always connect via ODBC on a Mac with setting up an ODBC driver for MS SQL. But using the freetds open source library, we can actually connect from Xojo or FileMaker to the MS SQL Server without a special setup.
- you get the freetds library, e.g. precompiled from our website
- you start a SQL Connection
you set the OptionLibraryODBC with the file path to the library.- you use an ODBC connecting string like "DRIVER={
FREETDS" + pathToLib + "};Server=192.168.2.32;UId=SA;PWD=manager;Database=test;TDS_VERSION=7.2;Port=1433".
That should work. Of course firewall must let the port open and your server actually must be configured to use this port (or some other).
Update for Xojo:
If you want to place the libtdsodbc.dylib into the Apps Resources Folder (Mac) within the Bundle, add a Build Step to copy the File (Build & Debug Mode) to the Resources Folder and use the following code to access it:
dim libtdsodbc as FolderItem
libtdsodbc = App.ExecutableFile.Parent.Parent.Child("Resources").Child("libtdsodbc.dylib")