第4章EEP 2019基礎設計(上)第4章EEP 2019基礎設計(上)\4-2單檔的基礎設計

4-2單檔的基礎設計

q   單檔Server端程式設計

[訊光提示]

此部份與快速入門雷同,詳細步驟可以參考《EEP2019快速入門》的說明,現簡單重點說明如下:

 

Step1執行桌面上的SOLUTION1.sln,進入VS2019的開發環境。此步驟是為了在VS2019中打開我們預設的SOLUTION1.sln檔案。

 

Step2SOLUTION1中,添加一個新Project(從範本SSingle),命名為S003。可以從目錄EEPServer上面按下滑鼠右鍵,然後選擇Add New Project…出現如圖的視窗,選擇範本SSingleLocation程式路徑選擇C:\Program Files\InfoLight\EEP2019\SOLUTION1即可。

 

 

4-2-1設定Server Project名稱和路徑

 

Step3產生ServerProject後,點兩下S003Project裏面的Component.cs,叫出設計畫面,請設定infoConnectionConnectionString連接到ERPS

4-2-2設定infoConnectionConnectionString

Step4這次我們要作一個Products表的輸入畫面,所以將MasterInfoCommandCommandText設定為select [Products].* from [Products]要按下旁邊的按鈕來設定SQL語句並設定好KeyFieldsProductID


4-2-3分別設定CommandTextKeyFields

 

Step5請編譯上面作好的S003,請在S003用右鍵Build功能來產生S003.dll檔案。

4-2-4編譯作好的S003

 

Step6執行EEPNetServer.exe,選擇File->Package Manager,選擇SOLUTION1並將其剛編譯完成的S003.dll檔案加到SOLUTION1這個群組中供User使用。


4-2-5S003.dll檔案加到SOLUTION1

 

 

 




q   單檔-Client端程式:

[訊光提示]

此部份與快速入門雷同,詳細步驟可以參考《EEP2019快速入門》的說明,現簡單重點說明如下:

 

Step1執行桌面上的SOLUTION1.sln,進入VS2019開發環境。

 

Step2SOLUTION1中,添加一個新Project(從範本CSingle),命名為C003。可以從目錄EEPClient上面按下滑鼠右鍵,然後選擇Add New Project..出現如圖的視窗,選擇範本CSingleLocation程式路徑選擇C:\Program Files\InfoLight\EEP2019\SOLUTION1即可。ServerClient的程式各自有S003C003的目錄,但都放在同一個目錄Soultion1之下

4-2-6設定Client Project名稱和路徑

Step3此時會產生一個C003Project點兩下S003裏面的Form1.cs,打開Form1的設計畫面,將MasterInfoDataSet關聯到S003(InfoCommand).Master,也就是選擇MasterInfoDataSetRemoteNameS003.Master資料源,並將其Active設為True,即可打開此資料源;再來就是ibsMasterInfoBindingSourceDataMember指向InfoDataSet內的Master資料表,進行資料源的綁定,好讓資料與各U/I元件連結與溝通。

4-2-7設定Master RemoteNameDataMember

 

 

Step4貼上一個InfoDataGridView元件到Form1的左方,Click其右上角的箭頭小圖示,設定Data Source連到ibsMasterInfoBindingSource)上,並將其設定為唯讀。Enable Adding/Editting/Deleteing都不勾選

 

4-2-8設定InfoDataGridView元件屬性

 

Step5MasterInfoDataSetDoubleClick,按住Master,將欄位以Mouse左鍵拉到Form1中。(請勾選所有欄位)。

4-2-9選取Master(InfoDataSet)所需欄位

Step6編譯C003,生成C003.dll。請在C003用右鍵Build功能來產生C003.dll

4-2-10 Build C003.dll

 

Step7執行桌面上的EEPManager.exe,進入Security Manager選擇Menu Utility功能,增加一個功能項,並設定該功能表允許DEPARTMENT1Group使用。




4-2-11指定GroupsDEPARTMENT1

 

 

q   前端預設資料

在前端的U/I設計中,經常需要在各元件中預設User的輸入資料,以方便User進行資料登打作業,在EEP2019中可以很方便直接以DefaultValidate元件來集中管理。

 

Step1在上面的C003表單例子中,我們打開C003Form1

 

Step2在左邊的ToolBox中選擇DefaultValidate這個元件,將其拖拉到Form1上來新增此元件。

DefaultValidate元件專門用來在新增資料時對欄位自動設定預設值,也可以用來對User輸入資料作合法性檢查,同時還可以記錄User最近編輯的一筆資料,並在User對下一筆新增資料時將部份欄位自動設定上一筆的內容值。

4-2-12 Form中添加DefaultValidate

Œ    打開DefaultValidate的屬性編輯器,先設定BindingSource屬性,即設定要對哪一個資料表進行此項功能,這裡設為ibsMaster;而DefaultActive屬性是欄位預設值的啟動開關,設為True,則表示開啟預設值功能;False則表示關閉此功能。

4-2-13設定DefaultValidate屬性

 

    點擊屬性FieldItems右邊的小按鈕,設定哪些欄位要自動設值。

4-2-14設定DefaultValidateFieldItems

 

Ž   點擊左列的Add按鈕來新增Members,並在右邊的屬性視窗中設定FieldName,這裏我們選擇UnitsInStock欄位。然後對DefaultValue設定預設值為0。表示在新增一筆資料的時候,UnitsInStock預設為數值0


4-2-15設定DefaultValidateFieldItems

  DefaultValue屬性不僅可以接受常數,同時也可以使用自定義的函數。按步驟5,新增一個ProductName欄位。在右邊的屬性編輯中鍵入GetName(),然後往下我們將要自己定義這個GetName()函數。

4-2-16定義GetName()函數

 

在此因Pruducts表的資料比較簡單,這個函數的定義只為舉例說明DefaultValue的函數使用功能。因為其實可以直接在DefaultValue設定為字串內容即可

 

   焦點在C003Form1.cs,按滑鼠右鍵在顯現的功能表選View Code進入程式碼編輯頁面。

4-2-17進入程式碼編輯頁

 

新增如下的GetName()程式,目的是將ProductName欄位預設為一個與當前日期有關的預設內容。程式如下:

publicstring GetName()

        {

returnstring.Format("Today is {0:d}! A test for default!",DateTime.Now.Date); 
        }


其中 DateTime.Now.Date就是用來取出今日的日期,而{0:d}則代表Format()的參數引用,將DateTime.Now.Date的內容置入{0}的位置,d用來描述{0}為一個日期的格式。

 

Step3編譯C003,執行EEPNetClient.exe雙擊C003功能項,按下新增,這時可以看到UnitsInStock的值已經在新增的同時自動變成0,而ProductName則被預設為如下內容:

 


4-2-18執行後的預設狀態

 

Step4回到C003Form1表單設計介面中,點選剛才新增的DefaultValue元件的屬性編輯。將其中CarryOn屬性值設為True之後,仍必須在FieldItems中繼續定義哪些欄位要自動複製內容值。

4-2-19開啟屬性功能

CarryOn屬性的作用是為讓User新增資料時可以使某些欄位自動帶入上一筆輸入的欄位內容值。自動Copy上一筆資料內容的功能

 

Step5FieldItems中,同樣在左邊按下Add來新增欄位,這次我們新增了SupplierIDCategoryID作為要CarryOn的欄位,並在右邊的兩個欄位上CarryOn屬性都設為True即可。

4-2-20繼續在FieldItems中定義欄位

 

Step6然後編譯C003,執行結果,我們可以先編輯一筆資料,如將SupplierIDCategoryID各輸入為13,按下存檔後,然後再新增,即可看到新增資料時其SupplierIDCategoryID的自動預設內容了。

 

4-2-21設計完成後的預設值

q   前端資料合法性檢測

DefaultValidate不但可以集中設定各欄位的初值,同樣也可以設定資料的合法性檢查,以防止User的誤輸入與維持資料的高正確性與防呆措施。

 

Step1回到C003Form1的設計介面,點選剛才新增的DefaultValidateProperties Explorer,先將屬性ValidActive設為True,此屬性為是否對資料作合法性檢查的啟動開關。

4-2-22開啟DefaultValidateValidActive屬性

除了設定ValidActiveTrue外,對於所要檢查合法性的欄位,也是都在FieldItems中來設定。

 

Step2因此我們打開FieldItems,選取左邊欄位CategoryID,在右邊的屬性列表中將CheckNull屬性設為True,點擊OK,關閉FieldItems即可。

4-2-23開啟欄位CheckNull

 

Step3編譯C003,並執行EEPNetClient.exe打開C003這個項目,按下新增資料,故意不輸入CategoryID的情況下按下存檔按鈕,此時系統會告之CategoryID欄位的值不能為空白的訊息。

注:此警告訊息的系統訊息定義在EEPNetServerSYSMSG.XML<msg_DefaultValidateCheckNull>設定中。

 

4-2-24檢查合法性欄位

 

DefautlValidate的資料檢查除了檢查空白外,還提供了範圍檢查。

Step4同樣在FieldItems裏新增一個欄位UnitPrice,在右邊的屬性列表中,將CheckRangeFrom設為0CheckRangeTo設為500這樣做是將UnitPrice的資料範圍設定在0500之間。點擊OK

4-2-25設定範圍檢查

 

Step5接著編譯C003,並執行EEPNetClient.exe並打開C003這個模組項目,請按下編輯,故意在UnitPrice上輸入600,按下存檔的按鈕,此時系統會出現如下圖中警告。

注:此警告訊息定義在EEPNetServer上的SYSMSG.XML<msg_DefaultValidateCheckRange>設定中。

4-2-26範圍檢查警告

 

除了以上兩種簡單的檢查方式,DefaultValidate還提供了另一種可以使用函數來檢驗資料合法性的方法。

 

Step1FieldItems中選擇SupplierID,將右邊屬性中的Validate設置為CheckSupplierID()並將WarningMsg屬性設置為輸入的廠商不存在!

 

4-2-27設定檢查合法性欄位

 

Step2新增一個InfoDataSet,取名為dsTemp,用來做資料檢查所使用。將其RemoteName屬性設置為S003.Master這樣設置只是為了建立一個資料鏈接,與對應的InfoCommand的內容無關,因此可以將Active設為False,以免在打開表單時啟動了S003.Master這個InfoCommand

4-2-28設定InfoDataSetRemoteName

Step3From1中,按滑鼠右鍵選View Code,進入程式碼編輯介面,新增如下程式內容。

4-2-29進入程式碼編輯

 

publicbool CheckSupplierID(string value)

        {  string SupplierID = InfoTextBox2.Text; //這裏要依實際情況修改, 請自己查看, SupplierID 所對應的InfoTextBoxName.

DataSet dataSet = dsTemp.Execute("Select * From Suppliers Where SupplierID = \'" + SupplierID + "\'");  // Select一下查看SupplierID是否存在.

if (dataSet.Tables[0].Rows.Count > 0)  // 如果存在的話

            {  returntrue; }
else

            {  returnfalse; }

  }

 

其中dsTemp.Execute()可以透過此DataSetInfoCommand來執行一個動態的SQL Command,並取得其Select出來的結果,放置於另一個DataSet中。

Step3執行C003。將Supplier ID故意輸入一個不存在的值,然後點擊存檔,會出現如下警告。

4-2-30欄位合法性警告

 

 

q   資料操作保護

資料操作保護的目的,是為了不讓User輕易去更動所有U/I的元件,也就是原本與BindingSource綁定的U/I元件都不會讓User更改。

做法上是利用InfoBindingSource.AutoDisibleControl平時這些U/I元件都設為Disible的狀態User按了NavigatorEdit編輯功能時,才讓這些U/I元件的Enable都變成True,來達到資料保護的目的;另一個保護就是針對表單的關閉做保護,也就是User有時在資料輸入到一半尚未存檔時,對表單進行關閉的動作,這樣會導致剛才所輸入的資料忘了存檔,為了避免此情況發生,InfoBindingSource.CloseProtect可以解決此問題。

 

Step1回到C003Form1的設計介面,點擊ibsMasterInfoBindingSource),將屬性AutoDisableControl設為True即可。此可以在表單打開時讓所有連接到此BindingSource的元件之Enable都變成為False

4-2-30開啟資料操作保護屬性

Step2編譯C003並執行。此時你會發現打開表單後是無法對資料進行編輯,只有在點擊NavigatorEdit按鈕後,資料才可以編輯。

4-2-31資料操作保護

Step3回到C003Form1的設計介面,點擊ibsMasterInfoBindingSource,將屬性CloseProtect設為True即可。

4-2-32開啟CloseProtect功能屬性

 

此屬性是為了防止用戶在操作過程中忘記存檔即退出,導致資料輸入無效而設計的。

 

Step4編譯C003並執行。隨意更改多筆資料,使其處於編輯的狀態下,然後關閉Form,此時就會出現如圖訊息。

注:CloseProtect的系統訊息統一定義在EEPNetServer上的SYSMSG.XML<msg_CloseProtectText>設定中

 

4-2-33資料操作保護警告

 


Top of Page