Seitenhistorie
...
Für die Regelprogrammierung müssen Informationen und Daten zu den Entitäten, den Statusmodellen und anderen Nuclos-Einheiten zur Verfügung stehen. Damit der Zugriff und die Verwendung möglichst einfach und fehlerfrei bleibt, werden diese Daten objektiviert als Java-Klassen bereit gestellt. Diese Java-Klassen können dann aus den Regeln heraus aufgerufen und benutzt werden.
...
Typ | Beschreibung | Suffix | |||
---|---|---|---|---|---|
BusinessObjekt | Ein BusinessObjekt repräsentiert eine NuclosEntität wie z.B. Auftrag oder Kunde. Die dazugehörenden Felder werden aus den Meta-Informatioen glesen Informationen gelesen und als Attribute in die Klasse geschrieben. Ja nach Art des Attributts Attributs und der Zugriffsrechte werden setter und getter-MEthoden Methoden zum Setzen und Auslesen von Werten zur Verfügung gestellt. Wird mittels EntityWizzard Entitäten-Wizzard eine neue Entität angelegt oder eine bestehende verändert oder gelöscht, werden mit erfolgreichem dem erfolgreichen Abschluss des Speichervorgangs die Ändergeun im alle Änderungen in dem dazugehörenden BusinessObjekt vorgenommen und im Classloader angelegtabgelegt. Damit stehen die Änderungen sofort zur Verfügung. Allgemeine Konventionen:
Beispiel eines BusinessObjekts "Adresse":
| -- | |||
Statusmodell-Klasse | Eine Statusmodell-Klasse ist eine Java-Klasse, die fachlich einem in Nuclos erstellen Statusmodell entspricht. Diese Statusmodell-Klassen werden in der Regelprogrammierung verwendet, um eine einfache und sichere Gestaltung von beispielsweise Statuswechseln zu gewährleisten. Allgemeine Konventionen:
Beispiel der Statusmodell-Klasse "AuftragSM":
Die hinterlegten Status können für manuelle Statuswechsel im im StatemodelProvider verwendet werden. | SM | |||
Arbeitsschritt-Klasse | In Nuclos können Arbeitsschritte erstellt werden. Um auch innerhalb von Regeln solche Arbeitsxchritte auch Arbeitsschritte manuell ausführen zu können, werden nach erflogreichen Abschluss des Speicvhernvorgang einesArbeitschrittes sogenanten dem erfolgreichen Speichern eines Arbeitsschrittes sogenannte Arbeitsschritt-Klassen ider aucuh Generaotr.oder auch Generation-Klassen erstellt. Diese können dann über den GenerationProvider gestartet werden. eine Eine Arbeitsschritt-Klasse ist mittels Generics typsicher aufgebaut und legt Quell- und Zielentitäten ( als BusinessObjekte ) fest. Ein beipsielhasfter Aufbau könnte wir folgt aussehen: Codeblock | . class; } }Die Handhabung des GenerationProviders wird hier erklärt. Allgemeine Konventionen:
Beispiel der Arbeitsschritt-Klasse "ErstelleRechnungAusAuftragGEN":
| GEN | ||
Report-Klassen | ReportReport-Klassen stellen objektivierte Datenquellen aus "Report und Formular" dar. Werden in Nuclos Quellen für Report und Formular angelegt, wird eine entsprechende Report-Klasse erstellt. Diese kann dann in der Regelprogrammierung als Quelle verwendet und über den DatasourceService aufgerufen werden. Allgemeine Konventionen:
Beispiel der Report-Klasse "ExportRechnungsdatenDS":
| DS |
Klassengenerierung und Regelkompilierung
...
Allgemein
Für die oben beschriebenen Klassen gelten bestimmte Regeln und Reihenfolgen, in der sie erstellt und bereitgestellt werden. Die Klassen werden je nach Typ compiliert kompiliert und gruppiert in einer eigenen Jar im Code Generator angelegtCodeGenerator-Verzeichnis abgelegt. Von dort aus werden die Archive in den Classloader aufgenommen und können verwendet werden.
Typ | Klasse | Reihenfolge der Generierung | |
---|---|---|---|
BusinessObjekte | BOentitiesBOEntities.jar | Die BusinessObjekte können als erstes erstellt werden, da sie lediglich auf die Meta-Informationen der Entitäten zurückgreifen müssen. | |
Report-Klassen | ReportDSEntities.jar | Die Report-Klassen können unabhängig von anderen Klassen erstellt werden, da sie lediglich auf die Meta-Informationen der Statusmodelle zugreifen. | |
Arbeitsschritt-Klasse | Generation.jar | Die Arbeitsschritte verwenden als Quell- und Zielentitäten BusinessObjekte. Die Arbeitsschritt-Klassen können somit erst erstellt und kompiliert werden, wenn die BusinessObjekte in der BOEntities.jar fehlerfrei gebaut wurden und verwendet werden können. | |
Statusmodell-Klasse | |||
Regeln und Bibliotheken | Nuclet.jar |
...
statemodels.jar | Die Statusmodell-Klassen können unabhängig von anderen Klassen erstellt werden, da sie lediglich auf die Meta-Informationen der Statusmodelle zugreifen. | |
Regeln und Bibliotheken | Nuclet.jar | Die Regeln werden immer als letztes gebaut, das sie auf alle BusinessObjekte, Report-, Statusmodel- und Arbeitsschritt-Klassen zugreifen können. Die Generierung der genannten Klassen ist somit eine notwendige Vorbedingung zur Erstellung der Nuclet.jar. Sollte es im Vorfeld Fehler geben, wird die Nuclet.jar nicht gebaut. |
Zeitpunkt der Generierung
Systemstart
Bei Systemstart werden alle der genannten Klassen neu gebaut und im Classloader bereitgestellt. Dazu werden alle vorhanden Klassen und Archive aus dem Codegenerator-Verzeichnis gelöscht. Sollte es an dieser Stelle zu einem Fehler kommen, bleiben die Verzeichnisse (teilweise) leer. Der Server startet weiterhin.
Import eines Nuclets
Mit dem Import eines Nuclets ändert sich in Nuclos alles. Es werden neue Strukturen eingespielt, neue Entitäten, Statusmodelle, etc. Logischerweise müssen alle bereits erstellen Klassen gelöscht und der neuen Umgebung entsprechend generiert werden. Auch hier kann es bei ungültigen Daten zu Fehlern und somit zu Fehlermeldung bei der Kompilierung von Klassen kommen.
Laufzeit
Auch zur Laufzeit können sich Strukturen von Entitäten, Statusmodell, etc. ändern, was eine Anpassung und Neuerstellung der Java-Klassen notwendig macht. Wird eine Entität verändert, muss das entsprechende BusinessObjekt neu erstellt werden. Das Nuclet.jar und das Generation.jar mit den Arbeitsschritten im Anschluss ebenfalls, da sie mit dem betroffenen BusinessObjekt evtl. arbeiten. Für die Sicherstellung der Datenstrukturen ist das notwendig.
Report-Klassen, Arbeitsschritt-Klassen und Statusmodell-Klassen fordern ebenfalls eine Neugenerierung des Nuclet-jars, sollte im entsprechenden Editor das Modell verändert worden sein (löschen, anlegen oder aktualisieren).
Beispiel: In Nuclos wird ein Statusmodell im Editor geladen und dadurch verändert, dass ein Status hinzugefügt wird: Status 40 "Auftrag in Bearbeitung". Mit dem Speichern des Modells wird nun eine neue Statusmodell-Klasse "AuftragSM" erstellt, die diesen Status beinhaltet. Daraufhin erstellen wir eine Regel, die über den StatusmodelProvider eine gegebene Instanz eines Auftrags auf den neuen Status 40 anheben soll. Also einen Statuswechsel vornimmt. Nun muss aus nicht näher bekannten Gründen der neue Status ein anderes Numeral erhalten hat. Der Wert wird von 40 auf 50 gesetzt. Mit dem Speichern wird wie zuvor eine neue Statusmodell-Klasse erzeugt, die mit dem Status 50 aktuell ist. Dennoch erscheint jetzt eine Fehlermeldung, die besagt, dass eine Regel nicht kompiliert werden kann! Was ist passiert? Die Statusmodell-Klasse wurde zwar erfolgreich verändert und neu kompiliert. Unsere Regel möchte aber immer noch einen Auftrag auf den Status 40 anheben und findet diesen Status nun nicht mehr. Damit ist die Regel nicht mehr kompilierbar und die Nuclet.jar nicht baubar. Als Folge müssen alle Referenzen auf den Status 40 aktualisiert werden. In unseren Fall eine Regel.
Strukturell müssen alle Informationen korrekt sein und dürfen gegen keine Java-Konvention verstoßen, da sonst die Klassen nicht erstellt werden können. Weitere Informationen finden Sie unter Probleme und Lösungen.