【功能說明】
用途:使用於Server端,用在UpdateComp,或InfoTransaction中,在新增資料前自動編出號碼。
【元件屬性】
Name(名稱)(string)
元件名稱,用於識別該元件。
Active(啟動)(bool)
設定讓此自動編號功能是否有作用。
AutoNoID(識別代號)(string)
自動編號規則的識別碼,每個不同的編號規則都有自己的唯一識別碼,此識別碼會與SysAutoNum系統表單存取,來達到自動編號的目的。
Discription(描述)(string)
設定對此自動編號規則的敘述說明。此資訊會同步寫入到SysAutonum資料表中。
GetFixed(前置碼)(string)
自動編碼的前置碼,可以設定如以日期作為開頭,加3位自動流水碼等格式的編碼。此屬性可通過函數來取得前置碼,如設定為MyGetFixed()代表要呼叫一個MyGetFixed程式來傳回前置碼。
isNumFill(是否用數字填充)(System.Boolean)
是否用数字填充AutoNumber。
NumDig(編號位數)(int32)
自動編號的位數,如3代表可編001到999等號碼,會在不滿的位數上自動加『0』。
OldVersion(是否為EEP7版本)(bool)
用於區分是否現在使用的系統是否為EEP7設計環境的系統表,默認為false,表示為新的EEP2006/EEP2008/EEP2019
OverFlow(溢出處理)(bool)
設定為True時,會在編碼溢出時,將第一位設定為『A』~『Z』,再往下繼續編碼『a』~『z』。如果設定為False,則在溢出時只會提示錯誤。
例如:NumDig設定為3,StartValue為1,Step為1,如果OverFlow設定為False,則只能編999個號碼,如果OverFlow設定為True, 則一共可以編999+2600+2600=6199個號碼。
StartValue(起始號碼)(int32)
每個編號規則產生第一筆自動編號的值,預設為1。
Step(每次遞增量)(int32)
每次編號的增加量,一般為1。如設定為2,可編出1,3,5,7……
TargetColumn(編號字段)(string)
需要自動編號的對方欄位名稱,此屬性不能為空。
UpdateComp(UpdateComp元件名稱)(string)
所對應的UpdateComp名稱。
【事件】
此元件無事件。
【功能函數】
Exccute(Connection,Transaction)
提供用戶用代碼執行自動新增。可以讓用戶在需要手動新增資料時,按照使用的AutoNumber元件設定來編出流水號,使系統能使用一致性的編碼原則。
【其他說明】
本元件會固定使用到一個SysAutonum的系統Table,其結構為AutoId(VarChar40)、Fixed(VarChar40)、CurrNum(Num10) 、Discription(Varchar50),所有的AutoNumber元件都會以這個Table的內容依據來編號。
【範例】
此為一個自行執行到後端Server Method來使用自動編號的範例:
public object MYINSERT(object[]
param)
{
IDbConnection conn =
this.AllocateConnection("ERPS");
//取得一個資料庫連線
conn.Open();
IDbTransaction trans = conn.BeginTransaction(); //啟動Transaction
object[] ret = new object[] { 0, null }; //傳回值設定
try
{
object no = autoNumber1.Execute(conn,
trans); // 取得自動編號的值
this.ExecuteCommand("Insert into
Orders (CustomerID,EmployeeID,OrderNo) Values (1,1,'" + no.ToString() +
"')",conn,trans);
trans.Commit();
ret[1] = no.ToString(); // 傳回新Insert的號碼
}
catch
{
trans.Rollback();
}
this.ReleaseConnection("ERPS", conn);
// 釋放資料庫連線
returnret;
}
此為在GetFixed屬性中,要取得主檔欄位值做自動編號前引碼的例子,此例是以PurchaseDate為前引碼。
public String MyGetFixed()
{
//取得PurchaseDate的當前值
object obj =
(DateTime)ucMaster.GetFieldCurrentValue("PurchaseDate");
//先定義一個當天日期,以保證既便user沒有輸入該欄位值時用當天日期來編號
DateTime dateTime =
DateTime.Today;
//判斷user是否輸入資料,如果有,則將其轉換為DateTime類型
if (obj.ToString() !=
"")
{
dateTime = (DateTime)obj;
}
//將這一日期轉換成6位的字串,用來編號
string sFixed = "P" +
string.Format("{0:yyMMdd}", dateTime);
return sFixed;
}