附錄\B. Server端元件\UpdateComponent

【功能說明】

用途:使用於Server端,本元件是為了能自動化處理Client端所要求的Insert/Update/Delete等需求,EEP Server會以此元件來下達對應的Insert/Update/DeleteSQL指令。本元件須連接到對應的InfoCommand元件,並成雙成對。

 

【元件屬性】

Name(名稱)(string)

元件名稱,用於識別該元件。

 

AutoTrans(自動交易)(bool)

預設為True,建議最好設定為True,因為如果設成True,系統在處理Client端的Insert/Update/Delete要求時自動下Begin/Commit Transaction,有發生異常或錯誤時會自動下RollbackTransaction語句。

 

ExceptJoin(關聯欄位排除)(bool)

True/FalseTrue時,會自動分析SqlCommand,將Left Join欄位自動加入FieldAttrs中,並設為UpdateEnable=False(不參與更改),以防止對Left Join欄位下達Update而發生錯誤,預設為True

 

FieldAttrs( 預設欄位明細 )(FieldAttrCollection)

特殊控制每個欄位的預設值或是否更改,欄位屬性為多個 FieldAttr 物件所組成,每個 FieldAttr 又可以設定下列屬性。

 

CharSetNull(bool)

設為true后,如果是空白值,系統會保存Null

 

CheckNull( 檢查空白 )(bool) True/False ,一般檢查資料有三種,一種在 Client 端用 DefaultValidate 元件的機制檢查,第二種則為本屬性,如指定本 DataField 欄位內容為空白者,系統即會放棄回寫資料庫的動作,並發出錯誤訊息通知 Client ,第三種為 Database 的設定,資料庫上也有 CheckNull 的設定,同樣也可不允許欄位空白。因為在大部份情況下希望發展的系統不受單一種類資料庫所限制,再加上 SUpdateComp CheckNull 警告時點與其訊息不易控制的情況下,還是建議寫在 Client 端較佳。(此用在 Update/Insert 時)。

DefaultMode( 預設選項 )(enum) :為控制 DefaultValue 的模式,共有三種: 1. 新增時預設;  2. 更改時預設;  3. 新增更改時都預設。

TrimLength( 截斷長度 )(int) 可以讓型態為 String 的欄位依此長度截斷 , 預設為 0 代表不截斷。

UpdateEnable( 更改致能 )(bool) True 代表此欄位要進行更改, False 代表不進行更改,目的是用來過濾有 Left Join 別表的欄位不要進行對主資料表進行更改。(此用在 Update/Insert )

WhereMode( 加入 Where)(bool)True/False ,當 insert Update 時,其欄位內容的舊值要不要加入 where 條件當中。

DataField(欄位名稱)(string)所要控制的欄位名稱,本名稱必須在SqlCommand中要有此欄位。

DefaultValue( 預設值 )(string) 支持文字、數字,會依欄位型態自動轉換,如果要動態的內容值,也可使用函數方式,或者可以配合 UpdateComp BeforeUpdate BeforeInsert 的事件來處理(此用在 Update/Insert 時)。函數設定方法:例如:給一個 DateTime 類型的欄位設值,可以在此寫上 MyGetdate() (請加括號以表示此為函數)。在程式如下:

public DateTime MyGetDate()

{

return DateTime.Now.Date;

}

為了簡化,你也可以用 EEP 系統變數,如 _Today 即可取代以上的程式, _ServerDay 代表主機上的日期等等。

 

LogInfo(異動記錄)(LogInfo)

本屬性用來設定自動記錄User對本資料的新增、更改與刪除動作,細節說明見LogInfo元件。

 

RowAffectsCheck(影響行數檢查)(System.Boolean)

設置是否要檢查更新影響的行數。

 

SelectCmd(對應InfoCommand)(InfoCommand)

對應的InfoCommand,須選擇對應的InfoCommand,否則UpdateComp則無法獨立運作。

 

SelectCmdForUpdate(InfoCommand)

專門負責用於對含有DBLINK等複雜語句的InfoCommand進行新增更新刪除

 

ServerModify(Server同步)(bool)

此屬性用在當後端資料庫有TriggerStored Procedure時,或有Identity類型欄位時,當UpdateComp存入後必須重新Select出最新的資料給相對的Client,才能讓Client的用戶取得最新的資料。在InfoDataSet中也有一個ServerModify的屬性,兩者必須相互搭配。

 

ServerModifyColumns(伺服更新參考欄位)(collection)

ServerModify=True時,要重新取出資料到Client端時,會以此設定的指定欄位加入Where語句中去重讀Server端資料,沒設定則自動以 InfoCommandKeyFieldsWhere欄位。

 

ServerModifyGetMax(伺服更新最大值)(bool)

可以配合Table自增值的欄位(Identify) 的取出,由於使用了Select MAX(key) From Table的方式,所以也無法100%保證取得User剛剛存檔的那一筆單據號碼。

 

TransactionScopeTimeOut()

事物處理的時間限制

 

TransIsolationLevel(隔離層次)(enum)

DataBase的隔離層次,預設為ReadCommitted,其他還有ReadUncommitted,Unspecified,Chaos,RepeatableRead,Serialzable,Snapshot,請參考資料庫的Isolation Level的說明。

 

UseTranscationScope(bool)

多個資料庫之間是否使用事物處理

 

WhereMode(Where模式)(enum)

Update/DeleteUpdateComp會自動產生where語法,此共有三種設定,如下:

使用主鍵:此為預設值,一般都是以主鍵做為where的條件。

主鍵與欄位屬性:除了主鍵外,須加上FieldAttrs的欄位屬性WhereMode中設定為True的的欄位。

全部:所有欄位都置於where中。

 

【事件】

BeforeApply(存檔前):不管是Insert/Delete/Update,都會在上述動作之前先執行存檔前這個事件。

 

AfterApply(存檔後):不管是Insert/Delete/Update,都會在存檔成功後執行這個事件。

BeforeInsert(新增前)Insert前所要執行事件。

AfterInsert(新增後)Insert後所要的執行的事件。

BeforeDelete(刪除前)Delete前所要執行的事件。

AfterDelete(刪除後) Delete後所要執行的事件。

BeforeModify(更改前)Update前所要執行的事件。

AfterModify(更改後)Update後所要執行的事件。

 

【功能函數】

本元件暫無功能函數。

 

【其他說明】

UpdateComp可以依欄位是否為UniCode自動設定N'Value'的方式寫入,整個UpdateComp全面支援UniCode的存取功能。


Top of Page