【功能說明】
用途:使用於Server端,本元件是為了能自動化處理Client端所要求的Insert/Update/Delete等需求,EEP Server會以此元件來下達對應的Insert/Update/Delete等SQL指令。本元件須連接到對應的InfoCommand元件,並成雙成對。
【元件屬性】
Name(名稱)(string)
元件名稱,用於識別該元件。
AutoTrans(自動交易)(bool)
預設為True,建議最好設定為True,因為如果設成True,系統在處理Client端的Insert/Update/Delete要求時自動下Begin/Commit
Transaction,有發生異常或錯誤時會自動下RollbackTransaction語句。
ExceptJoin(關聯欄位排除)(bool)
True/False,True時,會自動分析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)
此屬性用在當後端資料庫有Trigger或Stored Procedure時,或有Identity類型欄位時,當UpdateComp存入後必須重新Select出最新的資料給相對的Client,才能讓Client的用戶取得最新的資料。在InfoDataSet中也有一個ServerModify的屬性,兩者必須相互搭配。
ServerModifyColumns(伺服更新參考欄位)(collection)
當ServerModify=True時,要重新取出資料到Client端時,會以此設定的指定欄位加入Where語句中去重讀Server端資料,沒設定則自動以 InfoCommand的KeyFields為Where欄位。
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/Delete時UpdateComp會自動產生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的存取功能。