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