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