Sie zeigen eine alte Version dieser Seite an. Zeigen Sie die aktuelle Version an.

Unterschiede anzeigen Seitenhistorie anzeigen

« Vorherige Version anzeigen Version 10 Nächste Version anzeigen »

Verfügbar ab Nuclos 4.14.

Zu diesem Feature gibt es ein Tutorial

 

Definition

Die Generische Implementierung dient der Umsetzbarkeit generischer Regeln. D.h. Regeln, die für mehr als ein Businessobjekt genutzt werden können.

Der normale Regelkontext liefert immer das konkrete BO (z.B.

Auftrag a = context.getBusinessObject(Auftrag.class)).

Es gibt manchmal aber Anforderungen, die für eine Vielzahl von BOs gleichermaßen umgesetzt werden könnten, z.B. die Vergabe einer fortlaufenden Nummer beim Speichern. Die Umsetzung würde dann innerhalb einer Regel durch die Verwendung von instanceof gelöst werden. Etwa so:

Bisherige Implementierung ohne Generischen BOs
...	
	final Modifiable<?> businessObject = context.getBusinessObject(Modifiable.class);
	if (businessObject instanceof Geschaeftspartner) {
    	Geschaeftspartner gp = ((Geschaeftspartner) businessObject);
        ...
    } else if (businessObject instanceof Ansprechpartner) {
            ...
    } else if (businessObject instanceof Angebot) {
            ...
    } else if (businessObject instanceof Auftrag) {
            ...
    }...
...

 

Mit Hilfe der Generischen Implementierung ist es nun möglich, die Gemeinsamkeiten mehrerer BOs in "generischen Objekten" zu abstrahieren und Regeln für solche GoS zu implementieren.

Anwendungsbeispiele

  • Nummernkreise: Nummern müssen in der Regel für viele BOs generiert werden, ein entsprechendes Generisches Objekt könnte also z.B. „Nummerierbar“ heissen.
  • Belege: In verschiedenen Belegarten, z.B. Angebot, Auftrag, Lieferschein, Rechnung, Gutschrift müssen unter Umständen in gleicher Art und Weise Netto- und Bruttosummen gebildet werden, entsprechende Generische Objekte könnten also z.B. „Beleg“ und „Belegposition“ heissen.

 

Konfiguration

  • Generisches Businessobjekt: Auswahl des BOs, das als generisches Businessobjekt definiert ist
  • Implementierendes Businessobjekt: Auswahl des BOs, das in der generischen Implementierung verwendet werden soll
  • Attribute: in diesem Unterformular wird die Zuordnung (das Mapping) der Attribute zwischen dem generischen BO und dem originalen BO vorgenommen.

Begrifflichkeiten

Genericobject (in Analogie zum Businessobject) = Beschreibung eines BOs, das nicht für sich existiert, sondern dem Zweck dient, Gemeinsamkeiten mehrerer BOs zu abstrahieren, um die Anwendung einer Regel für all diese BOs zu erlauben (ohne in der Regel mit instanceof-Prüfungen arbeiten zu müssen).

Wrapperklasse = Automatisch generierte (und unabänderliche) Klasse, die die Attribute (bzw. deren Getter und Setter) eines GenericObject auf ein BusinessObject mappt.

Implementierendes BO / Implementing BO = Hilfsbegriff für ein BO welches auf ein GO gemappt ist. Dem Implementing BO sieht man nicht an, dass es ein Implementing BO ist.

Generische Regel = Hilfsbegriff für eine Regel, die mit GOs arbeitet.

Aspekte

Generic Objects

  • GenericObjects können auf beliebig viele Businessobjekte (Implementing BOs) gemappt werden.
  • Ein Businessobjekt (Implementing BO) kann auf beliebig viele GenericObjects gemappt sein.
  • Die Implementing BOs und deren Mappings sind Teil desselben Nuclets, das Mapping muss nicht separat zugewiesen werden.
  • GenericObjects werden über den BO-Wizard erstellt. GOs können Referenzfelder auf andere GOs haben (siehe Beispiel Beleg und Belegposition im Tutorial).
  • Das Mapping wird mithilfe der oben beschriebenen Maske erstellt
  • GenericObjects können vom RuleContext nur mittels einer neuen Methode getGenericObject(Class GOClass) abgeholt werden. Analog werden in GOs Getter für die abhängigen GOs benötigt (siehe Beispiel Beleg und Belegposition).
  • GenericObjects werden nur durch Teile der Nuclos API unterstützt. Es sind insbesondere (trivialerweise) keine QueryProvider- oder StatemodelProvider-Aufrufe etc. für GOs möglich.
  • GenericObjects erhalten je Implementing BO einen Konstruktur, um ein Implementing BO in das GenericObject umwandeln zu können. Damit wird eine Verwendung außerhalb des RuleContextes möglich, wenn z.B. in einem Job ein normales BO zu einem Generic-Object werden soll, um es einer Generic-Rule zu übergeben (MyGenericUtils.calculateSums(<GenericObject> GO).
  • GenericObjects können gelesen (Getter) und geändert (Setter), später ggf. auch gelöscht werden. Die entsprechenden Aufrufe werden an das zugrundeliegende, gemappte BusinessObject „delegiert“.

Generische Regeln

  • müssen manuell an ein Implementing BO gehängt werden. Die Regelverwendungen sind damit im selben Nuclet wie die Implementing BOs.
  • Ist das im Regelkontext befindliche BO kein Implementing BO des GO, das versucht wird, aus dem Regelkontext zu holen, erfolgt eine Fehlermeldung zur Laufzeit.
  • Keine Stichwörter