Version 6.59 (10/13/2023) * Low-level performance optimizations for internal sync database leading to speed improvements of 10x or more for the first initial sync on a hub database. Most noticeable difference for databases with > 1 million records. * Next/Prev buttons in field mapping screens stay pinned in place, regardless of length of table name * Faster and more reliable checks for database version updates when using a separate mobile file. Fixed case where client records were sometimes created in hosted mobile file. * Better error handling when trying to update FileMaker records with a damaged/incorrect primary key index * Increased default timeout when fetching changes from 240 to 480 seconds * Increased HTTP retry count from 2 to 9, to reduce * Error handling for rare condition: "NodeId was indicated as being deleted by fast scanning, but it is actually still present on the node" * Improvements to Oracle field name mapping from other database types * Oracle field names can now be up to 128 characters long * Various improvements to configuration process when matching up field names between source and destination databases * Time values are now synced correctly to SQL numeric types ( the milliseconds since midnight are written to the number field ) * Fixed problem that could occur when updating spoke server database version, if hard-coding an IP address in for the MirrorSync URL and checking the 'ignore ssl warnings' box * Error reporting improvements Version 6.56 (8/29/2023) * Fixed a bug introduced in 6.3308 where writeback values are not being set on the spoke * Fixed a bug introduced in 6.5 where table counts were not being properly read at the beginning of a sync, causing unnecessary deletion scanning Version 6.54 (8/8/2023) * Fixed an intermittent problem where the MirrorSync Config Client sometimes displayed a JSON parsing error while monitoring the progress of an active sync operation * Fixed an intermittent problem where MirrorSync would remove spokes from multi-spoke syncs when a spoke couldn't be reached and the sync was dynamically reconfigured simultaneously * Fixed an issue with MirrorSync reporting an unsupported "repeat" command Version 6.52 (7/26/2023) * Better error reporting when Data API is unresponsive * Fixed problem with config client not running on Intel Macs * Fixed problem with config client not displaying progress bar * Bug fixes related to complex SQL custom qualifiers * Many bug fixes having to do with JSON serialization/deserialization Version 6.51 (6/26/2023) * Updated version of config client to match version of MirrorSync server (6.51) * Fixed installer failing in non-English locales Version 6.5 (6/13/2023) * Fixed a bug where DynamoDB was writing multi-line foreign key values, even if they were configured to be excluded, if using a prefix on the DynamoDB table. * Fixed a bug in DynamoDB that happens if the table prefix for an existing configuration is modified * Now supports longer, multi-line SQL custom qualifiers. Also supports comments in SQL. * Fixed a bug that can occur when un-filtering records, causing them to be un-deleted on the device, and then those un-deleted records cannot be re-deleted * Now supports Ubuntu 20.04 on x86_64 architecture and 22.04 on x86_64 and aarch64 architectures * Added native Apple Silicon (M1/M2) support * Better SSL support * General stability improvements Version 6.33 (4/4/2023) * Better handling of repetitions in conflict resolution * More reliable file transfers during initial sync and version updates for server-to-server syncs, for databases larger than 2 gigabytes * Fixed several cases of file handles not being properly closed, which could eventually lead to OutOfMemory errors * Fixed the 'edit' button in conflict resolution screen * Fix for rare error message: "syncId ... was detected as deleted ... but the sync state for it is null." * Fixed a Windows-only bug where using the download URL feature would leave temporary files behind on the hard drive * Fixed a bug that could sometimes result in the error message "Conflict was not resolved" Version 6.32 (2/15/2023) * MirrorSync web application now shuts down more reliably for updates or when manually stopped * Bug fix that could cause an empty primary key to be written when recovering from a previous failed insert sync from spoke to hub * Config client can now execute long-running operations (e.g. compacting / repairing sync data, scanning for invalid data on large databases) without timing out. * Fixed a bug where the word 'Clone' was not being stripped out of the downloaded filename, if the file suffix was uppercase (e.g. 'FMP12') * Fixed a bug where the hub file was being downloaded, instead of the spoke, when using a separate mobile file * Fixed a memory leak that could cause problems if syncing thousands of container fields Version 6.3 (12/15/2022) * Compatibility changes to work with FileMaker 19.6.2 and later, which removes the version of FileMaker Server from the productInfo Data API response * Added feature to rebuild sync data for MirrorSync-managed tables if they have a unique writeback column defined * Workaround for incorrectly configured web server that redirects http://localhost to https://localhost * Added ability to skip network reachability checks during configuration (e.g. when using a proxy server) * Foreign key mapping screen - tables are now in alphabetical order * Improved DynamoDB data type mapping for empty field values and unsupported data types * Now supports accessing the FileMaker Data API using custom ports besides 443 * When writing to Salesforce, automatically skip writing fields that are not editable in Salesforce (instead of throwing an error) * Several bug fixes and improvements when downloading FileMaker databases. Does a better job of cleaning up temporary files, and provides better error messages if something goes wrong. * Fixed bugs getting counts of records when using DISTINCT custom SQL queries * Fixed a bug where DISTINCT custom queries were not applied in all cases for SQL custom filtering * Fixed bugs that occurred on initial sync and version updates for server-to-server configurations if the name of the database on the spoke was not the same as the hub * Several important bug fixes when working with multiple configurations for the same database, if those configurations sync different tables than each other * Fixed a bug where downloading an empty clone could return a corrupted file, if MirrorSync and FileMaker Server were running on separate boxes * Fixed some cases where syncs were being prematurely canceled by other syncs running at the same time, when using a separate mobile file and doing version update checks * Fixed a bug that occurred when copying very large databases from one server to another (for initial sync or version updates), if the time to copy excieeded the Admin API login token expiration * Fixed a bug in server-to-server syncs with multiple spokes, that sometimes additional spokes after the first one could be removed from the configuration if a schema change is detected * Fixed a bug on iOS where version updates don't work if the local copy of the file's filename doesn't match the server's filename * Fixed a bug where old configuration clients were getting an error message instead of instructions on how to update * Fixed a problem where databases were not being copied from hub to spoke during initial server-to-server syncs, if the file did not exist on the spoke * Fixed a bug that occured when using the download URL feature, if there is no additional database folder configured in FileMaker Server * Fixed a bug where temporary databases can remain hosted on FileMaker Server for server-side initial syncs if a network error occurs while downloading the finished database Version 6.21 (3/24/2022): This version includes many bug fixes and reliability improvements over previous versions. This version will work with older offline files (4 and later), but new changes marked with [Worker script] will not be enabled until the MirrorSync 6 Worker script is updated. If you are using the relay feature (where the 'main' version of MirrorSync is installed on one computer, with a 'download-only' version of MirrorSync installed on a separate FileMaker Server computer), you will need to install this new 6.2 version on both computers. Improvements and fixes: * Significant performance improvement for configuration client, especially when setting up MirrorSync on large databases and when detecting foreign keys * Switched from fmsadmin to FM Admin API, faster and compatible with newer versions of FileMaker Server. Our testing shows database downloads are now 10% - 235% faster. * Improvements to detecting new foreign keys detected during a sync (after the initial configuration) * Now automatically enables the Data API on FileMaker Server if it is not enabled * Config client status updates are faster with less delay from the server * You can now customize the timeouts for loading container data, if syncing very large container data * Allow custom timeouts to be set for getModificationsSince() * Better handling and reporting of MirrorSync-managed tables that do not have an auto-entry option for the primary key * More informative error messages when timeouts occur * Worked around a caching bug in the Data API, which could cause updates to be missed when syncing in a server-to-server configuration with three or more servers, if one of the servers was being rapidly modified while the sync runs. * Now syncs calculation fields to non-FileMaker databases (previously skipped calc fields) * Now compensates for up to a 10 minute clock drift for users connecting directly to FileMaker Server * For server-side initial syncs, fixed a bug where the hub credentials were being used for certain operations (not the main sync) instead of the user-provided credentials * Bug fixes in the configuration client when creating new SQL tables from existing FileMaker tables * Fixed a problem where very rapid, simultaneous syncs could lead to incorrect metadata and unnecessary recovery mode and deletion scanning on future syncs * Fixed a problem when checking to see if MirrorSync is accessible from outside the network. Only happens in non-English MirrorSync localizations. * Fixed recent bug when configuring separate mobile file that has different table and field names than hub; was previously incorrectly assuming table and field names were the same. * Fixed a bug where sometimes an https:// URL was set for MirrorSync when it should be http:// (for instance, when using a raw IP address or custom port number) * Fixed a problem where records deleted on the hub could be re-inserted when syncing with a mobile device that loses the network connection and then restarts the sync * Fixed bug that caused many duplicate Data API logins during configuration. This could eventually lead to 'Capacity exceeded' error messages from FileMaker Server. * Fixed a bug where database version downloads after the initial one were never done server-side * Fixed a bug introduced in version 6.12 where performance can potentially be bad when extra records are discovered in a very large table that is filtered * Fixed a bug where the SQL schema generation panel could be displayed even if the SQL database had all of the required tables and fields * Fixed a bug where older, pre-6 configuration files could not be imported into MirrorSync 6 * Various bug fixes to configuration process * Fixed a rare and intermittent division by 0 error when receiving messages from the MirrorSync server * Fixed an incorrect message stating "Could not write BLOB data to temp file" * [Worker script] Sync speed can gradually become slower due to sync history building up in the MirrorSync table. This is now cleared out whenever it reaches 100 kilobytes. * [Worker script] Reduce likelihood of a 301 record locking error on the MirrorSync table if there are multiple simultaneous syncing devices * [Worker script] Fixed a problem where container data could be corrupted if a conflict occurred when syncing records containing container data * [Worker script] Will never write corrupt container data to FileMaker that just contains a question mark Version 6.12 (11/30/2020) * Now compatible with FileMaker Server on Linux (requires manual installation) * When syncing DATETME values from an SQL database, do not do any timezone conversions (as opposed to TIMESTAMP, where we do adjust for time zones) * You can now include an optional userToken parameter in the URL when triggering server-to-server syncs, this is sent to the hub database as a $$MIRRORSYNC_USERTOKEN variable. * [Worker script] Security improvements to prevent new records from overwriting existing ones with the same primary key, if those records are filtered on the hub * [Worker script] Added a simulation feature on the MirrorSync debugging tab to help with support tickets * [Worker script] Better error reporting if there are broken references in MirrorSync script, layout, or table occurrence * [Worker script] Suppressed FileMaker error dialogs that could pop up when inserting containers failed * [Worker script] Fixed significant performance problem that could occur with large tables that use numeric primary keys * [Worker script] Fixed a bug where $$MIRRORSYNC_PASSWORD was being ignored * Better error catching and retries when inserting a batch of records fails due to a network problem * The advanced notifications feature of MirrorSync can now track which syncs run in 'recovery mode' (when the previous sync ended unexpectedly), and report these to AWS CloudWatch. * Fixed a significant performance problem for server-to-server syncs where the initial sync took much longer than it should * Added optional granular logging to a separate .csv in the logs folder of bandwidth and processing times on a per-table basis. Disabled by default, change MirrorSync.xml 'enableDatabaseMetrics' to true to turn on. * Added a right-click menu in the configuration client to reset all table and configuration caches. * Added 'cleanupInvalidFileMakerData' context parameter, which eliminates ASCII 0 values from FileMaker data, but is slower and less efficient. Not needed with FileMaker Server 18 or later. * Added 'customUpdaterAppUrl' context parameter, to allow a custom branded database for managing updates instead of the default MirrorSyncUpdater.fmp12 file. * Added 'sqlFetchOverlapTime' context parameter, which can be customized in case of an SQL database whose modification timestamps are not being updated at the exact same time that the database is changed. * Spaces in container field names were being saved as a '+' symbol, now correctly retains the space character * Fixed a bug in the config client where using a raw IP address with a port number for the MirrorSync URL generated an error message * getSyncObjects timeout is now customizable for FileMaker Server (only relevant if your FileMaker Server is extremely slow) * Log files are now somewhat smaller, especially for no-change syncs, fixed issue with two log files being written instead of one * Fixed a bug when downloading zip files from the MirrorSync config client that would occur if you had exactly 1 filemaker database with external container data. * Now supports mapping SQL fields to FileMaker time fields * Fixed a problem syncing container fields with a '/' in the file name, now converted to underscore '_' Version 6.11 (7/20/2020) * Added support for multiple spoke servers, so you can now have server-to-server syncs between any number of servers * Copying databases to multiple spoke servers is now multi-threaded, for initial syncs and database version updates * Copying databases to spoke servers for version updates now skips external container data, since it is unnecessary to transfer that * Copying databases to spoke servers now automatically uses the additional database folder, if that is configured in FileMaker Server * MirrorSync log files will no longer fill up the hard drive; wrote a custom log handler that will stop writing to the logs if less than a gigabyte of disk space is free * If a server-to-server sync runs and the database does not exist on the spoke, it will now only be copied to the spoke on a manual sync, not an auto-sync (to prevent repeated errors from running in a loop) * More reliable clean-up of temporary files on hub after pushing databases from hub to spoke on server-to-server syncs * [Worker script] International characters in container field names are now synced correctly * Fixed a bug in the config client where license exceptions would not display correctly * Fixed a bug where direct downloading a FileMaker database (without a download URL) failed, also made this operation much faster * Fixed a bug where adding a foreign key while in the middle of configuring a database led to sync error messages * Fixed a problem where non-writeable repeating fields (for instance, repeating calculation fields) caused records to be written incorrectly * Fixed a bug that could occur in countries that use a comma decimal place, for numeric values with more than 17 digits. Version 6.1 (6/17/2020) * All communication with MirrorSync server is now over port 80 (http) or 443 (https) by default, with no need for custom ports anymore. * Improvements for Japanese translation, and Japanese filename handling on automatic updates * Fixed a case where duplicate records could be created if a network problem occurred in a very specific order * Improved responsiveness on the configuration screen where you copy and paste tables, scripts, and layouts * Optimized conflict resolution field merging; now about 100x faster for large tables. * Now supports configuration and synchronization with FileMaker Cloud 2. There are many limitations of FileMaker Cloud 2 that make it less than ideal for synchronization, contact support@360works.com for details. * If you're using UUID primary keys with unique validation enabled, and if you change validation to 'always' (this is not set by default), then MirrorSync will automatically re-write inserts as updates to avoid duplicate records, or error messages about duplicates. * Now supports IPv6, and automatically includes IPv6 address for server-to-server syncs, making it possible for MirrorSync to do server-to-server syncs through a NAT gateway if IPv6 traffic is allowed through the firewall * Added extra information at the top of the sync status that always shows the name of the configuration and a description of both the hub and spoke databases * Improvements to detection for foreign keys, as well as skipping over any foreign keys referencing tables or columns that are not part of the sync. * Now supports streaming for container uploads, so that you can sync any size container data (such as large video files) without running out of memory in MirrorSync * [Worker script] Smarter switching between using the internal and external IP addresses on the sync. This should make it so that syncing from outside the LAN is about 5 seconds faster, if there is a separate internal and external address configured. * Important bug fix: removed a deadlock that could occur when inserting large number of records that contained unusually large text data as well as container data. * Fixed a memory leak which could cause an OutOfMemory error after thousands of syncs. * Fixed a problem that could occur when syncing large numbers of fields (>500) where an incorrect error message "invalid command" was being returned * Exporting a configuration from server A and importing to server B will now automatically change the configured MirrorSync URL to server B. * Improved validation for foreign key configuration * Performance improvements for configuration client * [Worker script] Fixed a bug where it appeared that all fields were required, if some calculated validation prevented the entire record from committing * [Worker script] Moderate efficiency improvements when writing to FileMaker tables with large numbers of fields * Fixed special Unicode characters that could lead to parse error 1206 * When writing time and date values to Salesforce, don't do any time zone conversions, send them unmodified * Improvements to SQL generation for syncing to a non-FileMaker SQL spoke database, such as MySQL or SQL Server. * Fixed problem where externally stored container fields that happened to have an .fmp12 file in them were having their contents hosted on FileMaker Server when transferring from hub to spoke during server-to-server syncs * Now truncates extremely long container filenames (converting a text field to container fields causes the text contents to also be used as the container filename, which can be too long to be practical) * Fixed a problem when using custom text primary keys of varying lengths (not UUIDs or serial numbers, which work fine without this fix). * Fixed a bug that sometimes caused field popup menu selections to be reverted to default values or empty * Fixed a bug where the hub username / password stored in the configuration could be overwritten when syncing, if the database schema had been modified * Fixed a problem where primary key, creation timestamp, and modification timestamps could sometimes revert to default or empty values * Fixed an unusual bug that could occur when reading corrupted container values that could get stuck in an infinite loop * Improved error reporting to users if the sync fails due to a permission error or timeout; previously gave misleading errors like "There is no configuration named null" * [Worker script] Many improvements to automatically handle and retry network problems; better logging to identify problems caused by slow networks * Performance improvement: Using the $$MIRRORSYNC_USERTOKEN to filter records was causing unnecessary deletion scanning * [Worker script] When the offline file has external data sources pointing to non-existent files, MirrorSync was causing a popup dialog asking users to locate the file. This has now been suppressed. * Fixed a problem with Touchbar macs that share the same MAC Ethernet address; this was causing multiple laptops to overwrite each other's information in the license management dialog * Email notifications will now be sent to the administrator if a sync fails due to a licensing problem * [Worker script] Fixed an issue where sometimes after an initial server-side sync, the mobile user was not prompted to enter their own computer name on their first mobile sync * Fixed issue where comma decimal separators are being lost during sync in non-US locales * Fixed several cases (e.g. writebacks, foreign keys) where MirrorSync was not limiting fields to the sync layouts (if that option is selected) * Support syncing all layouts based on prefix for DynamoDB * Fixed a bug where single FileMaker databases transferred from hub to spoke on an initial server-to-server sync were gzipped and could not be opened (did not affect multi-file solutions) * We now keep a history of all configuration changes, in case something gets messed up * Fixed a bug where adding fields to the sync layout, without changing the table schema, did not include those new fields in the sync * If the column that a foreign key is based on is excluded from the sync, the foreign key is now removed from the config and skipped, instead of throwing an error * Fixed a rare but serious bug where having read-only columns in the sync caused columns to shift, where the data would be written to the wrong fields * Now attempts to parse string creation timestamps for crappy databases that store timestamps as strings (hello, MS SQL Server) * Fixed several threading race conditions and deadlocks when saving and reading configurations, and when setting auto-sync frequencies * Performance improvements for DynamoDB; prevented unnecessary update operations if fields are added or removed from a configuration * Much faster transfer of large multi-file solutions between servers for initial server-to-server syncs * Fixed a problem where configuration settings were lost when exporting and importing non-FileMaker Server configurations. Version 6.04 (12/17/2019) * Right-clicking a configuration in the list and selecting 'Scan for invalid data' will check the primary keys and timestamps in all tables to quickly detect common reasons for the sync failing. * Server-side initial syncs now clean up the temporary copies of the database hosted on FileMaker Server if the sync fails * Server-side initial syncs now correctly download the external container data associated with the file * Fields with a length limit shorter than 90 characters were being incorrectly detected as non-writeable; this is fixed now. * Fixed a problem with configuration process, user selections sometimes being lost when configuring an SQL hub database * Now uses larger, more efficient batches when writing tables that have container fields, if the records in that table don't actually have a container value * Performance optimization for HTTP transfers by always setting a Content-Length header, instead of using chunked encoding * Fixed a bug where empty timestamp fields would sometimes get set to an incorrect value during sync * Fixed a NullPointerException that sometimes occurred during configuration * Now works with dot characters (.) in field names for primary key, modification timestamp, or creation timestamp fields * Now includes small link in footer of launch page to launch using JNLP launcher, which can be more convenient in some cases than downloading the MirrorSync configuration client * Fixed an error that could occur when syncing externally stored container fields * Detecting fields during configuration is faster and more reliable, especially for detecting primary keys with required validation enabled Version 6.03 (11/22/2019) This version requires the MirrorSync 6 worker script to be replaced; use the version that comes with the MirrorSync Support.fmp12 file. * Fetching modifications from very large tables is now about twice as fast * If same record was modified on two databases, but the same change was made on both, don't treat it as a conflict * Fixed a problem where externally stored container fields were not being synced * Scanning for deletions was sometimes failing with very large numbers of records; this is now fixed * Fixed a bug where conflicts could be falsely reported during an initial sync, if the clock on the client computer was significantly different than clock on server * Fixed a bug where initial syncs incorrectly reported that there were records on the spoke, even when the spoke was actually empty Version 6.02 (11/15/2019) * Fixed NullPointerException error that could occur when adding / removing fields from the sync and then editing the configuration * Fetching metadata during configuration was slow for large databases with calculations that referenced summary fields; this is now fixed * Fixed a problem that could cause an error during sync if users were deleting records from FileMaker Server at the same time that the sync is trying to retrieve changes * Fixed a problem that could occur when auto-updating to new version of database. If this is occurring, replace the MirrorSync 6 script (not the worker script) with the version in the MirrorSync Support.fmp12 file. Version 6.01 (11/1/2019): * Fixed a problem that prevented the configuration client from connecting to the MirrorSync server through a firewall Version 6.0 (10/30/2019) * MirrorSync script has been re-written; no longer requires copying and pasting script steps after configuration changes * No limit on number of tables * Backwards compatible with offline files created in MirrorSync 4 and 5 * Configuration automatically detects new and removed fields and tables (when using the sync layout auto detection), no need to edit the configuration when your solution is modified * Editing and creation configurations is much faster now, especially with many tables * Greatly improved detection of primary keys, timestamps, writebacks, and compound primary keys * Automatic file transfers between servers for server-to-server syncs, on initial sync as well as version updates * Automatic update feature now works for server-to-server syncs * Configuration client is now signed and notarized * No requirement to pre-install Java * Requires FileMaker 17 or later. 18v3 or later is recommended for FileMaker Server. * Now utilizes streaming when reading from FileMaker Server. This should allow fetching data of unlimited size from FileMaker Server, while reducing RAM requirements for FileMaker Server. For very large result sets that exceed physical RAM, this should be much faster. * Download links now work correctly with iPod Touch * Configuration client is now a standalone application that does not require Java to be installed * Added support for Get( UUIDNumber ) primary keys * More responsive when updating sync status in configuration client * Now supports custom location for temp files. This is particularly important when using the database download feature with very large databases; you can now store these temporary copies on an external volume with more free space than the boot drive. * Editing a configuration no longer cancels sync operations running at the same time * Can now read text fields containing more than 64 kilobytes when using JDBC * Can now use the auto-update feature with FileMaker Go syncing with non-FileMaker hub databases, such as MS SQL or MySQL * Server-side initial sync now also works with files downloaded using the auto-update version feature * Better support for combining records from two different databases on initial server-to-server syncs * Numerous fixes and improvements when using server-side initial sync with a seprate mobile database hosted on FileMaker Server * Improved deletion scanning to run two separate checks to ensure a record has been deleted before deleting on the other side of the sync * Multi-threading improvements for storing and accessing internal sync database * Download links will now work with much larger files without timing out * Duplicating configurations now resets all download URLs for the duplicated configuration, so that it doesn't get mixed up with the original configuration * Added check to make sure that no client record exists in the MirrorSync table before downloading copy for spoke to sync * Recover mode is now more discerning about which records to re-write after a previous failed sync; should prevent situations where recovery caused large numbers of records to be modified * Fixed a problem that occurred when syncing with a separate mobile file, if the table occurrence name of the mobile file did not match the table occurrence name of the hub file for a given layout. * Fixed some dialog popup window issues * Fixed a problem with temp container data not being cleaned up in certain cases, leading to cluttering the temp folder and gradually filling the hard drive * Fixed problem creating databases in MySQL works (was getting an error about time zones) * Fixed a problem where writeback values did not work properly in server-to-server syncs using JDBC on the spoke database * Now waits for databases to fully close before attempting to duplicate them. This could fix some cases we've seen of database 'corruption' with server-side initial syncs * Now uses 'real' instead of 'double' when generating schema for MS SQL * Fixed a bug where device names were not being updated if the initial sync is re-done * Fixed a problem where appending ?status=0 to the end of the URL was ignored * Multiple spoke servers are not currently supported; will be added in a minor release Version 5.0 (8/3/2018) New features: * Download URLs can now run the initial sync on the server, and then download the already synced offline copy to the user's device. This is much faster and more reliable for large, slow initial syncs. * MirrorSync will now encrypt and remember user passwords, so that they don't need to be re-entered on each sync after an offline file is opened. * Added an advanced notifications feature, which lets users with an AWS account post CloudWatch and SNS notifications when a sync completes or fails * Added GUI menu option for compacting sync data * Automatic version download feature now works with non-FileMaker Server hubs, such as MySQL or Oracle * Syncing multiple clients simultaneously with FileMaker Server using XML is now much faster (still not as fast as JDBC in most cases though) * Log files are now separated by the MirrorSync application name. This is important for hosting providers to be able to see each customers log files separately, and makes troubleshooting with 360Works easier. * Data collector files (database that are one-way from spoke to hub) no longer need to be empty for the initial sync, as long as they don't contain any of the same records as the hub. * Large SQL update operations are now much faster, because they are written in batches instead of individually. This is most noticeable when syncing many updates to non-FileMaker databases such as MySQL. * Added support for syncing with DynamoDB, which is part of Amazon Web Services * Will now automatically enable XML Web Publishing on FileMaker Server 17 * Added a right-click menu option to scan configurations for invalid data (empty / duplicate primary keys, more than 64KB text data in a single field) Improvements: * Auto-updating versions of offline mobile files is now more reliable when running FileMaker Pro/Go 16 or later. * Version check feature stopped working because of SSL encryption issues; this is now working * For multi-spoke server-to-server syncs, if one spoke is down, other spokes will still sync. The spoke that was down will catch up when it comes back up. * The administrative e-mails and configuration client will now show more detailed error and warning messages in the event of problems during the sync. * You can now reduce the number of days for keeping logs to save disk space (defaults to 14 days) * Don't sync auto-enter fields containing 'ModifiedBy' or 'Modified By'; you should not sync these fields because they will cause unnecessary conflicts. * Fixed a problem that was causing sync data to grow very large very quickly * Fixed a problem that could occur during initial sync when syncing between FMS with JDBC and FileMaker Pro/Go, making it appear that records had been modified even when they were not. * Reduced size of MirrorSync script by about 15%, should be able to sync more tables before hitting the script size limit * Auto-downloading new versions is more reliable for very large databases * No longer validates that primary key fields are not empty / unique. This makes the configuration process noticeably faster. * Improvements to sync data repair function; will now attempt to run even if the sync data cannot be opened at all. * If configurations list is unreadable for some reason, will attempt to reconstruct automatically from backups * Don't retry write operations if they fail due to data truncation or integrity constraints, because they will just keep failing. * Max sync database size can now be increased up to 2 terabytes by modifying the MirrorSync.xml file. Default maximum size is 256 gigabytes. * Better error reporting when corrupted records are detected in a FileMaker Server database * JDBC operations now all run on the same thread for each database, should improve JDBC reliability * Will now automatically abort the sync if no write operations to FileMaker Server happen for 30 minutes or more * Added support for databases like Informix that do not support switching the autocommit transaction mode * When using a separate mobile file, the DatabaseVersion for determining whether to auto-update the mobile file will be read from that separate mobile file, instead of the main data file * Auto-update download feature will now work without first manually creating a download URL * Now prompts user to rename imported configurations in MirrorSync 4 if they have the same name as a previous MirrorSync 3 configuration * Downloaded MirrorSync admin files have a '4' suffix instead of '3' * Fixed a bug when using custom PK generation stored procedures * Downloading FileMaker databases with Japanese filenames now works correctly * Simplified configuration when using generic JDBC drivers. Tested succesesfully with IBM Informix. * Workaround for a bug in the Microsoft SQL Server JDBC driver that does not report 'ident' columns as auto-incrementing. * Version check on MirrorSync launch page was not working; this is now fixed and will show whether or not the latest version is installed * Fixed bug in schema generation for SQL databases. Text primary keys in FileMaker were generating text primary keys in SQL databases for MirrorSync-managed keys. MirrorSync-managed keys should always be created as INT when generating schema. * When removing a device, skip over configurations if we can't read the HSQL data associated with them * Fixed a bug where conflict resolution did not adjust for time zones when determining which record was changed most recently * Fixed a bug when downloading an offline copy of a FileMaker Pro/Go database when using a non-FileMaker hub, such as SQL Server or MySQL * Fixed a bug when generating FileMaker tables and fields from a SQL database when using developer-managed keys. Now correctly generates a UUID primary key in FileMaker instead of a serial number. * Fixed a bug when using SMTP servers on port 587 to send notification emails (this is only for people who want to use their own SMTP server, MirrorSync ordinarily sends notifications without requiring an SMTP server) * Fixed a performance problem when doing the first sync on an additional configuration for an offline FileMaker database that reads from the hub server. * If MirrorSync record is accidentally deleted from FileMaker hub server, MirrorSync will now automatically insert it back. This does not work for spoke servers or client devices. * On low speed / poor quality network connections, fixed a hang that could happen when establishing connections to FileMaker Server - now times out after 20 seconds. * Writeback values can be written to spoke, even for syncs that are one-way from spoke to hub * Fixed a bug that could occasionally prevent field mapping drag and drop from working, after an error message was popped up * Many improvements to wording and accuracy for error reports * Fixed a bug where resetting sync data and overwriting the spoke would run in recovery mode * Salesforce syncs are now more accurate for showing the number of modified records being synced * $$MIRRORSYNC_USERTOKEN is now available when running the DidSync section of the MirrorSync customization script Migration issues: * This version of MirrorSync installs its own separate copy of Java version 8. For most users, this will not be noticeable, but if you've installed your own custom JDBC drivers into the lib/ext directory of your Java directory, you'll need to copy them into C:\Program Files\360Works\jre\1.8.0_121\lib\ext on Windows or /Library/360Works/jre/1.8.0_121/Contents/Home/lib/ext on Mac. You will only need to do this once, unless we update the version of Java included with MirrorSync. Version 4.0 (7/31/2017) * Headline feature: Programming changes to hosted databases will now be automatically downloaded for offline clients after a successful sync. No separate database needs to be installed for this to work. The process for this is explained in the configuration screens. Improvements and fixes: * Rebuilding the sync data gives an option to specify a cutoff date for when the databases were known to be in sync, making the rebuilding process much faster. * Rebuilding sync data is now smarter about comparing records to see if their contents match; fixed a case where repeating fields were always making it look like records were not matching * Improved reliability for email notifications * Can now generate FileMaker tables and fields in a new database from a SQL database (this feature existed previously but was accidentally disabled) Version 3.17 (3/24/2017) * Updated code signing certificate. This now extends to March 17th, 2020. * Now automatically retries up to 3 times if it can't contact the MirrorSync server due to an empty response * Admin client visual improvements when mapping tables / columns * Now supports syncing pre-populated offline files with non-FileMaker hub databases, such as MySQL * Download URLs for non-FileMaker hub databases with separate FileMaker mobile files now works correctly * Fixed an error 3 that could occur when deleting records in an offline spoke during the initial sync * Fixed a bug where carriage returns were being switched to newlines when syncing to FileMaker Server. This can cause problems when searching for ΒΆ (carriage return). * Increased maximum size for internal sync data from 64 gigabytes to 256 gigabytes, for customers with very large databases * Fixed a bug parsing non-US numeric formats with comma separators. This only occurred when using JDBC and writing changes from client to server. * Fixed a rare issue where records could be deleted from the server on initial sync. This only happened if you delete all the records in the MirrorSync table and have other, non-empty tables in the offline file at the point of initial sync. Version 3.16 (2/3/2017) * Added a new feature to allow pre-populating databases for server-to-server syncs with non-FileMaker databases * Substantially faster initial sync for first device after creating configuration * Now supports re-importing configuration over an existing one. This is useful for vertical market solution providers to be able to change configurations for many clients at once. * More improvements in this area: Syncs that fail due to a server error are less likely to switch to recovery mode (which is slower) on the next sync * Fixed a bug introduced in 3.15 where BLOB photo data (jpegs, pngs, and PDFs) from SQL databases were not written with the correct file extension, causing the photos to appear with a plain icon * Fixed a bug introduced in 3.14 where pre-populated separate mobile databases took much longer than they should have on initial sync * Applied the same fix for MySQL BITs in 3.15, except to BOOLEANs as well (and TINYINT(1), which is the same as BOOLEAN) * Fixed some memory leaks that can cause problems in very high volume sync environments over time, especially with lots of BLOB / container field syncing. Version 3.15 (1/20/2017) * Fixed a major and late-breaking bug in 3.14 where container fields were skipped during the configuration process, causing them to not sync. If you re-pasted the script steps with 3.14, you should edit the configuration and re-paste again with 3.15. * Performance improvements when updating FileMaker tables that have containers or many fields. This is especially noticeable in server-to-server syncs with large batches of changes. * Better mapping between FileMaker text and number data types with MySQL BIT data types. BITs will be written as a 1 or 0 to FileMaker number fields, and true or false to FileMaker text fields. The reverse is also true. * Fixed a problem with MySQL BIT data types causing the same records to be repeatedly synced, even if they had not actually changed. * Fixed a MySQL problem that could intermittently cause BLOB data to fail to write Version 3.14 (1/19/2017) * [Only if MirrorSync script is updated] No longer switches to recovery mode if the previous sync was canceled by the client. Recovery mode takes longer and will revert deleted records. * [Only if MirrorSync script is updated] Only logs the first 1,000 characters of BASE64 encoded data. This makes the server log files much smaller and easier to read. * This is the best version to use for determining the circumference of a circle. * This version fixes several bugs that can occur in high-volume environments with many clients simultaneously syncing, especially if there are conflicts that need to be resolved. * Greatly improved consistently and reliability when rebuilding sync data after resetting (only works with developer managed keys) * Much faster performance when syncing one-way to SQL spoke databases. * Audit log performance is now about 50% faster. This means there will be less delay when merging conflicting changes. * Log files are smaller, should use less space on disk * Now uses TRUNCATE operation when deleting all records in a table, which is much faster. Will not use this if there is an SQL qualifier for the table. * Now includes an option to rebuild sync data after resetting sync data on a server-to-server sync (only for developer managed keys) * More responsive when canceling syncs, if they are in the middle of a large update batch. Several improvements and bug fixes having to do with canceling slow syncs. * Fixed a situation that could cause extremely slow syncs in Amazon RedShift, if a record batch failed to upload * Fixed a threading bug that could, in rare cases, lead to duplicate records * Fixed some cases where failure to update the sync metadata was not being reported in the sync summary message * Fixed a performance problem where inserts that could not be written during a sync (due to validation problems or cancellation) would be slow to write on the following sync. * Fixed an out of memory condition that would happen when trying to write a large number of records, that could not be written for one reason or other. * Fixed a bug where the same filename was being used for all inserted containers with FileMaker JDBC driver * Fixed several bugs where container data inserted from FileMaker Pro could be left in the server temp directory, gradually filling up the hard drive. * Fixed this error message from appearing in certain high-volume sync scenarios: "Another sync is currently running between the same set of databases" * Fixed a problem where syncs incorrectly ran in recovery mode for high-volume servers with multiple overlapping syncs. This can lead to slower performance and restoring records that should have been deleted. * Fixed a rare case where configurations could vanish when starting MirrorSync * Fixed a rare case where question marks could be stored on the server for container fields * Fixed a bug where one-way syncs from spoke to hub that also had a writeback column configured could not sync. * Improvements to memory usage for very large syncs * Fixed a rare bug that could cause sync to abort when using multiple configurations for separate databases Version 3.12 (11/17/2016) This version contains many miscellaneous reliability improvements and is recommended for all users. You can simply run the installer and it will update MirrorSync. There is no need to run the uninstaller first. You do not need to distribute new offline copies, although there is one new minor feature for error reporting that will not work unless the script is updated. * [Only if MirrorSync script is updated] Better error reporting if container fields cannot be transferred due to a network error or misconfigured external data sources. Older MirrorSync scripts will continue to work fine, just won't have this feature. * Now backs up the internal sync database once per week. If the sync data needs to be repaired at any point, this should make the process much faster. * Much faster inserts for Oracle and SQL Server when using UUIDs. * New feature to rebuild sync data for developer-managed keys. This means that you should safely be able to reset sync data (with UUIDs, not serial numbers) and continue to use existing offline files. * Smarter checking for whether or not to switch into recovery mode, which should reduce slow syncs in recovery mode * Better error reporting for FileMaker JDBC errors * Many container syncing improvements * Much faster configuration for server-to-server syncs over low speed WAN connections. * Fixed a problem where a blank primary key could be written to the server if 1) a record was deleted on the server, 2) the same record was modified on the client, 3) UUIDs are being used, and 4) JDBC is being used. * Fixed a problem when configuring MirrorSync in non-US locales with different decimal formats, such as France and Germany * Fixed a problem with slow initial syncs on server-to-server syncs with FileMaker Server when using JDBC * Fixed some cases where sync errors could leave JDBC connections open indefinitely on the FileMaker Server * Fixed a problem when using custom SQL qualifiers with a JOIN statement, if multiple tables had the same modification timestamp name * Fixed a bug that can occcur when writing container data from FileMaker Server to MS SQL server * Fixed a problem that occurs when updating container fields on the server using JDBC, when the filename contains a single quote character. * Fixed a problem that configurations created with MirrorSync prior to 3.11 may not include container fields on sync * Fixed a bug in the configuration process of setting up a sync from FileMaker client to SQL database server * Fixed a rare problem where JDBC connections could close during long syncs, if we are doing a bunch of read operations and very few writes. * Fixed a rare problem on initial sync between FileMaker Servers in different time zones Version 3.11 (10/21/2016) * * IMPORTANT NOTE: Increased default memory allocation from 512 megabytes to 1 gigabyte. If you have customized your memory allocation to larger than 1 gigabyte, YOUR CUSTOMIZATION WILL BE OVERWRITTEN. Be sure to set it back to the higher value after installation. * * Added a new 'Repair SyncData' feature in cases where sync data is corrupted (for instance, from running out of memory during a sync). Right-click on the name of the configuration to use this feature. * Don't allow syncs to proceed with less than 100 megabytes of free disk space and 100 megabytes of RAM to avoid corrupting internal sync data * Containers larger than 10 megabytes were failing to sync when using JDBC. This is now fixed, and should be much faster than BASE64 for large containers. * Improved error handling when writing to MySQL and some records can't be written due to invalid data or columns widths too long * Fixed a problem where external container data was not being downloaded when using the download feature built into MirrorSync * Fixed a problem where the spoke SSL checkbox didn't 'stick' if you edited the configuration. * Fixed a problem that could duplicate records during initial sync. This only applies to server-to-server syncs, and only when the records are removed from the MirrorSync table. * Fixed a problem where container fields were not syncing when using separate mobile files (side effect of a change in 3.1) * Fixed a problem where initial syncs could run very slowly if previous sync with FileMaker Server did not complete successfully * Fixed a problem when writing to MySQL when columns were not wide enough to store data from FileMaker. Can't actually write the data, but we now have better error reporting. * Workaround for a bug in MySQL when detecting which columns were writeable * Improved error reporting and removed unnecessary warnings during configuration process * For MirrorSync managed keys, you can now pick primary key fields that are not auto-entered serial numbers. This is invalid in most cases, but important when using compound primary keys. Version 3.1 (10/5/2016) * Noticeably faster insert operations to FileMaker Server for large batches of records, e.g. during server-to-server syncs. * Much faster initial syncs for tables that are empty on the offline file * Faster sync configuration, especially for large numbers of tables. * Significant performance improvements when doing simultaneous syncs using JDBC * Improved self-repairing of sync data if duplicate records exist * Now will time out after 30 seconds when trying to establish a JDBC connection to FileMaker Server * Fixed several problems where files were being left in temp directory (during database download and log file uploads), which could gradually increase disk usage over time * Uses IPv6 for uploading compressed log files for problem reports Version 3.0401 (8/30/2016) * Fixed a bug introduced in 3.03 where container fields did not sync from server to client over JDBC Version 3.04 (8/28/2016) * More responsive when canceling syncs when using XML Web Publishing Engine * Fixed some rare conditions that could lead to OutOfMemory errors. * Fixed a bug where FileMaker JDBC connections were not being closed after a one-way sync (from FileMaker Server to something else) completed Version 3.03 (8/22/2016) * When testing custom SQL filtering statements, syntax errors will now be highlighted in red. * No longer gives an error message if there are related fields on a sync layout (they are now ignored) * Fixed a bug that was causing slow deletion scanning when using JDBC with FileMaker Server. You will need to reset the sync data to apply this fix, if you were running MirrorSync 3.0, 3.01, or 3.02 with JDBC. * Found cases where trailing zero's were still being appended to numeric values when using JDBC; fixed. * Reliability improvements to deletion scanning * Fixed some cases where creation timestamp was not being auto-detected during configuration * Fixed a bug that occurred when doing an initial sync if a record had been recently added to the hub, but did not meet filtering criteria. * Fixed an incorrect error message that could happen during configuraion about multiple layouts being synced to the same table occurrence. Version 3.02 (8/18/2016) * You can now optionally set custom SQL queries for filtering to use the DISTINCT SQL keyword * You can now optionally specify an SQL qualifier for spoke databases, to prevent certain records from being deleted during initial sync or if they are deleted on the hub. Be very careful when using this option and check with 360Works first, as incorrect use of this feature can cause hub records to be deleted. * Minor performance improvements throughout. * You can now re-sync selected tables, as if it were an initial sync, by right-clicking on the name of the configuration and selecting the "Re-sync old records" option. Leave the date blank to re-run the initial sync, or specify a date to just re-sync records in a certain range. * It is now easy to downgrade to MirrorSync 2.x, if desired. * Better error reporting when testing custom SQL queries. * Error 10, which is an HTTP download error common when syncing container fields from server to client, will now be retried on the next sync. Previously this would not be retried unless the record was modified again. * Now stops sync with an error message when using numeric primary keys with leading zeros. These cannot work with JDBC driver. * Better error reporting for blank primary keys. * Removed incorrect error message stating that FileMaker 14 or later are required. MirrorSync is tested and supported with FileMaker 13 or later, and as far as we know, will work with FileMaker 11 and 12 (although we do not offer free support for those platforms). * Fixed a bug where dates were being written one day behind, when using JDBC with FileMaker Server in a location west of GMT time. * Fixed a bug where empty container fields would cause an error when syncing with JDBC to FileMaker Server. * Fixed a case where decimal values in the MirrorSync script were sometimes commented out when pasted in from a different locale than where the MirrorSync server is running. * Fixed a bug when using MirrorSync-managed keys and JDBC where all spoke records were being deleted and then inserted from server on initial sync. * Fixed a bug when using the JDBC driver that numeric values were always being written with trailing zeros after the decimal places, like '3.0000000' instead of '3'. * Fixed a rare bug that could occur when a client tried to download an offline copy of the database and got stuck in a loop, generating a huge amount of requests and overwhelming FileMaker Server. * Several bug fixes for internal sync metadata. Version 3.01 (8/2/2016) * Added important README document discussing upgrade process from version 2.x * Now supports initial sync with separate mobile files that are pre-populated with data (Extra steps are required for this to work, read documentation at http://docs.360works.com/index.php/MirrorSync_2_advanced_topics#Can_I_pre-populate_my_offline_database_to_speed_up_initial_sync.3F ) * Many improvements for writeback values with non-FileMaker databases (e.g. syncing with MySQL) * Updated FileMaker JDBC driver to newest available version * Improvements to process for recovering from backups for server-to-server syncs, for example when clustering. Version 3.0 (7/18/2016) * Now supports direct JDBC communication with FileMaker Server for faster syncs, better reliability, and more efficient memory usage (requires FileMaker Server 14 or later) * Server-to-server syncs will now switch to 'recovery mode' when syncing with an older version of the database (i.e. a backup), making it much less likely to get unwanted duplicates or deletions. This feature requires UUIDs. * Custom SQL qualifiers are now supported for filtering which records to sync for which users. This includes a feature to test the SQL query during configuration to make sure it matches the expected found count. * Now supports multiple configurations in a single FileMaker database. This lets you create multiple sync buttons for syncing just certain tables. It also lets you do server-to-server and client-to-server syncs in the same file. * More detailed and readable error reporting when syncs fail due to network problems * Significantly lower memory usage for very large insert batches * Many small improvements in the MirrorSync setup user interface, especially for server-to-server configuration * Now supports syncing with the hub database credentials, so users won't need to enter their passwords when syncing. * Adds support for syncing FileMaker or other SQL databases with Salesforce via the API * Trigger server-to-server syncs from FileMaker client * Now smarter about matching up similar table names during configuration. Will ignore spaces, underscores, and capitalization, so 'Line items' will match with 'line_items', for example. * Added support for Amazon RedShift database, with high-speed bulk operations for inserting and updating records * Fixed a bug where read-only values were not eligible as primary keys for one-way syncs, even though they should be. * Maximum audit log database size increased from 64 gigabytes to 256 gigabytes * Faster no-change syncs (when running on the same LAN, a single table no-change sync usually takes less than 1/10 of a second) * Many reliability improvements throughout MirrorSync * Fixed a case where user-specified conflict resolutions could sometimes be lost, requiring them to be re-entered. * Fixed a bug where enabling or disabling auto-schedule was not being remember on the next launch of MirrorSync. * Can now use the built-in FileMaker test certificate for SSL syncing (not recommended) * Fixed problem with internal sync database sometimes not being closed properly when shutting down MirrorSync Version 2.6 (5/26/2016) * [Requires script update] The MirrorSync script no longer allows users to leave computer name empty on initial sync * [Requires script update] Fixed a bug where machine names or client names with ampersands or percent signs would cause the sync to fail * [Requires script update] Added special character escaping to primary keys * Added localization for French language * Added support for CLOB data type in SQL databases (Character Long OBject) * Added a 'fmUsersTimeZone' setting in MirrorSync.xml so that you can tell MirrorSync to treat timestamps stored in FileMaker Server as any desired time zone (previously, we always treated them as the same time zone as where MirrorSync was running). * The Config Client now shows the server hostname in the title bar * Improved efficiency when looking up metadata from internal database during sync; now makes 1/2 the number of requests * Improved conversion from SQL data types to FileMaker data types * Improved behavior when canceling a sync. Previously would hang if it lost network connection to FileMaker Server; now should cancel cleanly within 30 seconds. * Improved schema generation for SQL databases with tables and fields containing spaces * Improved error reporting if records are successfully synced but individual fields cannot be synced, for example due to difference in data types * Now supports simultaneous incremental and initial syncs (previously, incremental syncs would wait for all simultaneous initial syncs to complete) * Significant (2x - 10x) speed improvements when scanning for deletions in large databases * Additional protection against writing duplicate records to the hub database in case of a failed previous sync * Added a configurable setting in MirrorSync.xml to force 'recovery mode', where sync is much slower but double-checks to prevent duplicates and deletions * Sync will now continue even if duplicate primary keys are detected in offline devices. This will run slower than normal on each sync, but at least it does not block users from being able to write their offline changes to the server. Duplicate spoke records will ignored, not written to the hub. * Various improvements to download links behavior: Skips external container data for iOS devices, always tells the client the total database size so progress bars work; better logging; added optional ability to completely disable downloads of external container data. * When doing multi-spoke server-to-server syncs and one of the spokes is offline, still sync the other online spokes * Now supports appending port numbers to the XML Web Publishing engine address, if running on non-standard ports * Now supports an optional timeout setting when communicating with the FileMaker XML Web Publishing Engine. See 360Works/Applications/conf/Catalina/localhost/MirrorSync.xml for details. * MS SQL Server now supports integrated Windows authentication, without explicitly setting a username and password * Fixed an installer problem that happened when installing MirrorSync for the first time on FileMaker Server 14.0v4 or later (because fmsadmin was moved in that version). Installation worked, but required a restart. No longer requires a restart. * Fixed cases where a transaction serialization error could occur when a long-running sync was canceled * Fixed a problem where very large database configurations were timing out after 10 minutes when detecting metadata; this timeout is now increased to 30 minutes * Fixed a problem where XDBC connections to FileMaker Server were being left open after sync finished * Fixed a problem with Windows 7 clients not being able to add on new devices/configurations to license from within MirrorSync admin utility * Fixed a problem that could happen when sending container data to FileMaker Server running on the same machine as MirrorSync * Fixed a bug that occurred in 2.507 where foreign keys were not being detected when setting up a new configuration * Fixed an issue that could sometimes write a single line ending as a double line ending, causing everything to be double-spaced. Only occurs with SQL data sources when merging conflicts. * Fixed an issue with MirrorSync assuming destination database is in UTC time * Fixed a problem for one-way initial sync from SQL databases to FileMaker Server * Fixed a rare record duplication issue that could happen when the client receives an insert command and fails to send a confirmation message due to network problems. Version 2.507 (12/17/2015) * [Requires script update] Container fields sometimes cannot be inserted because of an error 10; this will now be retried 3 times. * [Requires script update] Better error reporting when we try to update a FileMaker record that, for whatever reason, does not exist. * Single file MirrorSync download links now include external container data * Performance improvements for storing audit log information; used to merge conflicts * Performance improvements retrieving data from FileMaker XML Web Publishing Engine * Fixed a problem that prevented MirrorSync from working with Tomcat 7.062 or later (for users that install their own Tomcat instead of using the one bundled with the installer) * Fixed an intermittent problem that could occur when syncing container fields, with the error message "URI can't be null" * Fixed a problem where conflict resolution was sometimes not being saved on the first time, and needed to be re-done on a second sync. * Fixed a caching bug where database download URLs were not working if an incorrect one was entered, because the incorrect one was cached. * Fixed a problem auto-detecting relationships when the primary key of one table was used as a foreign key to a different table. * Fixed some cases where an error 1631 could result when trying to insert container fields during a sync Version 2.506 (11/5/2015) * [Requires script update] Made error messages more user-friendly if a field is renamed after MirrorSync configuration * [Requires script update] Better error report for contains that cannot be synced (i.e., if they are stored as a reference) * [Requires script update] You can now optionally set a $$MIRRORSYNC_EXTERNAL_URL variable in the MirrorSync customization script to override the value of the external URL set in the MirrorSync configuration process. * You can right-click on the configu ration to re-sync old records, for instance if you restored from backup and wanted to make everything current. * When writing empty fields to MySQL that are configured as not nullable, write as an empty string instead. This fixes issues syncing with WordPress. * Added a configuration property in context.xml to disable audit logging * Better error reporting if resetting sync data fails for some reason * Treat date / time / timestamp objects as text if they are not parseable (ie. if somebody enters bad values into a date, time, or timestamp field in FileMaker) instead of giving an error message * Reduced XML requests to Web Publishing Engine when running on the same computer as MirrorSync * Better error reporting if the sync expires due to iPad going to sleep * Fixed repeating fields for text / number / date / time / timestamp (repeating container fields are not supported) * Fixed a problem where refresh button in field mapping panel did not detect new/missing fields * Fixed a memory leak caused by connection pooling * Fixed a bug with FMP11 with the ok and cancel buttons not showing. * Fixed problems generating schema for MySQL with BLOBs and UUID primary keys * Fixed rare cases where internal database connections would unexpectedly close during a long sync * Fixed a bug that caused sync to fail with passwords longer than 76 characters Version 2.505 (8/6/2015) * Fixed a bug introduced in 2.5 that could cause reads from SQL databases to fail when using writebacks from the primary key * Fixed a bug introduced in 2.504 that could occur when clicking the 'copy script steps' button multiple times Version 2.504 (8/5/2015) * Improved speed when running through sync configuration process * Now honors FileMaker default certificate for SSL requests to server. This means that SSL checkbox can be enabled without needing to install a custom certificate for the XML Web Publishing Engine. * Makes a full backup coy of old sync data before upgrading to version 2.5 format, so that it's possible to roll back to a previous version if desired * Correctly warns user if they do not have their gLastInsert field set for global storage * Added an internalDatabaseCache parameter that can be increased if the sync metadata size gets too large * Fixed incorrect error message about "can't happen, allowInterrupt is false" * Fixed a bug where sync errors on the client were not being sent to the server, making MirrorSync wait forever for the sync to finish * Fixed a bug where MirrorSync window is left open if the sync is aborted * Fixed a bug that, when SSL was enabled, was causing incorrect warnings about not being able to sync from outside the network Version 2.503 (7/26/2015) * You can now stop as well as start MirrorSync using the 360Works admin utility (previously you could only restart it; it was always running) * Fixed a bug introduced in 2.5 where resetting the sync data was causing a new incomplete database to be written Version 2.502 (7/22/2015) * Fixed bug in HXSQL conversion on Windows * Fixed bug that could cause unintended deletions of SyncJoin Version 2.501 (7/15/2015) * Fixed broken dependency for SQL Server syncing Version 2.5 (7/10/2015) * It is now safe to transfer files between devices. This means that you can run an initial sync for your users before sending them the offline file. Also, if your offline users are having trouble syncing, they can send the files to you where you will be able to sync them. NOTE - it is not a good idea to sync from the same copy of a file from multiple devices on an ongoing basis - once a file has been sent to a second device, stop using it on the first device. * Better recovery after a syncing client crashes or is interrupted; significantly less chance of incorrect deletions or duplicate records. Note that this change requires an internal database change that may cause the first sync after this update is applied to take much longer than normal. * Now deletes MirrorSync log files older than 2 weeks (does not delete SyncAuditLog files, which are smaller and useful for historical reasons) * Now checks external IP addresses during configuration to make sure that they are accessible from the Internet; checks NAT settings and port forwarding to make sure that external users will be able to sync. * Switched to a newer, higher performance database (HXSQL) for tracking internal sync metadata. This speedup is most noticeable when doing an initial sync with a large database. * Downloading a clone using the MirrorSync download URL no longer appends 'Clone' to the filename. * 'Report a bug' button that comes up during sync now works for both internal and external IP addresses (previously always used the internal IP address) * Now retries XML requests when IIS returns empty results * Improved speed for deleting devices * Better error reporting if FileMaker XML Web Publishing Engine is not responding correctly * Many low-level improvements to reliability and thread-safety * Limit error messages sent to the offline file to 64,000 characters to prevent FileMaker Go from crashing when there are thousands of warnings / errors. * Workaround for a bug in FileMaker Go 14 that was causing Mirrorsync script to crash on iOS devices * Fixed a case where container syncing did not work in server-to-server configurations if the JDBC query failed and we fall back to XML * Fixed a case where recently-created records could be duplicated during initial sync when using hub filtering in customization script * Fixed a problem where MySQL BLOB fields sometimes did not transfer to FileMaker Server container fields Version 2.406 (5/28/2014) * Now intelligently tests different ports to figure out the best HTTP port for communicating with FileMaker XML Web Publishing Engine * Made table mapping panel more intuitive * Change download URLs to use the external IP address instead of the internal IP address * Fixed a bug that could cause duplicate records on the initial sync if filtering is enabled on the server, and filtered records were modified within 24 hours of a users initial sync who does not have access to the filtered records. * Fixed problem that could occur when recording metadata to internal database after sync completes, if there were numerous errors during the sync. * Fixed case sensitivty issue when creating new tables in MySQL with mixed-case table names * Fixed very long delays when deleting devices in license management screen * Disabled feature where device sync storage data was listed in licensing panel; was taking too long and slowing down license panel from displaying * Exiting the sync script should now close the MirrorSync window and enter browser mode (previously would remain in find mode) * Calc fields should be able to be synced if the sync is one-way to a writeable field, but this was not working in the case of one-way syncs from spoke to hub. Fixed. * Fixed a case where clicking cancel in the URL downloading dialog would not exit the sync script Version 2.405 (4/6/2015) * Worked around a problem in the fmsadmin command line tool that could sometimes leave the FileMaker http server in an 'off' state after running installer. Version 2.404 (4/2/2015) * Fixed a change in 2.4 that caused changes to not be picked up if offline device was in a different timezone than the server * Now compatible with FileMaker Server 12 and earlier configurations that have Apache on a separate computer from the Web Publishing Engine (not applicable for newer versions of FileMaker Server) Version 2.403 (3/26/2015) * Last minute change (just minutes after 2.402 shipped) to fix a bug where syncing containers using JDBC does not retain the file names. Version 2.402 (3/26/2015) * Fixed an infinite loop that could happen when starting the sync script with a non-functional network connection * Fixed a case where old versions of MirrorSync scripts would include garbage characters around ampersands (&) in text. * Improved BLOB image support with MS SQL Server to work around some problems with its JDBC driver * Added option to send emails either using Amazon Simple Email Sender (the default; no configuration required) or an internal SMTP server * Reuse active sessions on XML Web Publishing Engine for better speed and reduced memory usage * Fixed a bug that could, in certain cases, authenticate as the wrong user if a password was mis-typed * Continue to improve error handling and reporting in case of user-initiated and unexpected aborted syncs * MirrorSync script now exits with a '0' in case of a successful sync, so that developers can check for this * Fixed a bug affecting record counts when using custom SQL filtering * Fixed a bug that generated invalid SQL with MS SQL when syncing with a spoke database that is a duplicate of the hub database * When creating new tables in FileMaker from an SQL database, boolean values are now treated as Number instead of Text Version 2.401 (3/5/2015) This is a major update with many improvements and fixes: * Download links now support offline FileMaker databases larger than 2 gigabytes * Opens a single JDBC connection to FileMaker Server instead of one per table. This can substantially reduce memory usage when syncing a large number of tables. * Significantly improved setup time for syncs with large number of tables. Performance increase will be most noticeable when there are a small amount of changes across a large number of tables. * Improved handling of dropped network connections during sync; will now attempt 3 times before giving up on sync. * Improved auto-switching behavior between internal and external IP addresses * Performance improvements to skip several situations where deletion scanning was done when not necessary * Deletion scanning can now complete successfully even when users are adding new records to the server at the same time as the deletion scan * MirrorSync now optionally reports sync performance statistics to 360Works. If this is not desired, this option can be disabled when running the installer. * Reliability and speed improvements to avoid re-transmitting updates unnecessarily on the next sync after an aborted sync. * MirrorSync now supports SOAP as an alternative to REST for enterprise-level organizations that need to install MirrorSync behind a SOAP web services gateway. * Now bypasses IIS / Apache and communicates directly with the XML Web Publishing Engine when MirrorSync is installed on the same computer as FileMaker Server. This should give faster speed and more reliable communication. * Removed attempt to connect to 'ProscNoSuchDatabase' every 10 minutes, causing error 105 messages in the wpe logs * Fixed a case where trying to resolve thousands of conflicts could cause FileMaker Go to crash * Fixed a problem that could cause syncs to deadlock when there are numerous simultaneous syncs operating on the same configuration * Fixed duplicate record error that could occur when a record from hub to spoke fails validation, and is then fixed and re-synced * Fixed an error that was causing customization to MirrorSync.xml to be lost when updating * Fixed various time zone problems with MySQL * Fixed some time zone problems that can occur when syncing with MySQL in a different time zone than where the MirrorSync server is running. * Fixed another time zone problem that only occurred when using time fields in the British Summer Time zone; times were being written one hour off * Fixed a case where resolving conflicts with container fields could sometimes not write the container data to both databases * Fixed occasional problem where creation timestamps would be written incorrectly (far in the future) * Fixed a problem where tables names sometimes did not display during the configuration process (Windows only) Version 2.305 (12/23/2014) * Japanese localization improvements * Error message when wifi / cellular data is unavailable is now more user-friendly * If a MySQL data truncation error occurs when writing to the destination, don't continue to retry writing that record until the source data is changed. * Can now run in free mode (1 device, 1 configuration) without a network connection to the 360Works license server Version 2.304 (12/10/2014) * Fixed a bug introduced in 2.303 that broke the sync if there were empty container fields Version 2.303 (12/8/2014) * BLOB images synced from SQL databases will now render as images in FileMaker Pro; previously just showed a generic file icon * Fixed an error uploading BLOB data to Oracle databases from FileMaker Pro or Go * Fixed a recent bug in the installer that prevented first-time installation on OS X Version 2.302 (12/3/2014) * Using download link now works when using a non-FileMaker hub database, such as Oracle or MySQL, with a FileMaker spoke database * Writebacks are now written from hub to spoke on updates (was previously only for inserts). This makes it easy to see when a spoke record was last synced with the server. * Conflict resolution webpage allows saving to server from the last resolved conflict * Improved Japanese localization * Fixed error message about "Items are submitted in the wrong sort order" Version 2.301 (12/1/2014) * Overhauled installer to run much faster; fixed cases where it was disabling XML Web Publishing Engine by starting up the web server with the incorrect configuration * Undelete operations are now inserted in their original insertion order (was inserting them in reverse sort order) * Fixed a bug when creating new FileMaker tables from SQL databases: Creation timestamp was being added twice * Fixed a rare bug with incorrect SQL generation when 1) undeleting objects that 2) used a compound primary key, and 3) have a custom SQL filter applied Version 2.30 (11/25/2014) * Added new feature to allow custom SQL qualifiers to restrict records for mobile users based on the mobile user account name. This lets you sync just a subset of records from your MySQL, Oracle, or SQL Server database to FileMaker Pro/Go users, or FileMaker Server. * Added an option when using FileMaker client to choose to authenticate either with the device login or use the hub login specified in the configuration. Using the hob login allows all users to share the same credentials without being prompted for a password. This feature is necessary when using the custom SQL qualifier, which would have all users logging in with the same account but then doing a custom qualifier to restrict record access. * Complete overhaul of Oracle SQL generation. Now supports all Oracle data types, including BLOB data, as well as schema generation in Oracle. This means that you can create new Oracle tables from existing FileMaker tables with matching names and data types. FileMaker field names are automatically converted to Oracle-compatible names (no spaces, uppercase, max 30 characters) * Upgraded Oracle JDBC driver from version 5 to version 6 * Added support for CLOB data types, which can store very large amounts of text in SQL databases. * Significantly improved performance when inserting many records to SQL databases * Doubled speed of retrieving binary container data from FileMaker Server * Faster sync startup; eliminated delay at start of sync when syncing with SQL databases with many tables * Now supports download links for files with international characters in filename * Database download feature now supports downloading spoke databases when using non-FileMaker hub database, such as MySQL * Fixed a problem where MirrorSync could run out of memory when deleting columns from existing configurations, if there have been hundreds of thousands of records synced for that table. * Fixed several problems when syncing with Oracle databases; now supports spaces in table and column names * Fixed a problem caused by MySQL bugs (#15604, #71804) that were storing date values by one day off when MySQL runs in a different time zone than MirrorSync * Fixed a problem where links on MirrorSync home page didn't work (side effect of Japanese localization) * Fixed an error message that could occur if the web publishing engine IP address pointed to computer where the WPE was not running: java.lang.ClassCastException: javax.swing.JLabel cannot be cast to javax.swing.text.JTextComponent * Fixed a problem in the 2.208 update where MirrorSync was not accessible over Network Address Translation * Fixed a problem where MirrorSync configuration client would not launch when using an https:// URL to access MirrorSync, if http:// was also disabled * Fixed a problem specific to MS SQL Server when a primary key was configured as a text field (ie. UUID), but a numeric value was entered into it. Version 2.208 (10/27/2014) * Added a 'WillSync' and 'DidSync' section of the MirrorSync customization script, so that you can easily have your own pre- and post-sync actions. * Added a feature to override the last sync timestamp, to re-sync old records (for example, if they failed validation and you've changed the validation rules and want to re-sync). Right-click the name of the configuration to access this feature. * Speed improvements during sync configuration when reading table information * Now correctly generates MySQL tables from FileMaker tables with text primary keys * Prevents multiple syncs from running simultaneously if user double-clicks the 'sync' button for server-to-server syncing * Much smarter auto-selection of primary keys during setup * Improved error reporting when trying to sync records with blank primary keys * More informative subject lines in sync e-mail notifications * More user-friendly error messages in case of a conflict * Improved accuracy of when to retry failed operations * Fixed some assumptions about the international date line that could affect people in New Zealand during daylight savings time * Fixed an issue that caused configurations created prior to 2.207 to be lost during the update * Fixed an issue that could cause blank data to be written to a record, when resolving multiple conflicts simultaneously * Fixed an out of memory error that could occur when syncing many binary fields (BLOB) with an SQL database * Fixed an issue that caused Microsoft SQL Server to sometimes incorrectly complain about duplicate primary keys * Fixed a problem that occurred when syncing records with blank modification timestamps from FileMaker Server with an SQL database * Fixed a problem where customizations to memory allocation for MirrorSync were being reverted (Windows only) * Fixed an incorrect error message when multiple records were deleted on the server, and the offline user only had access to delete some records but not others Version 2.207 (9/11/2014) * Fixed a problem causing duplicate records when an insert operation is unexpectedly interrupted * MirrorSync installer now uses Tomcat 7 (upgraded from Tomcat 6) * Fixed a problem where customizations to the MirrorSync.xml file were being lost when an update is installed * Fixed a problem that occurred when using the writeback feature with multiple records in a single sync Version 2.206 (9/4/2014) * Fixed a bug that occurred in 2.204 which could cause text keys used as foreign keys to have invalid data written to them * International e-mail addresses that ended with 2 characters (like foo@bar.de) were not being accepted as a valid admin e-mail address. This is fixed. Version 2.204 (8/27/2014) * New feature does intelligent data type conversions between FileMaker and SQL databases. For example, UNIX timestamp numeric fields in SQL will be translated correctly to date / timestamp fields in FileMaker. * New feature allows syncing with a separate mobile file that is pre-populated with record data matching the server (previous version required offline file to be empty, if it was not a copy of the server file). This now works with both UUIDs and serial numbers. See documentation for details. * Corrected a bug that could occur when syncing large numbers of changes between MySQL servers, if both servers had changes * Reliability improvements to deletion detection * Fixed a rare problem that could occur with certain conflict resolution scenarios that would result in blank values being written to a conflicting record * Now allows syncing calculated fields to writeable fields. They will sync to the writeable field, but be ignored if trying to write back to them. * Upgrading from 2.1x to 2.2x had a bug that could cause duplicate records to occur during the sync. This update fixes that. Version 2.203 (8/8/2014) * Fixed an issue that prevented pasted sync script from working in FileMaker 13 in German * Fixed an NullPointerException that popped up on the last configuration screen after pasting script steps * Added useJdbcIfAvailable context parameter; can be set to false to avoid use of xDBC driver * Fixed a parsing error that could occur if invalid data was entered into a number field that looks like a number, like ".E0" * Fixed an error that occurred during configuration when mapping two different databases and clicking the 'refresh' button in the field mapping screen MirrorSync 2.202 (8/3/2014) Fixed two late-breaking problems: * Conflict resolution web display did not display * Sync fails with error that username is invalid. This would fail every other sync. MirrorSync 2.2 (7/28/2014) * Can now generate new empty tables in FileMaker Server when syncing with SQL databases * Can now generate new empty tables in SQL databases to match FileMaker schema * Now supports multi-spoke syncing, so it's possible to sync many database servers together * Now optionally supports not defining compound keys as foreign keys (ie. if they point to a table that is not being mapped) * Better handling of NOT NULL fields when syncing FileMaker Server with SQL databases * Auto-detects foreign keys in MySQL when using InnoDB tables and foreign key constraints * Auto-detects creation timestamps in MySQL * When creating new creation timestamps and modification timestamps in SQL databases, now has an option to batch-create them for all tables * Smoother behavior of drag and drop when mapping fields and tables * Can optionally specify SQL command to get next primary key (ie. trigger a stored procedure) MirrorSync 2.114 (7/17/2014) * Fixed a NullPointerException introduced in 2.110 that could occur when scanning for deletions. * Admin e-mail logs were not being sent (bug occurred in version 2.108 and is now fixed) MirrorSync 2.111 (7/16/2014) * Fixed a bug when transferring container fields if MirrorSync is running on a non-standard port * Fixed a bug that could cause a JSON parsing error when there are no accessible records in the database (MalformedJsonException: Unexpected value at line 1 column 26) MirrorSync 2.110 (7/15/2014) * New feature allows syncing with a separate mobile file that is pre-populated with record data matching the server (previous version required offline file to be empty, if it was not a copy of the server file). This only works when using UUIDs. * New feature allows de-duping to happen during sync, by customizing the 'MirrorSync customization' script. See advanced docs for more details. * MirrorSync log file now includes more detail on how long it took to read and write from each database, to help find performance bottlenecks * Better handling of invalid numeric data, such as bad ASCII characters. Now passes through as text instead of trying to convert to number. * Fixed a problem that could occur in rare cases during initial sync if primary keys start with a space. * Fixed a problem where MirrorSync complained that fields were missing, if there were special characters like periods in the filename * Fixed a problem that could occur when using custom record filtering to return a single record, if that single record was different for different syncing users * Fixed a problem that could cause the wrong foreign key to be written when resolving a conflict MirrorSync 2.109 (6/4/2014) * Fixed a bug where conflict resolver could not merge fields if there were any container fields in the sync * MirrorSync home page now shows whether a newer version of MirrorSync is available * Download links did not work when using SSL; this is now fixed. * Fixed a bug when using MirrorSync managed keys that the wrong foreign keys could get written during field-level conflict merging * AuditLog text file was mis-matching some fields with their values; this is fixed. Did not affect the actual sync, just the audit log. * Fixed some cases where the cancel / abort button didn't work during a long sync * Fixed a case where containers were not synced from client to server when connecting via a separate IP address MirrorSync 2.108 (5/6/2014) * Performance optimizations for resolving conflicts * Added a feature for developers to set their own e-mail address for the reply-to from 360Works tech support, and to receive copies of all user-submitted bug reports. * Made the sync script significantly smaller for syncs that contain many container fields * Fixed a bug where records inserted from other devices could be duplicated during initial sync of a new device (only applies when using MirrorSync managed keys) MirrorSync 2.107 (4/21/2014) * Fixed a bug that could potentially lead to duplicate records, if a write operation failed in a certain order * Fixed a bug that could lead to error message about duplicate insertOrders * When downloading a copy of a file from the server, ensure that no client records exist in the MirrorSync table (this happens if you take a file that has been synced and host it on the server) * Fixed a case where sync could hang if the FileMaker Web Publishing Engine returned invalid XML data * Fixed a case where commas were being inserted into numeric values. For the most part this was harmless, but some people use these number fields as a component of a primary key in a calculation, and that was causing the PKs to change. * More responsive when canceling a sync with many tables. * Allow timestamp fields in SQL databases to be used as modification timestamps, even if they do not have an auto-entered value (we assume that a trigger or application logic will set the field) MirrorSync 2.106 (4/4/2014) * Better handling of container data using JDBC driver * Fixed a message that could appear about invalid JSON data (was a bug introduced in 2.105) MirrorSync 2.105 (4/2/2014) * Fixed a bug where one container value could be sent to multiple records * Fixed bugs when trying to parse international values containing decimal places * Fixed a bug where requesting a clone download could return a full copy of the database instead MirrorSync 2.104 (4/1/2014) * Much, much faster writing large record batches to MySQL - benchmarked at 600 records per second from Atlanta to San Francisco and 4,000 records per second on the LAN. * 'Report a bug' link did not work from non-English speaking countries. This is now fixed. * Fixed a bug where auto-scheduled syncs could build up open connections and eventually become unresponsive, requiring MirrorSync to be restarted. * Email notifications are now sent on a separate thread to avoid slowing down the sync MirrorSync 2.103 (3/27/2014) * Added a customization in the context.xml file to set a FileMaker Server admin username and password so that users will not be prompted to enter it when downloading databases. This is targeted towards hosting providers, that want to allow downloads without giving full FMS admin accounts to clients. * Worked around a bug in the FileMaker JDBC driver where date values were being set 1 day behind, when syncing in a time zone east of Greenwich Mean Time. * Fixed a bug that could prevent containers from downloading when using separate internal and external IP addresses * No longer automatically inserts commas into numeric values MirrorSync 2.101 (3/19/2014) * Fixed a bug where generating download links does not work * Better handling for SQL databases that have columns which do not allow null values. Will automaticaly insert the default value if one is defined, and will show a warning during configuration if there is no default value * Log less detail for record transfers, should greatly shrink MirrorSync log files MirrorSync 2.1 (3/18/2014) === Features === * Now uses FileMaker 13 HTTP POST feature for all communication with MirrorSync server. This greatly improves speed, especially for syncing a small number of records across a large number of tables. * Now uses Base64 encoding to transfer container data, instead of connecting as a guest of FileMaker Server. This means that offline files with FileMaker Pro/Go 13 never need to connect as a guest of FileMaker Server. * Added support for syncing between FileMaker container fields and SQL BLOB columns. This can be used for server-to-server syncing, as well as directly between FileMaker go and SQL databases. * Setup wizard now asks user what version of FileMaker they are running, so it is no longer necessary to match the client version with the server version. This means it's fine to use FileMaker 13 client with FileMaker 12 server for MirrorSync. * Now compatible with Linux - ideal for hosting providers that want to run a single Linux MirrorSync server which can then coordinate syncs with FileMaker Server * Now supports downloading databases from a separate FileMaker Server than where MirrorSync is running * Now utilizes native FileMaker JDBC driver for fetching record data. This makes it almost impossible to run out of memory, even for very large record sets. * There is now a status page when downloading files from MirrorSync telling the user to wait a moment (instead of just a blank page) * Cut about 2 seconds off of no-change sync time when syncing 20-30 tables * Field level conflict merging is now exponentially faster for large numbers of conflicting records * Added a feature to manage size of internal sync database from licensing management screen. Removing a device from the list now also removes all sync data associated with that device, and compacts the sync database to save disk space. * Now does post-sync cleanup, faster as well as on a separate thread so that the sync user does not need to wait for this to happen. Bottom line: Faster syncing! === Fixes === * Fixed a bug where multiple container fields on the same table could sometimes get placed into the wrong container field when synced * Now auto-enters default values for SQL databases, if a default value is defined in the schema and the FileMaker value is empty. * Fixed conflict resolution web interface appearing too small on iPad * When doing an initial sync with developer-managed keys, will now match up records on just the primary key (instead of primary key + creation timestamp). This will normally will never happen, but is useful when syncing if the internal client sync data is missing. * Fixed a problem where MirrorSync could run out of memory after redeploying several updates without restarting Tomcat * FileMaker Go has a limit of 64,000 characters in a text field, so we now break the record data into smaller chunks if necessary to transmit data across the network. * More accurate detection of deleted record in sync batches that also contained old records that were previously filtered, but now available. MirrorSync 2.018 (2/12/2014) * Now shows MirrorSync version number in the configuration client * Fixed a case where config client could not connect to server if you were using NAT and the server had multiple IP addresses * Now translates between decimal numbers correctly when syncing between clients and servers in different regional formats. For example, syncing numeric values like "8,1" from Norway will be translated to "8.1" to a FileMaker Server running in the US. * Fixed a case where sync would pause indefinitely and not finish in countries that use a ',' character for decimal separators. MirrorSync 2.016 (2/11/2014) * Fixed root cause of 509 validation error that could occur during incremental sync. * Fixed bugs that could cause duplicate records during initial sync, if the creation timestamp was not in the same timezone as the MirrorSync server. * Much more efficient incremental sync after an initial sync that writes hundreds of thousands or millions of records. This will solve most cases where an OutOfMemory error occurred, as well as the first incremental sync after syncing to an empty clone. * Better error reporting if 'MirrorSync' layout is renamed MirrorSync 2.012 (2/5/2014) * Many minor bug fixes; improved error reporting MirrorSync 2.0082 (1/23/2014) * Scheduled scripts don't try to run simultaneously, even if the sync duration takes longer than the scheduled frequency. * Made the sync scripts more tolerant of MirrorSync customization scripts that do not constrain the found set. Doing that now is inefficient, but it won't cause an error. MirrorSync 2.0081 (1/23/2014) * Fixed a bug introduced in 2.006 that caused syncdata to be reset when editing a sync configuration. MirrorSync 2.008 (1/22/2014) * Fixed error that could occur when deleting records in a certain order: Data from FileMaker Server did not include requested table * In device management dialog, show the last sync date and time (instead of just date) * Fixed an error that occur when the server hostname is not set correctly * Links to open databases for configuration now work with 10 and 11 (previously only worked for 12 and 13) * Container fields did not sync correctly when using separate internal and external IP addresses, if the script was pasted in on Windows * Fixed a different case where container data was sometimes ignored during sync * Auto-entered fields are now synced last, to preserve their custom values without reverting to the auto-entered default value * When parsing response from server, ignore invalid / invisble unicode characters in text, instead of throwing an error. * Fixed a problem where auto-downloading did not work for the first database in the list of files from the server * SSL was not working during sync unless you also used SSL to access the MirrorSync launch page. Now SSL will work regardless of how you launch the admin utility. * Fixed a case where installer sometimes did not work on Mavericks 10.9 * Fixed an error that sometimes occurred in Spanish locale when resolving conflicts MirrorSync 2.0067 (1/17/2014) * Now works with FileMaker Pro 10 and FileMaker Server 10 * Added script check to make sure that global fields in MirrorSync table are really global (it's easy to mess this up if you aren't using FileMaker Pro Advanced) * Added script check to make sure that customizations to the sync scripts do not switch layouts without switching back to the original layout * Fixed a last-minute bug found in the Mac OS X installer MirrorSync 2.006 (1/15/2014) * Added support for a $$MIRRORSYNC_USERTOKEN global variable that can be set on the client and used by the server during record filtering. This is useful when you have multiple users sharing a single FileMaker sync acocunt name, but still want to filter records differently for each user. * Automatic downloading previously only worked for databases in the default Filemaker databases folder. It now works with additional database folders as well. * Now sends warning e-mails if MirrorSync is unable to update the MirrorSync table, ie. if the password is changed from when the configuration is created. * Added the ability to ignore changes on the spoke, if it's a one-way sync from hub to spoke. Ordinarily, MirrorSync scans the spoke for changes and reverts them to the hub value, but ignoring changes is more efficient, especially for initial syncs with > 100K records. * Fixed an error that occurred when duplicating configurations in the config client * Can now work with non-numeric data stored in FileMaker number fields without causing an error * Fixed a case where ampersands in text fields were being translated as ~%~ to the other database * Prevent users from accidentally syncing with an old duplicated version of a file, if they have synced more recently with another version of the file. * Improvements to Mac installer; fixed some cases where installation failed to set up URL forwarding in Apache * Use MirrorSync logo on config client splash screen * Fixed cases where this error happened during initial sync: "Same insertOrder for two different spoke rows in HsqlSyncJoin" MirrorSync 2.004 (12/27/2013) * Files configured in FileMaker Pro 13 were not displaying clickable buttons in dialog messages when opened in FileMaker 12. * Field-level merging was reverting to record-based conflict resolution when an unmergeable field value was found. This is now fixed. * If container fields could not be written, this was causing the whole sync to stop, and potentially leading to error messages on future syncs. Now the sync continues and just skips the container fields. MirrorSync 2.003 (12/18/2013) * Added a SyncAuditLog file to the logs directory that shows all changes written to all databases * Fixed a problem that occurs when doing an initial sync to an empty clone, if the central database contains invalid data at the point of initial sync. This could cause duplicate records to be written to the hub database. * Fixed some other licensing issues, mostly cosmetic in the license management dialog MirrorSync 2.002 (12/16/2013) * Fixed a licensing bug that could cause an incorrect message about exceeding the number of valid configurations MirrorSync 2.0 (12/11/2013) New features: === Rewritten conflict resolution === * Completely overhauled conflict resolution with a new web-based HTML 5 / JavaScript UI. * Support for field-level conflict resolution, allowing the user to pick which fields should be kept from which records. Auto-selects each value depending on which record it was changed in. * Automatic conflict merging when different fields are modified in the same record. * Conflict resolution process allows user to manually enter new value, in order to combine changes from both records. * Developer can specify custom conflict resolution policies, overall or per-table: User picks winner, last change wins conflicts, hub wins conflicts, administrator picks winner (notified via e-mail) === Server-to-server sync === * Now supports server-to-server sync (a single pair of servers). Supports any combination of FileMaker Server, MySQL, SQL Server, Oracle, or generic SQL database with JDBC. * Container fields are supported with FileMaker Server to FileMaker Server sync when running version 12 or later (FM Server 11 and SQL BLOB types are not currently supported). * Supports syncing dissimilar databases server-to-server databases with simple drag and drop field mapping. * Configuration utility assists with schema modification and creation of tables in MySQL, SQL Server, and Oracle. * Added auto-sync option for server-to-server sync, so you can sync at whatever frequency you want (defaults to 60 seconds). === Mobile sync features === * Now supports a dedicated mobile application, with different tables and fields than server file. Simple drag and drop field mapping. * Developer can now modify a customization script to control exactly which records should be synced for which user. Record level access privileges are still supported, but no longer required for this purpose. * This same script can be used to run custom actions on records when they are inserted or updated on the server. * By combining the previous two features, it is now simple to have records automatically deleted from the mobile device when a record status is changed and then synced. * There is now a simple process for syncing user-visible sequences which must be the same on the server and the offline file, such as invoice numbers, job numbers, check numbers, etc. * Supports downloading empty clones from FileMaker Server for initial sync (in addition to downloading full copies, which was in version 1). It is not necessary for the developer to prepare or distribute a sync file. This feature requires FileMaker 12 or later. * It is no longer absolutely necessary for users to run an initial sync before making changes to their offline copy. Inserts and modifications will be preserved and synced to the server. Deletions will be ignored and undone on the client during initial sync. * Aesthetic improvements for MirrorSync layout, now fits nicely on an iPhone / iPad. * Developer may optionally add the MirrorSync setup script to their own startup script, which will check to see if the file has been synced before, and prompt the user to run the intial sync if applicable. === Easier, faster setup process and more configuration options === * Automatically detects relationships and foreign keys during setup process, so you don't have to set them manually anymore! * Smarter auto-detection of primary keys, modification timestamps, and creation timestamps during configuration * Simpler process for creating sync layouts - it is no longer necessary to delete any fields (such as summaries, unstored calcs, or globals), they are automatically ignored. * Supports configuration of sync direction and primary keys on a per-table basis. * Added $$MIRRORSYNC_HIDE_WINDOW flag to allow users to sync without displaying the status of the sync. Intended as a supplement to $$MIRRORSYNC_SILENT_MODE * Developers can now easily customize or suppress dialog messages displayed to user during sync process by editing a FileMaker customization script. * Optional ability to customize the clock drift amount to compensate for clients with incorrect clocks or time zones * MirrorSync scripts are now grouped into a subfolder when they are pasted. * When downloading multiple database files from the server, databases are now shown grouped by folder * Progress indicators appear throughout the configuration process, make it more apparent when a long operation is running * Blue help icons now hyperlink to relevant section of documentation === General features === * Now supports 64 bit as well as 32 bit Java installations. * Email notifications when sync runs or fails, with configurable frequency and detail. * Much better detailed error reporting in case of validation failures while syncing * Improved support for international date and time formats. * Can now create unlimited download links without having to revoke old ones. * Much more accurate tracking of sync progress in the configuration utility, and better error reporting in configuration client if the server is shut down or restarted * Ability to install on any hard drive in Windows, not just C: drive. Speed / memory / performance: * Now supports fully multi-threaded synchronization, will support as many simultaneous sync clients as available RAM allows. Will take advantage of however many CPU cores are installed (up to 64). * Now supports 'fast delete scanning', which is an algorithm for predicting which records were likely to have been deleted, and checking those records for without needing to scan the entire set of primary keys in the database. * Inserted records are streamed to the destination instead of loading into memory. This makes inserts much faster, and also means that we can support millions of insertions without running out of memory. * Huge (20x) server-side performance improvements for inserting and updating large batches of records, by using a scripted process instead of using the insert/edit operations of the XML Web Publishing Engine. * Reduce size of sync script by about 40%, and made many performance optimizations. * Reduce transmission of container data to less than 50% of version 1. * On-the-fly compression of database copies or clones being downloaded to FileMaker Pro or Go, typically to about 15-25% of the original size. * Significant memory optimizations for hosting providers running multiple instances of MirrorSync for hosting clients, allowing more instances to be hosted in a given memory allocation. * Significant performance optmizations for initial sync with an empty clone. * Implemented connection pooling on the server side to make syncing even faster * Now much more efficient process for deleting large numbers of records. * When using the download feature of MirrorSync (either directly in the configuration utility or using the download URL), the timestamp of the download is stamped into the offline database, which make initial syncs much faster. * Configuration client starts up faster now Bug fixes: * Many improvements to overall sync reliability, with over 2,000 lines of code for test cases. * Fixed bugs related to multi-user record level access privileges * Fixed a case (currently only found with certain hosting provider configurations) where sync could take a very long time because of timeouts on socket connections to FileMaker Server * Fixed a performance problem where records inserted from the client to the server would be copied on the next sync back to the client, even if they had not been modified (only applies to UUID sync configurations, not serial numbers). This could potentially lead to false messages about record conflicts. * Fixed a case where records deleted on the server would not also be deleted on the client during initial sync * When running multiple instances of MirrorSync, fixed a problem that sometimes prevented the configuration client from running until the Java cache was reset. * Fixed a bug where newly inserted records could be duplicated if the sync was interrupted at a certain point in the process. * Fixed several cases where slow deletion scanning occurred where it was not needed. * Better performance diagnostics in the sync log file * Fixed cases where client was incorrectly reported as having timed out during sync process * Fix for iOS 7 problem with FileMaker Go where MAC addresses and persistent device ID are not being properly reported MirrorSync 1.5 (4/17/2013) * Complete overhaul of installation and deployment process. This version no longer installs as part of the FileMaker Web Publishing Engine; it installs its own Tomcat deployment enviroment. This should make both MirrorSync and the Web Publishing Engine more stable. It also means that the MirrorSync application does not need to run on the same computer as the Web Publishing Engine. We are also now using a native Mac OS X Installer, certified for use with Mountain Lion and Gatekeeper. * Added a new download link feature. Instead of downloading a database and sending a copy of it to your users, you can generate a URL that you send to your users. Whenever they trigger this URL, it will download the most recent copy of the database from the server. * Adding new tables to the sync configuration will not prevent older offline files from continuing to sync * New logging features in the Configuration Client. Users can report a bug straight from the config client, and log errors that may occur in the application. MirrorSync 1.4306 (2/13/2012) * Fixed a bug introduced in 1.4305 where you would get a NullPointerException when launching MirrorSync for the first time with no configurations. Does not affect people upgrading MirrorSync that already have one or more configurations. MirrorSync 1.4305 (2/7/2012) * Fixed case where empty modification timestamps (from records that existed before adding a modification timestamp field) could cause an error during sync * Fixed warnings about self-signed certificate when using SSL encryption MirrorSync 1.4301 (2/1/2012) * Added ability to specify custom timeout values (mainly useful with large container fields over very slow network connections) MirrorSync 1.43 (1/31/2012) * Switched to all numeric values when communicating with client instead of formatted strings for dates, times, and timestamps. This solves a variety of international date formatting issues. * Now efficiently detects duplicate primary keys in the FileMaker database and warn the user. This has been our most frequent tech support issue with MirrorSync. * More user-friendly, readable error messages throughout MirrorSync * Fixed a bug where text that contained HTML escape sequences (" > <   etc.. ) was not being sent correctly. * Submitting bug reports is now more reliable * Added an ability to submit bug reports from the MirrorSync configuration utility (for bugs that occur in the setup process, not during sync) * MirrorSync is now about 8 megabytes smaller by re-writing some overweight 3rd party libraries * Re-running a sync from a device after previous sync ws canceled should now be more reliable (sometimes used to get a message that sync was still running) * Various sync speed improvements * Fixed a case where MirrorSync sometimes ran in demo mode even after a valid license key had been registered * Fixed a bug during initial sync when using UUIDs, if multiple records had been modified on the server prior to initial sync. * Now supports initial sync of very large databases to an empty clone (previous version would run out of memory) MirrorSync 1.42 (12/21/2012) * Now supports configuration of separate internal and external IP addresses, as well as separate IP addresses for 1, 2, and 3 machine server deployments. * More reliable communication over slow/unreliable networks * Fixed a case where sometimes client would not send modifications to server, if the modification timestamp field was empty (because the field was just added) MirrorSync 1.41 (11/21/2012) * Fixed an issue that could cause unnecessary deletion scanning during initial sync, making it slower. * Better detection of which fields are read-only * Various bug fixes and validation improvements for tables with compound primary keys MirrorSync 1.4 (11/2/2012) * Fixes an issue regarding NoSuchRecordExceptions with multiple devices * Fixes issues regarding incorrect field mapping * Fixes an issue where repeating fields had leading zeros * Fixes an issue with placing scripts into a folder named "MirrorSync" * Adds support for Java 7 with Mac OS X * Configurations will no longer be removed inadvertently in the MirrorSync client * Syncing with empty clones and a one-way sync is now nearly instantaneous MirrorSync 1.31 (9/11/2012) * Completely re-written initial sync process for much faster initial syncs, even on slower iOS devices. * Downloading files from FileMaker Server 12 using MirrorSync configuration utility now includes externally stored container data. * Now supports multiple instances of Tomcat running, for hosting providers that prefer to deploy that way MirrorSync 1.3 (9/10/2012) * Added an enhanced bug report feature that sends the server log file. * More detailed messages during sync in the MirrorSync configuration utility * Much faster initial sync * Initial sync is now much more memory efficient, and should handle more than 500,000+ rows (across all tables combined). Memory settings can be increased for even larger sync configurations. * Sync is now more reliable with very large datasets being synced with iOS devices; added retry feature in case a message is dropped. * Added support for repeating fields * Removed incorrect validation warnings about duplicate primary keys in tables that have compound primary keys * Now works correctly with dates and timestamps that are entered with periods (.) or hyphens (-) instead of slashes (/) MirrorSync 1.261 (8/20/2012) * Restored compatibility with OS X and OS X Server 10.5 * MirrorSync configuration utility now shows more detailed information if you watch it while the sync is running * UUIDs may be numeric MirrorSync 1.26 (8/10/2012) * More reliable sync with very large datasets, especially with iOS sync. * Better error reporting if the server where MirrorSync is running is not accessible on the network. * Improved sync pre-flight validation to catch more configuration errors. Also now allows any validation failures to be ignored. * Fixed a problem that occurred when using SQL keywords as field names (such as 'select', 'from', 'where'). * Fixed a problem that occurred when syncing with remote container fields in FileMaker 12 (note - be sure to use the FileMaker Server Admin, not MirrorSync admin, to download an offline copy of files that use remote container fields). * Fixed several date parsing issues * Several other minor bug fixes MirrorSync 1.25 (7/27/2012) * You can now include ESS tables in the list of tables to sync with your offline file. Be sure to read the MirrorSync documentation for instructions on setting this up correctly. * You can now run multiple instances of MirrorSync on a single FileMaker Server - perfect for hosting providers! * Improved validation during setup now warns of misconfigured primary keys, modification timestamps, and blank primary keys * Various user interface and validation improvements during setup process * Fixed a bug that could cause an error 104 when synchronizing container fields in certain cases. * Fixed a bug when using a vertical pipe (|) character in a layout name. Bug fixes: * Fixed a bug that prevented configuration utility from running in certain custom Apache configurations that were also behind a firewall * Fixed a bug that occurred during initial sync with primary keys with a leading underscore character MirrorSync 1.2 (7/10/2012) * MirrorSync now provides a user interface for displaying record conflicts and selecting which record should 'win' the conflict! * MirrorSync configuration can now be done over Network Address Translation (NAT) and only port 80. * MirrorSync now works for non-English character encodings in file names, field names, and layout names. * Fixed cases where using the MirrorSync configuration utility to cancel synchronization would sometimes be ignored. * Better error reporting when trying to modify a record on the server that is in use * Better handling of backslash and other special characters in text when synchronizing * Fixed problem where carriage returns were being stripped out when writing text fields to FileMaker Server 11 * Synchronization is slightly faster and also runs in less memory * Fixed problem with changes not being synced by online users whose clocks are running slow * Numerous minor bug fixes MirrorSync 1.131 (6/23/2012) * More significant speed-ups to initial sync. Now takes about 20 seconds for an initial sync of 20,000 records. * Transcript log now includes timestamp information MirrorSync 1.13 (6/22/2012) * Initial sync is now much more efficient for large data sets * When syncing, the FileMaker script now tries to check and make sure that MirrorSync is running on the server before it starts sending any sync messages. This will give a better error message if the MirrorSync is not running on the server. * Downloading files from the server is now more efficient; it resumes the database before sending to the client (previously it did not resume the database until the client finished downloading). * Now shows a progress bar when downloading databases from server * Fixed a problem where the sync could hang if the client sent a very large amount of changes and new records to the server. * Login window now remembers the username from the last successful login MirrorSync 1.1 (6/11/2012) * Supports container field synchronization * Supports sync over SSL, so that all data is encrypted in transit * Matches field names, so that if fields are added or deleted on the server, offline copies can still sync * Numerous bug fixes MirrorSync 1.01 (5/31/2012) * Now supports downloading multiple files from server, for separation model or multi-file solutions. * Faster database downloads from FileMaker Server * More flexible with unusual date formats * Fixed a bug that caused sync to fail if multiple configurations are set up * Initial sync on very large data set could time out and fail; that is fixed * Much faster sync after initial sync * Fixed slow sync on FileMaker 11 with large record sets