下面的伪代码说明了如何调用上载事件和上载脚本。
这些事件在完整事件模型中的上载位置发生。请参见MobiLink 事件概述。
------------------------------------------------------ upload ------------------------------------------------------ begin_upload // Connection event for each table being synchronized { begin_upload // Table event } handle_UploadData for each table being synchronized { begin_upload_rows for each uploaded INSERT or UPDATE for this table { if( INSERT ) { <upload_inserted_row> } if( UPDATE ) { <upload_updated_row> } } end_upload_rows } for each table being synchronized IN REVERSE ORDER { begin_upload_deletes for each uploaded DELETE for this table { <upload_deleted_row> } end_upload_deletes } For each table being synchronized { if( begin_upload table script is called ) { end_upload // Table event } } if( begin_upload connection script was called ) { end_upload // Connection event for each table being synchronized { upload_statistics // Table event. } upload_statistics // Connection event. COMMIT |
------------------------------------------------------ <upload_inserted_row> ------------------------------------------------------ // NOTES: // - Only table scripts for the current table are involved. ConflictsAreExpected <- ( upload_new_row_insert script is defined or upload_old_row_insert script is defined or resolve_conflict script is defined ) if( upload_insert script is defined ) { upload_insert } else if( ConflictsAreExpected and upload_update script is not defined and upload_insert script is not defined and upload_delete script is not defined ) { // Forced conflict. upload_new_row_insert resolve_conflict } else { // Ignore the insert. } |
------------------------------------------------------ upload_updated_row ------------------------------------------------------ // NOTES: // - Only table scripts for the current table are involved. // - Both the old (original) and new rows are uploaded for // each update. ConflictsAreExpected <- ( upload_new_row_insert script is defined or upload_old_row_insert script is defined or resolve_conflict script is defined ) Conflicted <- FALSE if( upload_update script is defined ) { if( ConflictsAreExpected and upload_fetch script is defined ) { FETCH using upload_fetch INTO current_row if( current_row <> old row ) { Conflicted <- TRUE } } if( not Conflicted ) { upload_update } } else if( upload_update script is not defined and upload_insert script is not defined and upload_delete script is not defined ) { // Forced conflict. Conflicted <- TRUE } if( ConflictsAreExpected and Conflicted ) { upload_old_row_insert upload_new_row_insert resolve_conflict } |
------------------------------------------------------ upload_deleted_row ------------------------------------------------------ // NOTES: // - Only table scripts for the current table are involved. ConflictsAreExpected <- ( upload_new_row_insert script is defined or upload_old_row_insert script is defined or resolve_conflict script is defined ) if( upload_delete is defined ) { upload_delete } else if( ConflictsAreExpected and upload_update script is not defined and upload_insert script is not defined and upload_delete script is not defined ) { // Forced conflict. upload_old_row_insert resolve_conflict } else { // Ignore this delete. } |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |