Willkommen, Gast
Home › Foren › Nuclos Entwicklung › Makros und Regeln › Apassen von nummernkreise.rule.GeneriereNummer
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
Da fehlen die Semikolon nach den [tt]import[/tt]-Zeilen.
..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..
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
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 😉
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.
Mmh, nach dem ersten Überfliegen fällt mir nichts auf. Kann es sein, dass eine Regel mit dem Namen bereits existiert?
Die Regel GeneriereNummer bringt das Nummernkreise Nuclet doch immer mit oder? Ich wollte dieses ja nur anpassen.
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.
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));
}
}
}
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));
}
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.
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:
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.
Du musst angemeldet sein, um auf dieses Thema antworten zu können.