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