InfoTransaction
【功能說明】
用途:用來設定當某一個 UpdateComp 執行 Insert/Update/Delete 的同時,對其他的資料表進行線上過帳與交易處理。此元件會在 UpdateComp 交易 Commit 前,自動下達交易的 SQL Command 。
【元件屬性】
Name( 名稱 )(string)
元件名稱,用於識別該元件。
UpdateComp ( 對應的 UdateComp )( UpdateComponent)
所要對應的 UpdateComponent 元件,當 UpdateComp 發生 Insert/Delete/Update 時會觸發本元件的過帳與交易動作。
Transactions( 過帳設定 )(
TransactionCollection)
設定過帳的具體內容,例如:目的資料表,交易模式,鍵值欄位對應,過帳欄位對應等。每個 InfoTransaction 都可定義多個交易動作,以過帳到不同的資料表中。具體設定及說明如下:
TransStep ( 步驟次序 )(
int) :代表 Transation 的步驟次序,從 1 開始,此 TransStep 可從將來的設定 U/I 來自動編號。
TransTableName ( 目的資料表 )(string) : 所要交易的對方資料表名稱。
TransMode ( 交易模式 )( enum) :共有 4 種:
1. AutoAppend ( 自動新增 ) :交易時,用 TransKeyFields 去找目的資料表 ( TransTableName) 時,如果找不到,就自動新增。新增時會以「 TransKeyFiels 」來 Insert 至 TransTableName 中。
2. Exception( 異常 ) :交易時,用 TransKeyFields 去找目的資料表 ( TransTableName) 時,如果找不到,即會讓相對的 UpdateComp 發出異常,並終止交易( RollBack )。
3. Ignore( 忽略 ) :交易時,用 TransKeyFields 去找目的資料表 ( TransTableName) 時,如果找不到,則不新增也不發出交易異常,會忽略對目前這個步驟的交易,並繼續往下執行 (下一個 TransStep )。
4. AlwaysAppend( 總是新增 ) :交易時,不必用 TransKeyFields 去找目的資料表 ( TransTableName) ,會固定在 TransTableName 上 Insert 資料,也就是說原始資料表 Insert 一筆,目的資料表也 Insert 一筆;原始資料表刪除一筆,目的資料表照樣也是 Insert 一筆;如果是原始資料表進行更改,則目的資料表會 Insert 兩筆,一筆更改前的值,另一筆為更改後的值。
AutoNumber( 自動編號元件 )(AutoNumber) :當 TransMode 為 AutoAppend/AlwaysAppend 時,如果目的資料表的主鍵需要自動編號時,可用來設定在新增資料時的自動編號原則。
TransFields ( 過帳欄位 )(
TransFieldCollection) : 過帳欄位對應 , 也就是說從原始資料表 UpdateComp 交易的目前筆資料 , 要取出那一個欄位 ( 或計算式 ) 來對目的資料表的指定欄位進行累加減或置換的動作。 可以設定多個過帳欄位, 系統會自動合併在同一個 Update 語法中。 其屬性如下:
DesField ( 目的欄位名稱 )(string) :指所要過帳的對方欄位名稱。
ScrField ( 來源欄位名稱 )(string) : 指 UpdateComp 內的主 Table 的欄位名稱。(就是對應 InfoCommand 內的欄位)。
ScrGetValue ( 來源公式 )(string) : 當不能以 UpdateCom 內的某一個欄位來取值時,則可以改用此函數的方式來取值,如 MyGetVal () 的方式取值。
UpdateMode ( 更改模式 )(
enum) : 共有 5 種:
1.
Inc( 累加 ) :將目的資料表的 DesField 累加,以 scrField 或 ScrGetValue 的值累加。
2.
Dec( 累減 ) :將目的資料表的 DesField 累減,以 scrField 或 ScrGetValue 的值累減。
3.
Replace( 替換 ) :將目的資料表的 DesField 以 scrField 或 ScrGetValue 的值替換。
4.WriteBack ( 寫回替換 ) :反向將 UpdateComponent 的主 Table 的 scrField 替換成目的資料表的 DesField 內容 ( 回寫更改 ScrField 欄位 ) 。
5.
Disable( 失效 ) :此過帳欄位暫時無效。
TransKeyFields ( 過帳鍵值欄位 )(
TransKeyFieldCollection) : 目 的資料表所要的 where 之對應欄位 , 可以設定多個欄位的對應關係。 組合方式為 Where DesField= ScrField 值(或 ScrGetValue 的 Return 值),如果有多個鍵值欄位,其 Where 間用「 and 」來組合。屬性如下:
DesField ( 目的鍵值欄位名稱 )(string) : 指過帳目的資料表裡的欄位名稱。
ScrField ( 來源鍵值欄位名稱 )(string) : 指 UpdateComponent 內的主資料表的欄位名稱。(就是關聯的 InfoCommand 內的欄位)
ScrGetValue ( 來源公式 )(string) : 當不能以 UpdateComponent 內的某一個欄位來取值,則改用此屬性來取值。
WhereMode (Where 關係的模式 )(
enum) : 組 Where 語句的模式,指針對 DesField 的模式。
1. WhereOnly :在對目的資料表交易時,會將此 DesField 放入 Where 的條件中,並配合 ScrField 取值。
2. InsertOnly :與 WhereOnly 相反,交易時不會將此 DesField 放入 Where 條件中,只在 AutoAppend/AlwaysAppend 發生 Insert 資料時,用來組 Insert 的欄位內容所使用。
3. Both :兩者都使用到,預設為 both 。此代表即會放入 Where 條件中,也會在 Insert 資料時組合欄位的內容。
WhenInsert ( 新增時過帳 )(
bool): 來源資料表在新增時是否要執行此步驟過帳。
WhenDelete ( 刪除時過帳 )(
bool): 來源資料表在刪除時是否要執行此步驟過帳。
WhenUpdate ( 刪除時過帳 )(
bool): 來源資料表在更改時是否要執行此步驟過帳。
【事件】
BeforeTrans ( 交易前執行程序 ) : 交易前執行的事件。
AfterTrans ( 交易後執行程序 ) : 交易後執行的事件 , 可以利用它的 Abort 參數來控制此交易是否要執行 , 如
:
private void
infoTransaction1_BeforeTrans(object sender, InfoTransactionBeforeTransEventArgse)
{
if ( ucOrders.GetFieldCurrentValue("Term"). ToString()=='2')
{
e.Abort= true; // Orders.Term 欄位為 '2' 此
Transaction 不作用 .
}
}
【功能函數】
此元件無功能函數。
【其他說明】
1. 此元件的 過帳功能會結合 UpdateComponent 的異動功能共同進行交易 , 成功會一起成功 , 失敗會一起失敗 ( 異常新增模式為不予理會時除外 ), 系統會取出所要交易的欄位 , 所以要確定所要過帳交易的欄位資料一定要有值 , 不能為 Null , 否則交易後數值不會有增加 (Null 加上任何值還是 Null) 。
2. 元件在過帳時會先去 Select 目的資料表的舊資料,在 Update 時會自動加舊資料值於 where 語句中,以保證交易過程中無其他 User 再異動其參考值,讓交易系統能精確與一致。
3. 後端的 Transaction 中 , 可以使用另一個視覺方式來設計 Table 間的過帳關係 , 在 Transaction 元件上 "Double Click" 即可 , 其中 , 可以用 "Add"/"Delete" 來新增與刪除 Step, 並可以在每個 Step 的左方 " 圓點 "Click 來設定 KeyField 鍵值關係 , 在右方的 " 三角型 "Click 來設定 TransField 過帳欄位關係 , 還可以將 Show Detail 打勾 , 讓彼此的欄位關係全部顯示出來 。
4. 在 TransMode 為 AlwaysAppend 時,來源資料表在 Insert/Update/Delete 的模式下,系統會根據 TransFields.UpdateMode 的 Replace/inc/
dec 情況下 , 會有不同的存入值,特別說明如下:
1. 來源資料表在 Insert 模式 : 目的資料表欄位在 Replace 時會存入新值 , 在 inc 時會存入「正新值」 , 在 dec 時會存入「負新值」。
2. 來源資料表在 Delete 模式 : 目的資料表欄位在 Replace 時會存入舊值 , 在 inc 時會存入「負舊值」 , 在 dec 時會存入「正舊值」。
3. 來源資料表在 在 Update 模式 : 目的資料表會有兩筆 Insert ,前一筆在 Replace 時會存入舊值 , 在 inc 時會存入「負舊值 , 在 dec 時會存入「正舊值」;後一筆則在 Replace 時會存入新值 , 在 inc 時會存入「正新值」 , 在 dec 時會存入「負新值」。
| Converted from CHM to HTML with chm2web Pro 2.85 (unicode) |