自動編號在應用軟體中扮演著非常重要的角色,主要是企業透過Internet建立單據的同時,勢必要維持單據編號的唯一性,不可能由User自行來編,因此就需要使用AutoNumber元件自動編出唯一的單據號碼。
我們可以先查看 "出貨單" 這個透過Word產生的Server端,由於Word有設定 #KA AUTO: 'S'yyMM3,因此會自動產生【AutoNumber】元件
'S'yyMM表示會有固定字串'S',yy為後兩位西元年,MM為月份,3表示流水號3碼,詳細屬性稍後會進行介紹。
自動編號效果如下:
接著,我們來練習新增AutoNumber元件來自動編號看看
Step1>
打開前面做的"sRWDOrders"這個ServerPackage,從工具箱裡拖拉一個【AutoNumber】元件到設計區上。
Step2>
接著設定AutoNumber的各個屬性:
(1) ID:元件的識別名稱,這裡使用預設的"AutoNumber1"就可以。
(2) AutoNoID:這是給自動編號機制命名。自動編號會與SysAutoNum這個系統資料表配合使用,所有的單據號碼編到幾號都會記錄到SysAutoNum這個表中,因此AutoNumber這個元件就會以AutoNoID的屬性來對SysAutoNum個別隔離的編號處理。在此我們命名為"AutoOrdID"。
(3) UpdateComponent:要用哪一個UpdateComponent配合在Insert時來執行AutoNumber動作,下拉選擇 "uc出貨單"。
(4) Field:要使用哪一個欄位做自動編號,下拉選擇"出貨編號"。
(5) Description:給自動編號的描述。
(6) GetFixed:前置碼,輸入固定的值。我們這裡先不做設定,下面再使用動態的方式設定前置碼。
(7) StartValue:起始值,即從幾開始編號。這裏設為"1"代表從1開始。
(8) Step:每次編號時增加多少號,預設為"1"。則每次加1,如果設為2,則可以編出1,3,5,7…等等。
(9) NumDig:自動編號的位數。如果數值的位元不足時,系統會自動在前面補零,這裏設為"3",會從“001”編到“999”。
Step3>
我們接著來設計動態的前置碼,在【OnGetFixed】事件上雙擊兩下進入原始碼編輯畫面。
Step4>
這裡示範取得表單上的欄位作為前置碼,比如取得此出貨單的客戶編號欄位,做為自動編號的前置碼,參考的原始碼如下。
public string AutoNumber1_onGetFixed(object sender, string fixedString,
dynamic rows)
{
fixedString = rows[0].客戶編號;
return fixedString;
}
Step5>
保存剛剛設計的sRWDCustomers後,接著來設計RWD表單的部分。打開"rwdSingle1",找到【Default】元件,【Columns】屬性進來編輯,新增一個欄位,【Field】下拉選擇"出貨編號"。
Step6>
接著設定【DefaultValue】,設定固定值 "自動編號",告知User這是一個自動編號欄位。
Step7>
自動編號是不讓User可以編輯的,所以要將這個欄位做ReadOnly。在【DataForm】的【Columns】屬性,找到"出貨編號"欄位,【Editor】屬性進來編輯,將【ReadOnly】屬性勾選起來。
Step8>
保存後預覽一下:新增一筆表單,出貨編號欄位會帶入自動編號的預設值,在"名稱"欄位上打上"訊光科技系統有限公司",由於前面練習設定的關係,檢核的欄位請自行填上,以免Validate元件稽核時阻擋存檔。
按下確定後,按下查看,可以看到客戶編號會自動轉換成自動編號值,並依據客戶編號的欄位值當作前置碼。
這時候打開Table下面【SystemTable】目錄下的【SYSAUTONUM】這張表,可以看到已經有一筆AUTOID為AutoOrdID的前置碼紀錄在裡面了。
Related Topics