第七章 Server端程式開發第七章 Server端程式開發\7-3 交易程式的開發

7-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. AfterInsert

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

5. AfterModify

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

6. AfterDelete

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

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 = UnitOnOrder + " + diference.ToString() + " where ProductID = " + productId.ToString();

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

            }

        }

 

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

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

 


 

Top of Page