The business rules for the ULOrder table are as follows:
Orders are downloaded only if they are not approved or the status is null.
Orders can be modified at both the consolidated and remote databases.
Each remote database contains only the orders assigned to an employee.
Orders can be inserted, deleted, or updated at the consolidated database. The scripts corresponding to these operations are as follows:
download_cursor The first parameter in the download_cursor script is the last download timestamp. It is used to ensure that only rows that have been modified on either the remote or the consolidated database since the last synchronization are downloaded. The second parameter is the employee ID. It is used to determine which rows to download.
The download_cursor script for CustDB is as follows:
| CALL ULOrderDownload( {ml s.last_table_download}, {ml s.username} ) | 
The ULOrderDownload procedure for CustDB is as follows:
| CREATE PROCEDURE ULOrderDownload ( IN LastDownload timestamp, IN EmployeeID integer )
BEGIN`
  SELECT o.order_id, o.cust_id, o.prod_id, o.emp_id, o.disc, o.quant, o.notes, o.status
    FROM ULOrder o, ULEmpCust ec
    WHERE o.cust_id = ec.cust_id
    AND ec.emp_id = EmployeeID
    AND ( o.last_modified >= LastDownload
    OR ec.last_modified >= LastDownload)
    AND ( o.status IS NULL  OR  o.status != 'Approved' )
    AND ( ec.action IS NULL )
END | 
download_delete_cursor The download_delete_cursor script for CustDB is as follows:
| SELECT o.order_id, o.cust_id, o.prod_id, o.emp_id, o.disc, o.quant, o.notes, o.status
    FROM ULOrder o, dba.ULEmpCust ec
  WHERE o.cust_id = ec.cust_id 
    AND ( ( o.status = ''Approved'' AND o.last_modified >= {ml s.last_table_download} ) 
    OR ( ec.action = ''D''  )  )
    AND ec.emp_id = {ml s.username} | 
Orders can be inserted, deleted or updated at the remote database. The scripts corresponding to these operations are as follows:
upload_insert The upload_insert script for CustDB is as follows:
| INSERT INTO ULOrder ( order_id, cust_id, prod_id, emp_id, disc, quant, notes, status )
   VALUES( {ml r.order_id, r.cust_id, r.prod_id, r.emp_id, r.disc, r.quant, r.notes, r.status } ) | 
upload_update The upload_update script for CustDB is as follows:
| UPDATE ULOrder 
  SET cust_id = {ml r.cust_id},
      prod_id = {ml r.prod_id},
      emp_id = {ml r.emp_id},
      disc = {ml r.disc},
      quant = {ml r.quant},
      notes = {ml r.notes},
      status = {ml r.status}
    WHERE order_id = {ml r.order_id} | 
upload_delete The upload_delete script for CustDB is as follows:
| DELETE FROM ULOrder WHERE order_id = {ml r.order_id} | 
upload_fetch The upload_fetch script for CustDB is as follows:
| SELECT order_id, cust_id, prod_id, emp_id, disc, quant, notes, status
   FROM ULOrder WHERE order_id = {ml r.order_id} | 
upload_old_row_insert The upload_old_row_insert script for CustDB is as follows:
| INSERT INTO ULOldOrder ( order_id, cust_id, prod_id, emp_id, disc, quant, notes, status )
   VALUES( {ml r.order_id, r.cust_id, r.prod_id, r.emp_id, r.disc, r.quant, r.notes, r.status } ) | 
upload_new_row_insert The upload_new_row_insert script for CustDB is as follows:
| INSERT INTO ULNewOrder ( order_id, cust_id, prod_id, emp_id, disc, quant, notes, status )
   VALUES( {ml r.order_id, r.cust_id, r.prod_id, r.emp_id, r.disc, r.quant, r.notes, r.status } ) | 
resolve_conflict The resolve_conflict script for CustDB is as follows:
| CALL ULResolveOrderConflict | 
The ULResolveOrderConflict procedure for CustDB is as follows:
| CREATE PROCEDURE ULResolveOrderConflict()
BEGIN
  -- approval overrides denial
  IF 'Approved' = (SELECT status FROM ULNewOrder) THEN
    UPDATE ULOrder o
    SET o.status = n.status, o.notes = n.notes
    FROM ULNewOrder n
    WHERE o.order_id = n.order_id;
  END IF;
  DELETE FROM ULOldOrder;
  DELETE FROM ULNewOrder;
END | 
| Discuss this page in DocCommentXchange. Send feedback about this page using email. | Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |