ACF-Plugin Version 1.7.1.7

Version 1.7.1.7 marks a significant upgrade for the ACF plugin. Although still in production, it has crossed many hurdles and is nearing completion.

Hardware and Software Compatibility

Version 1.7.1.7 is a universal plugin, compatible with both Mac Intel and Mac ARM (M1, M2, M3) machines, as well as Windows versions. It seamlessly integrates with all FileMaker versions from 12 onwards. For macOS users, it is compatible with macOS 12.3 and later, including the current macOS version. Windows users can enjoy support for Windows 8, Windows 10, and Windows 11, in addition to Windows Server operating systems.

Document Service Functions

The Document service functions have undergone a complete rewrite to enhance stability and flexibility. They are now accessible from within the ACF language in addition to plugin calls made from FileMaker.

MySQL Functions

The MySQL functions have been completely overhauled, ensuring backward compatibility with the previous plugin version (1.6.3) while introducing a range of new features.

FileMaker SQL Functions

The FileMaker SQL Functions now support placeholder logic in SQL statements, allowing additional parameters to fill placeholders. Variable data types determine the formatting used, making SQL statements more versatile and dynamic.

date from, to = now();
from = to - 7;
string col_sep = "||", row_sep = "\r";

string bb = ExecuteSQL("Select Invoice_no, Payable_amounth FROM Invoices 
    WHERE Invoice_Date BETWEEN = :from and :to", col_sep, row_sep);

// Before executing this, the final SQL will be:
// Select Invoice_no, Payable_amounth FROM Invoices 
// WHERE Invoice_Date BETWEEN DATE '2023-10-31' and DATE '2023-11-06'

New Datatype: XML_Object

Introducing functions that simplify the creation and manipulation of XML documents, as well as parsing XML documents. You can effortlessly build a document, convert it to a string for saving or transmitting, and parse incoming XML documents to extract data for integration into your database or any other purpose.

Example:

Function ExampleFunction()

    XML xmlvar;
    xmlVar["MyRootNode.User"] = 
            XML("Name","John Doe","Address","Road 2");
    // Assign attributes to the XML...
    XMLattributes(xmlVar["MyRootNode"], XML("xmlns:ns","https://mynamespace.com/test/");
    XMLattributes(xmlVar["MyRootNode.User"], XML("UserID","20031");
    
    print string(XmlVar);
    return string(XmlVar);
End
print result;

// This will produce
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<MyRootNode xmlns:ns="https://mynamespace.com/test/">
<User UserID="20031">
    <Name>John Doe</Name>
    <Address>Road 2</Address>
</User>
</MyRootNode>

New Datatype: JSON_Object

We've introduced functions for effortlessly creating JSON objects to store structured or unstructured data. You can add or extract elements from a JSON object as needed. The implementation is similar as for XML.

New Commands in the ACF Language

We've added several new commands to the ACF language, empowering the plugin and reducing its dependency on other FileMaker solution plugins.

Cryptography Functions

This version introduces a range of cryptography functions in addition to those provided in 1.6.3.

Communication over the Internet

Planned dfor 1.7.1 - Send E-mail Functions: A suite of functions for sending emails via SMTP or IMAP servers. - Check E-mail: Retrieve emails from POP or IMAP mailboxes, including messages, attachments, and more. - FTP-Server Connection: Send and retrieve files using the FTP protocol. - SFTP-Server Connection: Send and retrieve files using the SFTP protocol.

Together with the XML_Object and JSON_Object datatypes, and the HTTP methods, this version provides comprehensive functionality for accessing services via REST-API or SOAP-API.

Other Functions

Bitwise Operators

We've introduced a range of bitwise operators to the language, enhancing its capabilities.

1.7.1

Example:

// Extract the first four bytes from a string into an integer.

int i;
string s = "ABCD";

int variable1 = 0;

for (i = 1, 4)
    variable1 = variable1 << 8 | ascii(substring(s, i, 1));
end for

// variable1 now contains the four letters in 's'.
// Bits 0-31: A in bits 31-24, B in bits 23-16, C in bits 15-8, and A in bits 7-0.