Home › Forum › Nuclos Konfiguration › Businessprozesse › Automatisch fortlaufende Nummer › Aw: Automatisch fortlaufende Nummer
Habe nun meine Lösung umgebaut und alles in eine Bibliotheksregel gepackt. Sämtliche Datenbankfunktionen, was das Ganze recht umständlich gemacht hat, werden nicht mehr benötigt.
Entität: Nummernkreise
Name [name] (Text, Eindeutig, Pflichtfeld)
Prefix [prefix] (Text)
Pad Count [padcount] (Ganzzahl)
Next Value [nextvalue] (Ganzzahl)
Helper Klasse:
import org.nuclos.common.collect.collectable.searchcondition.*;
import org.nuclos.server.masterdata.valueobject.*;
import org.nuclos.server.ruleengine.*;
import java.util.*;
public abstract class Helper {
public static void setNextValue(RuleInterface server, String sEntity, String sField, String sKey) throws NuclosBusinessRuleException {
//sEntity: the entity name e.g. Aufträge
//sField: the number field name e.g. auftragsnummer
//sKey: the name of Nummernkreis e.g. Auftragsnummer
//only if the object is new
if (server.isObjectNew()){
//default values
String prefix = "";
Integer padcount = 0;
Integer nextvalue = 1;
CollectableComparison cond = org.nuclos.common.SearchConditionUtils.newMDComparison(org.nuclos.server.common.MasterDataMetaCache.getInstance().getMetaData("Nummernkreise"), "name", ComparisonOperator.EQUAL, sKey);
Collection ids = server.getMasterDataIds("Nummernkreise", new org.nuclos.server.genericobject.searchcondition.CollectableSearchExpression(cond));
if (!ids.isEmpty()) {
//there is only one entry in the collection
Integer id = (Integer)ids.iterator().next();
MasterDataVO item = server.getMasterData("Nummernkreise", id);
//get the values from Nummernkreise
prefix = (String)Helper.isNull(item.getField("prefix"), "");
padcount = (Integer)Helper.isNull(item.getField("padcount"), padcount);
nextvalue = (Integer)Helper.isNull(item.getField("nextvalue"), nextvalue);
//set the new number to the called entity
String format = String.format("%%0%dd", padcount);
server.setFieldValue(sEntity, sField, prefix + String.format(format, nextvalue));
//set the new value in Nummernkreise
server.setFieldValue("Nummernkreise", id, "nextvalue", nextvalue+1);
}
else {
throw new NuclosBusinessRuleException("Der Nummernkreis " + sKey + " ist nicht vorhanden!");
}
}
}
public static Object isNull(Object o, Object defaultvalue) {
if (o != null) {
return o;
}else{
return defaultvalue;
}
}
public static Boolean isInt(String s) {
try {
int i = Integer.parseInt(s);
return true;
}
catch (NumberFormatException e) {
return false;
}
}
public static Integer toInt(String s, Integer defaultvalue) {
try {
return Integer.parseInt(s);
}
catch (NumberFormatException e) {
return defaultvalue;
}
}
}
Der Aufruf erfolgt in einer Geschäftsregel, die an die jeweilige Entität gebunden ist und beim Speichern ausgeführt wird:
Helper.setNextValue(server, "Auftrag", "auftragsnummer", "Auftragsnummer");
Anbei noch ein Beispiel Nuclet
[attachment]C:fakepathNummernkreis.nuclet[/attachment]