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)