Aras Innovator – 產生日期前置碼的表單單號 Gen. Sequence By Date

,

Aras Innovator 內建的 Sequence 欄位,只能產生固定前置碼的表單單號。如需產生包含年月的前置碼,且順序號還要隨年月進行重置,可參考以下方式來實現:

1. 建立要用來產生順序號的Sequence

2. 建立要做為表單單號的欄位。注意!因為欄位的資料要透過程式填入,故資料類型要選String而非Sequence

3. 在Server Method的OnBeforeAdd事件,建立對應的Method:

Innovator inno = this.getInnovator();

// Generation sequence number on create
if (this.getAction() == "add") {
string outputItemNumber;	// Output item number

string targetPrefix = "PRT-" + DateTime.Now.ToString("yyMM");	// Target prefix
string seqKeyedName = "PRT";	// Target sequence itemtype's keyed name
string prefix;	// Current prefix

string padWith;
int padTo;
string padString;

// Get current prefix and pad string
Item itmSeq = this.newItem("sequence","get");
itmSeq.setProperty("keyed_name", seqKeyedName);
itmSeq = itmSeq.apply();
prefix = itmSeq.getProperty("prefix", "");
padWith = itmSeq.getProperty("pad_with", "");
padTo = int.Parse(itmSeq.getProperty("pad_to", "0"));
padString = String.Empty;
for(int i = 0; i < padTo; i++) {
padString += padWith;
}

//Sync Prefix and Reset Sequence Number
if(targetPrefix != prefix) {
prefix = targetPrefix;

itmSeq = this.newItem("sequence","edit");
itmSeq.setAttribute("where",
String.Format("[sequence].name='{0}'", seqKeyedName));
itmSeq.setProperty("prefix", prefix);
itmSeq.setProperty("current_value", "1");
itmSeq = itmSeq.apply();

this.setProperty("item_number", prefix + padString + "1");
}
else {
string seq = inno.getNextSequence(seqKeyedName);
outputItemNumber = seq;
this.setProperty("item_number", outputItemNumber);
}
}
return this;

留言

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.