There are two scripts that can be used for processing each table during the download transaction. These are the download_cursor script, which performs inserts and updates, and the download_delete_cursor script, which performs deletes.
These scripts are either SELECT statements or calls to procedures that return result sets. The MobiLink server downloads the result set of the script to the remote database. The MobiLink client automatically inserts or updates rows based on the download_cursor script result set, and deletes rows based on the download_delete_cursor event.
The MobiLink server downloads data in a single transaction.
Like the upload, the download starts and ends with connection events. Other events are table-level events.
The begin_download and end_download scripts for each remote table hold logic that is independent of the individual rows being updated.
The download does not distinguish between inserts and updates. The script associated with the download_cursor event is a SELECT statement that defines the rows to be downloaded. The client detects whether the row exists or not and then it performs the appropriate insert or update operation.
For timestamp-based downloads, you specify the last_table_download parameter to ensure that only changes since the last synchronization are downloaded. For example, the download_cursor or download_delete_cursor SQL script could include the line:
WHERE Customer.last_modified >= {ml s.last_table_download}
At the end of the download processing, the client automatically deletes rows if necessary to avoid referential integrity violations.
If you change the SendDownloadAck setting to ON, the download transaction is committed but the acknowledgement scripts are not executed until the acknowledgement is received.
By default, SendDownloadAck is set to OFF.