前文中透過InfoTransaction可來實現交易檔案間的Log功能(如使用AlwaysAppend的方式),但這裏的LogInfo則是用來記錄基本資料檔案或各種單據的異動記錄,所謂異動記錄就是User有對該資料或單據進行新增更改或刪除時,都可以利用本LogInfo元件來記錄下來。使用的方法如下文的說明。
我們就舉例要對Products(產品檔)進行異動管制與記錄,因此我們設計一個新表(如果已有此表,則此步驟省略),名字為Products_Log,資料結構與Products幾乎完全一樣,但多了一些欄位,如Log_ID欄位,為Identity型態,來作為主鍵(沒有特別的需求下,請務必配合開立此Identity型態欄位);一個為Log_state欄位為char(1),記錄資料異動狀態(如新增、刪除、修改);一個為Log_Date欄位為DateTime類型,記錄資料異動的時間;再一個Log_User欄位,記錄更改資料的用戶編號,其Table結構如下:
CREATETABLE
[Products_Log] (
[Log_ID]
[int] IDENTITY (1, 1)NOT NULL ,
[ProductID]
[int] NULL ,
[ProductName]
[nvarchar] (40)NULL ,
[SupplierID]
[int] NULL ,
[CategoryID]
[int] NULL ,
[QuantityPerUnit]
[nvarchar] (20)NULL ,
[UnitPrice]
[money] NULL ,
[UnitsInStock]
[smallint] NULL ,
[UnitsOnOrder]
[smallint] NULL ,
[ReorderLevel]
[smallint] NULL ,
[Discontinued]
[bit] NULL ,
[Log_State]
[nvarchar] (1)NULL ,
[Log_User]
[nvarchar] (10)NULL ,
[Log_Date]
[datetime] NULL ,
[LastPurchasePrice] [money] NULL ,
CONSTRAINT [PK_Products_Log] PRIMARYKEYCLUSTERED
(
[Log_ID]
)ON [PRIMARY] ,
)ON [PRIMARY]
GO
Step1>打開原來的S003項目,增加一個LogInfo元件,命名為lgMaster。將ucMaster(就是UpdateComp元件)的『LogInfo』設定為【lgMaster】。(讓ucMaster對應到這個LogInfo元件)。
圖
Step2>設定lgMaster屬性。
設定lgMaster的『LogTableName』屬性為【Products_Log】。代表要Log到那一個Table名稱(可以用下拉去選TableName);
設定『LogIDField』屬性為【Log_ID】(同樣下拉選欄位);
設定『MarkField』屬性為【Log_State】;
設定『ModifierField』屬性為【Log_User】;
設定『ModifyDateField』屬性為【Log_Date】;
設定『NeedLog』屬性為【True】。這個屬性是用來確定是否要將資料Log到目的表,所以一定要設為True才能讓Log機制生效;
設定『OnlyDistinct』屬性為【False】。代表所有欄位不管有沒有異動都會Log下來,如果設為True,則表示只有異動的欄位才會有記錄;
SrcFieldNames屬性是設定哪些欄位需要進行Log操作,如果沒有設定,表示全部。
圖
Step3>請將S003項目進行編譯,並讓EEPNetClient.EXE重新執行。打開C003,我們將找一筆5號的產品號碼去更改他的產品名稱與庫存單位(名稱請改為“TEST”,庫存單位改成“KGS”)。
圖
我們可以事先打開SQL Profiler來監看,在5號產品存檔時,我們就可以透過Profiler看到Products_Log的記錄內容,也可以自行再試下一下新增與刪除的動作,對Products_Log而言也會忠實的記錄下來。
Related Topics