Home Forum Nuclos Entwicklung Makros und Regeln Apassen von nummernkreise.rule.GeneriereNummer

Ansicht von 15 Beiträgen - 1 bis 15 (von insgesamt 18)
  • Autor
    Beiträge
  • #8584
    Kevin Johnson
    Teilnehmer

    Hallo liebe Nuclos-Gemeinde,

    ich habe mal wieder ein Problem, bei dem ich eure Hilfe benötige.
    Ich will mit Hilfe der Nummernkreise fortlaufende Nummern mit Präfix {yy} für diverse Objekte generieren lassen.
    Nun habe ich in Nummernkreise die passenden Datensätze erstellt und wollte diese nun in der org.nuclet.nummernkreise.rule.GeneriereNummer Regel anpassen.
    Nun bekomme ich aber bei der Anpassung des Sourcecodes diverse Fehlermeldungen, die wohl mit dem import zusammen hängen. Allerdings wird mir nicht ganz klar wo mein Fehler liegen soll. (Siehe Bilder unten)
    Den import habe ich, z.Bsp. beim Kunden, sowohl über

    import org.nuclet.basistemplate.Kunde

    als auch über

    import org.nuclet.businessentity.Kunde

    versucht.

    Vielen Dank schonmal.

    LG

    #8586
    Papa Schlumpf
    Teilnehmer

    Da fehlen die Semikolon nach den [tt]import[/tt]-Zeilen.

    #8588
    Thomas Hempel
    Teilnehmer

    ..und bitte auch das Feld Nummer in den Entitäten anlegen, dann kann der Code so bleiben, oder eben den Code auf den Namen des Zielfeldes ändern, immer mit .set[Deinfeldname] statt setNummer..

    #8589
    Kevin Johnson
    Teilnehmer

    Oh das mit den Semikolon ist peinlich 😉 Vielen Dank für den Hinweis mit dem Feld Nummer. Ich bin Neuling im Bereich java und tue mich noch etwas schwer.
    Ich teste es nun gleich und gebe dann Rückmeldung.

    Herzlichen Dank

    PS: Woher ist das mit dem Feld Nummer denn ersichtlich?

    PPS: Sorry ich war heute Morgen wohl nuch etwas blind. Hab es selbst entdeckt, dass es im Bereich der if else if Leiter steht. Sorry

    #8592
    Kevin Johnson
    Teilnehmer

    Wenn ich es recht verstanden habe, dann hat bereits jede Entität ein Feld Nummer. Hier ein Beispiel in der Kundenentität:

    Die cannot find Symbol Fehlermeldungen sind jetzt natürlich weg. Ich hatte einfach beim copy paste vergessen die Kommatas mit zu nehmen.

    Allerdings bekomme ich immer noch die Fehlermeldung:

    Dann hätte ich noch eine weitere Frage zum Punkt 5 in der Anleitung.

    Wie kann ich nun die Java- Regeln den BOs zuordnen? Muss ich eine neue Regel anlegen? Im Bereich des Nuclets Basistemplate? Z.Bsp. im Bereich Anlegen für den Kunden, damit bei der Neuanlage eines Kunden automtisch eine Nr generiert wird?

    Fragen über Fragen 😉

    #8593
    Martin Rithos
    Teilnehmer

    Bitte poste hier noch mal deinen aktuellen Code, der zum Fehler führt.

    Wie kann ich nun die Java- Regeln den BOs zuordnen? Muss ich eine neue Regel anlegen? Im Bereich des Nuclets Basistemplate? Z.Bsp. im Bereich Anlegen für den Kunden, damit bei der Neuanlage eines Kunden automtisch eine Nr generiert wird?

    Unter Konfiguration > Server Regelmanager. Auf der linken Seite findest du die Regeln, auf der rechten Seite, u. a. die Businessobjekte. Per Drag & Drop kannst du die entsprechende Regeln einfach „rüberziehen“ & damit zuweisen.

    #8595
    Kevin Johnson
    Teilnehmer

    Erstmal Danke für die Hilfe.

    Hier der aktuelle Code:

    Attachments:
    #8596
    Martin Rithos
    Teilnehmer

    Mmh, nach dem ersten Überfliegen fällt mir nichts auf. Kann es sein, dass eine Regel mit dem Namen bereits existiert?

    #8598
    Kevin Johnson
    Teilnehmer

    Die Regel GeneriereNummer bringt das Nummernkreise Nuclet doch immer mit oder? Ich wollte dieses ja nur anpassen.

    #8599
    Martin Rithos
    Teilnehmer

    Ja, an sich schon, aber manchmal klont man eine Regel und vergisst sie umzubennen – dann kommt es zu diesem Fehler. Könntest du den Code direkt noch mal hier im Code-Block posten? Das macht das Debuggen leichter als wenn man auf eine Grafik schaut.

    #8601
    Kevin Johnson
    Teilnehmer

    Code

    package org.nuclet.nummernkreise.rule;

    import org.nuclos.api.rule.InsertRule;
    import org.nuclos.api.context.InsertContext;
    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.nummernkreise.logic.NummernkreiseLogik;
    import org.nuclet.businessentity.Kunde;
    import org.nuclet.businessentity.Artikel;
    import org.nuclet.businessentity.Auftrag;
    import org.nuclet.businessentity.Bestellung;
    import org.nuclet.businessentity.Lieferant;
    import org.nuclet.businessentity.Lieferschein;
    import org.nuclet.businessentity.Rechnung;

    @Rule(name=“GeneriereNummer“, description=“Generiert fortlaufende Nummern“)
    public class GeneriereNummer implements InsertRule
    {
    public void insert(InsertContext context) throws BusinessException
    {

    // Nummerngenerierung nur für verschiedene Entitäten):

    final Modifiable businessObject = context.getBusinessObject(Modifiable.class);

    if (businessObject instanceof Auftrag) {
    ((Auftrag)businessObject).setNummer(NummernkreiseLogik.getNextValue(Auftrag.class));
    } else if (businessObject instanceof Bestellung) {
    ((Bestellung)businessObject).setNummer(NummernkreiseLogik.getNextValue(Bestellung.class));
    } else if (businessObject instanceof Lieferschein) {
    ((Lieferschein)businessObject).setNummer(NummernkreiseLogik.getNextValue(Lieferschein.class));
    } else if (businessObject instanceof Kunde) {
    ((Lieferschein)businessObject).setNummer(NummernkreiseLogik.getNextValue(Kunde.class));
    } else if (businessObject instanceof Artikel) {
    ((Lieferschein)businessObject).setNummer(NummernkreiseLogik.getNextValue(Artikel.class));
    } else if (businessObject instanceof Lieferant {
    ((Lieferschein)businessObject).setNummer(NummernkreiseLogik.getNextValue(Lieferant.class));
    } else if (businessObject instanceof Rechnung) {
    ((Lieferschein)businessObject).setNummer(NummernkreiseLogik.getNextValue(Rechnung.class));
    }
    }
    }

    #8602
    Martin Rithos
    Teilnehmer

    else if (businessObject instanceof Lieferant {

    Hier fehlt hinter Lieferant die schließende Klammer. Ich bin mir aber nicht sicher, was du hier inhaltlich erreichen möchtest:

    if (businessObject instanceof Auftrag) {
    ((Auftrag)businessObject).setNummer(NummernkreiseLogik.getNextValue(Auftrag.class));
    } else if (businessObject instanceof Bestellung) {
    ((Bestellung)businessObject).setNummer(NummernkreiseLogik.getNextValue(Bestellung.class));
    } else if (businessObject instanceof Lieferschein) {
    ((Lieferschein)businessObject).setNummer(NummernkreiseLogik.getNextValue(Lieferschein.class));
    } else if (businessObject instanceof Kunde) {
    ((Lieferschein)businessObject).setNummer(NummernkreiseLogik.getNextValue(Kunde.class));
    } else if (businessObject instanceof Artikel) {
    ((Lieferschein)businessObject).setNummer(NummernkreiseLogik.getNextValue(Artikel.class));
    } else if (businessObject instanceof Lieferant {
    ((Lieferschein)businessObject).setNummer(NummernkreiseLogik.getNextValue(Lieferant.class));
    } else if (businessObject instanceof Rechnung) {
    ((Lieferschein)businessObject).setNummer(NummernkreiseLogik.getNextValue(Rechnung.class));
    }

    #8603
    Papa Schlumpf
    Teilnehmer

    Ein kleiner Tipp zu den Syntaxfehlern. Da zeigt Nuclos immer diese „Klassenname konnte nicht gelesen werden“-Meldung, die aber keinen Hinweis darauf gibt, wo der Fehler ist.

    Ich kopiere dann immer den Code in einen richtigen Editor (oder z.B. auf ideone.com), der den Syntaxfehler anzeigen kann.

    In diesem Fall kommt dann das hier dabei raus: https://ideone.com/gvpBEY. Und schon kennt man den Fehler, ohne alles zu durchsuchen.

    #8605
    Kevin Johnson
    Teilnehmer

    So, ich war leider ein paar Tage gesundheitlich verhindert.

    Die fehlende Klammer hab ich ersetzt und Lieferschein durch die richtigen Klassennamen ersetzt (mal wieder ein Copy-Paste-Fehler :S ).
    Vielen Dank auch für den Tipp mit ideone.com.

    Nun hab ich leider noch mehr Fehlermeldungen als bisher. Auf ideone sieht das so aus.

    Im Nuclos selber erhalte ich folgende Fehlermeldungen:

    Attachments:
    #8606
    Thomas Hempel
    Teilnehmer

    Das sieht doch so aus, als ob diese Klassen:

    import org.nuclet.businessentity.Kunde;
    import org.nuclet.businessentity.Artikel;
    import org.nuclet.businessentity.Auftrag;
    import org.nuclet.businessentity.Bestellung;
    import org.nuclet.businessentity.Lieferant;
    import org.nuclet.businessentity.Lieferschein;
    import org.nuclet.businessentity.Rechnung;

    nicht existieren bzw. nicht gefunden werden.

    1. Fall
    Bitte öffne Konfiguration/Server-Regelmanager, öffne den rechten Baum unter Regelzuweisung/. Dort müssten alle Entitäten ohne Nuclet-zuweisung stehen, also auch die oben genannten.
    Wenn ja,dann ist der Verweis richtig. In diesem Fall weiß ich grad keinen Rat..

    2. Fall
    Falls Du ein Nuclet angelegt hast und die Entitäten dorthin verschoben hast, dann ändere die Zeilen oben nach dem Muster:
    import org.nuclet.[DeinNucletName].Kunde;
    Das lässt sich somit sicher reparieren.

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