第六章 Server端程式開發第六章 Server端程式開發\6-3 交易程式的開發

6-3 交易程式的開發

上面一個章節介紹了如何使用InfoTransaction元件來實現資料的交易,這一節我們將介紹如何通過程式來進行資料的交易。

使用後端資料庫的Trigger方式來設計,因為Trigger可以讓你在Table Insert/Delete/Update時搭配InsertedDeleted的新舊資料來自行下達SQL語句達到資料過帳的目的,這種寫法優點是很方便,只要負責下基本Insert/Delete/Update指令給資料庫就可已完成過帳,執行效能高。下面我們就通過例子來看看如何進行功能的實現。需要完成在sOrders這個Sever中,當訂單明細的產品數量(Quantity)修改時,將Products表中的UnitsOnOrder中得累加。

Step1>        首先找到sOrders這個專案,找到detail相應的OrderDetailsUpdateComponent

Step2>        在這個UpdateComponent的屬性頁找到Event按鈕。

1. BeforeInsert

觸發在資料新增前,還未保存到資料庫的情況下。

2. BeforeModify

觸發在資料修改前,還未保存到資料庫的情況下。

3. BeforeDelete

觸發在資料刪除前,還未保存到資料庫的情況下。

4. BeforeApply

觸發在資料存檔前,還未保存到資料庫的情況下。

5. AfterInsert

觸發在資料新增後,已保存到資料庫的情況下。

6. AfterModify

觸發在資料修改後,已保存到資料庫的情況下。

7. AfterDelete

觸發在資料刪除後,已保存到資料庫的情況下。

8. AfterApply

觸發在資料存檔過程中的情況下。

9. AfterApplied

觸發在資料完成交易後的情況下。

Step3>        這裡我們以BeforeModify為例子,在這個Event上雙擊進入程式碼編寫狀態。寫入如下程式。

 

private void ucOrderDetails_BeforeModify(object sender, UpdateComponentBeforeModifyEventArgs e)

        {

            int qtyOld = Convert.ToInt32(ucOrderDetails.GetFieldOldValue("Quantity"));

            int qtyNew = Convert.ToInt32(ucOrderDetails.GetFieldCurrentValue("Quantity"));

            int productId = Convert.ToInt32(ucOrderDetails.GetFieldCurrentValue("ProductID"));

            if (!qtyNew.Equals(qtyOld))

            {

                int diference = qtyNew - qtyOld;

                string sql = "update Products set UnitsOnOrder = UnitsOnOrder + " + diference.ToString() + " where ProductID = " + productId.ToString();

                this.ExecuteCommand(sql, ucOrderDetails.conn, ucOrderDetails.trans);

            }

        }

 

由上面的程式可以了解到當前修改資料的UpdateComponent擁有了GetFieldOldValueGetFieldCurrentValue兩個方法,其中在BeforeInsert時,只有GetFieldCurrentValue可以有取出值。在BeforeDelete時,只有GetFieldOldValue方法可以取出值。

Step4>        做完上面的步驟,將sOrders重新建置,然後重新運行訂單管理這個頁面,在修改Detail存檔後,查看資料庫修改的語句。

 


 

Top of Page