【功能說明】
用途:用來設定當某一個UpdateComp執行Insert/Update/Delete的同時,對其他的資料表進行線上過帳與交易處理。此元件會在UpdateComp交易Commit前,自動下達交易的SQL Command。
【元件屬性】
ID(名稱)(string)
元件名稱,用於識別該元件。
UpdateComponent(對應的UpdateComponent)
所要對應的UpdateComponent元件,當UpdateComp發生Insert/Delete/Update時會觸發本元件的過帳與交易動作。
Transactions(過帳設定)(TransactionCollection)
設定過帳的具體內容,例如:目的資料表,交易模式,鍵值欄位對應,過帳欄位對應等。每個InfoTransaction都可定義多個交易動作,以過帳到不同的資料表中。具體設定及說明如下:
(1)TargetTable (目的資料表)(string):所要交易的對方資料表名稱。
(2)TransMode(交易模式)(enum):共有5種:
(a)AutoAppend(自動新增):交易時,用TransKeyFields去找目的資料表(TransTableName)時,如果找不到,就自動新增。新增時會以「TransKeyFiels」來Insert至TransTableName中。
(b)SyncAppend(同步新增):交易時,用TransKeyFields去找目的資料表(TransTableName),跟著本表同步新增更改刪除等動作。等於是把本表的資料內容複製一份給對方資料表;新增時對方也跟著新增,更改時對方也跟著更改,刪除也會同步刪除。
(c)AlwaysAppend(總是新增):交易時,不必用TransKeyFields去找目的資料表(TransTableName),會固定在TransTableName上Insert資料,也就是說原始資料表Insert一筆,目的資料表也Insert一筆;原始資料表刪除一筆,目的資料表照樣也是Insert一筆;如果是原始資料表進行更改,則目的資料表會Insert兩筆,一筆更改前的值,另一筆為更改後的值。
(d)Ignore(忽略):交易時,用TransKeyFields去找目的資料表(TransTableName)時,如果找不到,則不新增也不發出交易異常,會忽略對目前這個步驟的交易,並繼續往下執行(下一個TransStep)。
(e)Exception(異常終止):交易時,用TransKeyFields去找目的資料表(TransTableName)時,如果找不到,將強制終止交易處理,此會連同原來表單的存入資料庫的交易一起終止。此為最常用的交易模式,多數的交易都是要對方的資料存在才能交易。
WhenInsert(新增時過帳)(bool):來源資料表在新增時是否要執行此步驟過帳。
WhenDelete(刪除時過帳)(bool):源資料表在刪除時是否要執行此步驟過帳。
WhenUpdate(修改時過帳)(bool):來源資料表在更改時是否要執行此步驟過帳。
Fields(過帳欄位)(TransFieldCollection):過帳欄位對應,也就是說從原始資料表UpdateComp交易的目前筆資料,要取出哪一個欄位(或計算式)來對目的資料表的指定欄位進行累加減或置換的動作。可以設定多個過帳欄位,系統會自動合併在同一個Update語法中。其屬性如下:
(1)TargetField(目的欄位名稱)(string):指所要過帳的對方欄位名稱。
(2)SourceField(來源欄位名稱)(string):指UpdateComp內的主Table的欄位名稱。(就是對應InfoCommand內的欄位)。
(3)UpdateMode(更改模式)(enum):共有6種:
(a)Increase(累加):將目的資料表的TargetField累加,以SourceField的值累加。
(b)Decrease(累減):將目的資料表的TargetField累減,以SourceField的值累減。
(c)DecreaseNotZero(累減不小於0):將目的資料表的TargetField累減,以SourceField的值累減,但是累減後的值不得小於0。
(d)Replace(替換):將目的資料表的TargetField以SourceField的值替換。
(e)ReplaceNagtive(替換為負值):將目的資料表的TargetField以SourceField的負值替換。
(f)WriteBack(寫回替換):反向將UpdateComponent的主Table的SourceField替換成目的資料表的TargetField內容(回寫更改SourceField欄位)。
KeyFields(過帳鍵值欄位)(TransKeyFieldCollection):目的資料表所要的where之對應欄位,可以設定多個欄位的對應關係。組合方式為Where TargetField=SourceField值,如果有多個鍵值欄位,其Where間用「and」來組合。屬性如下:
(1) TargetField (目的鍵值欄位名稱)(string):指過帳目的資料表裡的欄位名稱。
(2) SourceField (來源鍵值欄位名稱)(string):指UpdateComponent內的主資料表的欄位名稱。(就是關聯的InfoCommand內的欄位)。
ExceptionMessage(錯誤提示訊息):在過帳失敗時,顯示的訊息。
BatchProcess(批次處裡):是否不要即時同步去進行交易過帳。
AutoNumber(自動編號):可以配合AutoNumber元件讓自動新增的單據可以自動編號。
【其他說明】
此元件的過帳功能會結合UpdateComponent的異動功能共同進行交易,成功會一起成功,失敗會一起失敗,系統會取出所要交易的欄位,所以要確定所要過帳交易的欄位資料一定要有值,不能為Null,否則交易後數值不會有增加(Null加上任何值還是Null)。
元件在過帳時會先去Select目的資料表的舊資料,在Update 時會自動加舊資料值於where語句中,以保證交易過程中無其他User再異動其參考值,讓交易系統能精確與一致。
在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時會存入「負新值」。