Home Forum Nuclos Konfiguration Businessprozesse Automatisch fortlaufende Nummer Aw: Automatisch fortlaufende Nummer

#4126
Markus Glitzner
Teilnehmer

Ich hatte auch dasselbe Problem allerdings gibt es meiner Meinung nach keine Möglichkeit fortlaufende Nummern mit Nuclos Boardmitteln abzubilden.

Soweit ich weis, fängt die System-ID alle 5 Wochen neu zu zählen an und man hat auf die Gestaltung der Nummer auch keinen Einfluss. Mal ehrlich, gefällt dir diese Nummer auf einer Rechnung? Mir nicht.

Und was ist mit Entitäten ohne Statusmodell, wie z.B. den Kunden oder Artikel, hier wäre auch eine fortlaufende Nummer mit einem bestimmten Format nützlich, so wie halt in anderen Systemen das auch der Fall ist.

Ich habe mir dazu was Eigenes gebaut. Das Konzept sieht wie folgt aus:

Entität Nummernkreise: (ist hoffentlich soweit selbsterklärend)
Name, Preview, Prefix, Next Value, Pad Count (siehe Anhang)

DB Funktion CA_NEXTVALUE: (für das berechnende Attribute Preview)
create function CA_NEXTVALUE(
@intid int
) returns varchar(255)
as
begin
declare @value varchar(255)

select @value = coalesce(Prefix,'')+ coalesce(replicate('0', PadCount-len(coalesce(NextValue,1))),'')
+ cast(coalesce(NextValue,1)as varchar(255))
from T_EO_NUMMERNKREISE
where intid=@intid

return @value
end

DB Prozedur SET_NEXTVALUE: (wird aufgerufen um den Next Value um eins zu erhöhen)
create procedure SET_NEXTVALUE
@name as varchar(255)
as
begin
update T_EO_NUMMERNKREISE set
NextValue=coalesce(NextValue,1)+1
where [Name]=@name
end

Bibliotheksregel Helper.setNextValue: (setzt die laufende Nummer):
//package für RuleInterface u. NuclosBusinessRuleException
import org.nuclos.server.ruleengine.*;

public abstract class Helper {

public static void setNextValue(RuleInterface server, String field, String key) throws NuclosBusinessRuleException {
//field: the field name of the entity e.g. Aufträge
//key: the value in the name field of the entity Nummernkreise

//only if the object is new
if (server.isObjectNew()){
//get the next value and increase it
String value = server.callDbFunction("GET_NEXTVALUE", String.class, key);
server.callDbProcedure("SET_NEXTVALUE", key);

//get the current entity name and set the value
String entity = org.nuclos.server.genericobject.Modules.getInstance().getEntityNameByModuleId(server.getModuleId());
server.setFieldValue(entity, field, value);
}
}
}

Geschäftsregel z.B. Auftragsnummer: (unter Verwendung die jeweiligen Entität beim Speichern anhängen)
public void rule(RuleInterface server) throws NuclosBusinessRuleException {
Helper.setNextValue(server, "auftragsnummer", "Auftragsnummer");
}