Ansicht von 15 Beiträgen - 1 bis 15 (von insgesamt 17)
  • Autor
    Beiträge
  • #9070
    K. Struckmeier
    Teilnehmer

    Hallo,
    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.

    #9071
    Nick Röder
    Teilnehmer

    1. 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

    #9074
    K. Struckmeier
    Teilnehmer

    Danke 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.

    #9075
    Nick Röder
    Teilnehmer

    Im Wiki gibt es dafür eine recht ausführliche Beschreibung. Darin sind alle notwendigen Schritte beschrieben

    http://wiki.nuclos.de/display/NW/Lagerwesen

    #9077
    K. Struckmeier
    Teilnehmer

    Ich komme damit nicht klar

    #9078
    Nick Röder
    Teilnehmer

    Schritt 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?

    #9079
    K. Struckmeier
    Teilnehmer

    ja

    #9084
    Nick Röder
    Teilnehmer

    an welchem schritt der Beschreibung im Wiki hängen Sie genau?

    #9085
    K. Struckmeier
    Teilnehmer

    Den 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.

    #9086
    Nick Röder
    Teilnehmer

    Grundsä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

    #9087
    K. Struckmeier
    Teilnehmer

    Ah danke, ich glaube damit kann ich was anfangen 🙂

    #9088
    K. Struckmeier
    Teilnehmer

    Mein 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.

    #9090
    Nick Röder
    Teilnehmer

    das 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

    #9095
    K. Struckmeier
    Teilnehmer

    Hier 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);
    }
    }

    }

    ________________________________________________________________________________________________

    #9096
    Nick Röder
    Teilnehmer

    Sie 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.

Ansicht von 15 Beiträgen - 1 bis 15 (von insgesamt 17)