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

#4154
Matthias Haake
Teilnehmer

Hallo,

da fehlt noch die Bibliotheksregel mit der „Logik“ (Berechnung der nächsten Nummer anhand des gewählten Nummernkreises).

Im Endeffekt könnte diese Klasse wie folgt aussehen. Ich habe unsere Klasse mal ein wenig zusammengekürzt, da ich im Fehlerfall noch diverse Sachen mache, die nicht unbedingt zur Funktionalität gehören.

Die Initialisierung der internen Variablen müsste hier nachgerüstet werden, was ein einfaches masterDataVO.getField(„foo“) bedeutet. Unser einlesen ist automatisierter und in zusätzlichen Klassen abstrahiert. Alternativ kann man auch den zweiten Konstruktor verwenden und alle Werte direkt übergeben:


package tools;

import java.util.*;
import org.nuclos.server.masterdata.valueobject.*;
import org.nuclos.server.ruleengine.*;

/**
* This class provides methods for working with number ranges.
* @author matthias.haake
*/
public class NumberRangeHelper
{
private Integer _endValue;
private Integer _increment;
private Integer _length;
private String _name;
private Integer _nextValue;
private String _prefix;
private Integer _startValue;
private String _suffix;

/**
* Initializes the number range helper.
* @param object The MasterDataVO.
*/
public NumberRangeHelper(MasterDataVO object)
throws NuclosBusinessRuleException
{

/* ToDo: Init vars from MasterDataVO */

this.Validate();
}

/**
* Initializes the number range helper.
* @param name The name of the number range.
* @param prefix The prefix string (optional).
* @param suffix The suffix string (optional).
* @param length The length of the number range (without prefix and suffix). The leading spaces will be filled with "0".
* @param increment The increment of the number range to generate the next number.
* @param startValue The start value of the number range.
* @param endValue The end value of the number range.
* @param nextValue The next value of the number range.
* @throws Exception
*/
public NumberRangeHelper(String name, String prefix, String suffix, Integer length, Integer increment, Integer startValue, Integer endValue, Integer nextValue)
throws NuclosBusinessRuleException
{
_name = name;
_prefix = prefix;
_suffix = suffix;
_length = length;
_increment = increment;
_startValue = startValue;
_endValue = endValue;
_nextValue = nextValue;

if (_nextValue == null)
_nextValue = _startValue;
if (_nextValue _endValue)
throw new NuclosBusinessRuleException("The last number in the selected number range "" + _name + "" was already taken. Please extend the number range.");

// format number
String formatedNumber = _prefix + String.format("%0" + _length + "d", _nextValue) + _suffix;
// calculate next number
_nextValue += _increment;

return formatedNumber;
}

/**
* Gets the next value of the number range.
*
* @return
* The next value
*/
public Integer GetNextValue()
{
return _nextValue;
}

/**
* Validates the parameter of the current number range.
*
* @throws Exception
*/
public void Validate()
throws NuclosBusinessRuleException
{
if (_startValue >= _endValue)
throw new NuclosBusinessRuleException("The "Start value" must be lower than the "End value".");
if (_increment < 1)
throw new NuclosBusinessRuleException("The "Increment" must be a positive number.");
}
}

Ich hoffe, das hilft Dir weiter.
Viele Grüße und viel Erfolg,
Matthias