Home › Forum › Nuclos Konfiguration › Vorgänge und Objekte › Lager
- Dieses Thema hat 16 Antworten und 4 Teilnehmer, und wurde zuletzt aktualisiert vor 7 Jahren von
Thomas Hempel.
-
AutorBeiträge
-
22 November 2016 um 12:44 Uhr #9070
K. Struckmeier
TeilnehmerHallo,
ich habe ein BO „Lager“, BO „Warenausgang“ und ein BO „Wareneingang“ erstellt.
Jetzt möchte ich eine Regel erstellen, die bei einem neuen Wareneingang oder Warenausgang die Anzahl der Artikel aktualisiert.
Wäre auch gut wenn ich wüsste wie man ein Attribut
Vielen Dank im Voraus.22 November 2016 um 12:54 Uhr #9071Nick Röder
Teilnehmer1. Beim Wareneingang und Ausgang eine Update und Insert Regel hinterlegen.
2. Es müsste ja noch ein Objekt Lagerbestand geben, in dem Lager, Artikel und Bestand gespeichert werden. D.h. über den QueryProvider dann den entsprechenden Lagerbestand suchen und die Menge entsprechend des WE/WA erhöhen.Im Wiki sind jeweils Beispiele für die Methoden.
Man kann ein Regel für mehrere Methoden definieren, dazu zu den oberen Teil so gestalten:
public void insert(InsertContext context) throws BusinessException
{
validiereBeleg(context, context.getBusinessObject(Belege.class));
validiereBelegpositionen(context, context.getBusinessObject(Belege.class));
}public void update(UpdateContext context) throws BusinessException
{
validiereBelegpositionen(context, context.getBusinessObject(Belege.class));
}public void changeState(StateChangeContext context) throws BusinessException
{
validiereBelegpositionen(context, context.getBusinessObject(Belege.class));
}private void validiereBeleg(RuleContext context, Belege boBelege) throws BusinessException
22 November 2016 um 14:10 Uhr #9074K. Struckmeier
TeilnehmerDanke für die Antwort.
Ich habe bei Nuclet „Lager“ runtergeladen. Dort steht ja eine Regel zu „aktualisieren“. Wo muss ich da mein BO und Attribut angeben, von dem die Werte stammen (z.B. steht im BO „Wareneingang“ ein Attribut mit dem Namen „Anzahl“ und dem Wert „2“ und im Attribut mit dem Namen „Artikel“ und dem Wert/Text „Schraube“.) und wo muss ich angeben, wo die Werte aktualisiert werden müssen.22 November 2016 um 14:32 Uhr #9075Nick Röder
TeilnehmerIm Wiki gibt es dafür eine recht ausführliche Beschreibung. Darin sind alle notwendigen Schritte beschrieben
22 November 2016 um 15:21 Uhr #9077K. Struckmeier
TeilnehmerIch komme damit nicht klar
22 November 2016 um 15:44 Uhr #9078Nick Röder
TeilnehmerSchritt 1:
http://wiki.nuclos.de/display/NW/4.3+Lager%3A+Businessobjekt
Hier müssen die Referenzwerte (Artikel usw.) in den Lagernulcet Entität eingetragen werden. Haben Sie das bereits durchgeführt?22 November 2016 um 15:49 Uhr #9079K. Struckmeier
Teilnehmerja
22 November 2016 um 16:31 Uhr #9084Nick Röder
Teilnehmeran welchem schritt der Beschreibung im Wiki hängen Sie genau?
22 November 2016 um 16:37 Uhr #9085K. Struckmeier
TeilnehmerDen ersten Schritt, den Sie mir erklärt haben habe ich verstanden. Ich weiß nur nicht wie ich die Werte, die in einem andren BO stehen, auf eine anderes BO so zu übertragen, das die Werte entweder addiert oder subtrahiert werden.
22 November 2016 um 17:19 Uhr #9086Nick Röder
TeilnehmerGrundsätzlich können sie sich Werte aus einem Objekt über die get-Methode holen.
Für eine Entität Warenausgang können Sie sich z.B. über
Warenausgang boWarenausgang = context.getBusinessObject(Warenausgang.class); //Hier holen Sie sich den aktuellen Warenausgang
java.math.BigDecimal bgMenge = boWarenausgang.getMenge();
die Menge holen.
über die Set-Methode können Sie dies dann in den Lagerbestand eintragen.
über den Queryprovider müssen Sie sich den entsprechenden Lagerbestand holen (mit dem Artikel und dem Lager aus dem Warenausgang).
java.math.BigDecimal bgBestand = boLagerbestand.getBestand();
bgBestand = bgBestand.subtract(bgMenge); //add wenn Sie addieren wollen
Das LagerNuclet stellt aber bereits alles zur Verfügung. Sie müssen nur das Mapping herstellen. Wichtig ist u.a. http://wiki.nuclos.de/display/NW/4.5.1+Lager%3A+Nuclet-Schnittstellen
, d.h. die Wrapper Klassen anzupassen.Dannach müssen Sie nur an einen Statuswechsel oder an das Speichern eine Regel erstellen die Aus der LagerLogik
logik.verbucheWareneingang(WarenEingangsEntität!!!);
oder
logik.verbucheWarenausgang(WarenAusgangsEntität!!!);verwendet
22 November 2016 um 17:29 Uhr #9087K. Struckmeier
TeilnehmerAh danke, ich glaube damit kann ich was anfangen 🙂
22 November 2016 um 17:58 Uhr #9088K. Struckmeier
TeilnehmerMein Code funktioniert nicht.
Könnten Sie mir den Code schreiben?
Von BO „Wareneingang“ mit dem Attribut „Menge“
muss die „Menge“ zu
BO „Artikel“ mit dem Attribut „Verfügbar“
addiert werden.Oder könnten Sie mir den Code so vorschreiben, dass ich nur noch die Businessobjekte und Attribute eintragen muss?
Das wäre wirklich sehr freundlich.
22 November 2016 um 18:18 Uhr #9090Nick Röder
Teilnehmerdas ist leider so pauschal nicht möglich. Im wiki finden Sie allgemeine Beispiele wie es mit den getter und setter Methoden funktioniert.
Oder Sie schauen sich einfach bestehenden Regeln an, z.B. die LagerLogik darin gibt es mehrere Funktionen in denen addiert bzw. subtrahiert wird
23 November 2016 um 11:24 Uhr #9095K. Struckmeier
TeilnehmerHier ist jetzt die Regel: „Verbuche Wareneingang“ aus dem Regelmanager. Was muss ich jetzt hier ändern, wo muss ich mein BO und Attribut eintragen?
______________________________________________________________________________________________
package org.nuclet.lager.rule;
import java.math.BigDecimal;
import java.util.List;import org.nuclos.api.rule.StateChangeRule;
import org.nuclos.api.context.StateChangeContext;
import org.nuclos.api.annotation.Rule;
import org.nuclos.api.businessobject.BusinessObject;
import org.nuclos.api.businessobject.facade.Modifiable;
import org.nuclos.api.exception.BusinessException;
import org.nuclos.api.provider.BusinessObjectProvider;
import org.nuclos.api.provider.QueryProvider;import org.nuclet.lager.facade.BestellungFacadeFactory;
import org.nuclet.lager.logic.LagerLogik;
import org.nuclet.lager.wrapper.AbstractBestellungWrapper;
import org.nuclet.lager.wrapper.AbstractBestellpositionWrapper;/** @name Wareneingang
* @description Verbucht einen Wareneingang
* @usage
* @change
*/
@Rule(name=“VerbucheWareneingang“, description=“Verbucht einen Wareneingang“)
public class VerbucheWareneingang implements StateChangeRule
{public void changeState(StateChangeContext context) throws BusinessException
{
final LagerLogik logik = new LagerLogik(context);final AbstractBestellungWrapper bestellungWrapper = BestellungFacadeFactory.getFacade().getWrapper(context);
final List lstBestellpositionWrapper = bestellungWrapper.getBestellpositionen();for (final AbstractBestellpositionWrapper bestellpositionWrapper : lstBestellpositionWrapper) {
logik.verbucheWareneingang(bestellpositionWrapper);
}
}}
________________________________________________________________________________________________
23 November 2016 um 11:40 Uhr #9096Nick Röder
TeilnehmerSie müssen nur die Wrapper-Klassen anpassen.
Dies wird hier http://wiki.nuclos.de/display/NW/4.5.1+Lager%3A+Nuclet-Schnittstellen beschrieben. In den Regel steht dann genau was Sie machen müssen. Allerdings setzt dies Grundkenntnisse im Umgang mit Java voraus. Ohne diese Kenntnisse ist dies vermutlich nur schwer umsetzbar und auch nur schwer zu beschreiben.
-
AutorBeiträge