Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

...

Auszug

...

hidden

...

Definition

Menüaufruf: (Konfiguration) - (Regelwerke) - (Generische Implementierung) 

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

Tipp

Zu diesem Feature gibt es ein Tutorial

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

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

...

true

Nuclos generische Implementierung: generische Businessobjekte (GBO), Mapping, generische Regeln, Wrapperklasse, getGenericBusinessObject.

globe with meridians Sprache: Deutsch · English

light bulb Generische Implementierung

Eine Regel für viele Businessobjekte: Gemeinsamkeiten in generischen Businessobjekten abstrahieren statt instanceof-Ketten.

Status
colourGreen
titleKonzept
Status
colourBlue
titleEntwickler
Status
colourGreen
titleStand: Jul 2026
Status
colourGrey
titlegilt fuer Nuclos 4.2026.x

Panel
bgColor#F4F5F7

Auf dieser Seite

Inhalt
maxLevel2
minLevel2

Wozu generische Implementierung?

Die generische Implementierung ermöglicht Regeln, die für mehrere Businessobjekte gleichermaßen gelten – etwa fortlaufende Nummern oder Netto-/Bruttosummen für Angebot, Auftrag, Lieferschein und Rechnung. Statt instanceof-Ketten abstrahierst du Gemeinsamkeiten in einem Generischen Businessobjekt (GBO).

Hinweis
titleVorher: ohne GBO

Bisher musste man in einer Regel jeden Typ einzeln prüfen:

Codeblock
languagejava

...

final Modifiable<?> 

...

bo = context.getBusinessObject(Modifiable.class);

...

if (

...

bo instanceof Geschaeftspartner) {

...

 

...

...

...

 }

...


...

else if (

...

bo instanceof Angebot)

...

      { 

...

...

...

 

...

}

...


else if (

...

bo instanceof Auftrag)

...

      { 

...

...

...

 }

Menüaufruf: Konfiguration → Regelwerke → Generische Implementierung

Konfiguration

Voraussetzung ist ein als generisch markiertes BO (Checkbox im BO-Wizard). Anschließend wird das Mapping gepflegt:

  • Generisches Businessobjekt – das als GBO definierte BO.
  • Implementierendes Businessobjekt – das konkrete BO.
  • Attribute – Mapping GBO ↔ BO. Pflichtattribute im GBO müssen gemappt werden (das BO-Attribut muss deshalb nicht Pflicht sein).
Image Added

Mapping der generischen Implementierung.

Begriffe

BegriffBedeutung
GenericBusinessobject (GBO)abstrahiert Gemeinsamkeiten mehrerer BOs
Wrapperklassegenerierte Klasse, die GBO-Attribute auf ein BO mappt
Implementierendes BOkonkretes BO, das auf ein GBO gemappt ist
Generische RegelRegel, die mit GBOs arbeitet

Aspekte

  • Ein GBO kann auf beliebig viele BOs gemappt sein und umgekehrt; Mappings gehören zum selben Nuclet.
  • Zugriff im Regelkontext über getGenericBusinessObject(GBOClass); GBOs können Referenzfelder auf andere GBOs haben.
  • GBOs werden nur von Teilen der API unterstützt (kein QueryProvider/StatemodelProvider).
  • Generische Regeln werden manuell an ein implementierendes BO gehängt; passt der Kontext-BO-Typ nicht, gibt es einen Laufzeitfehler.

Verwandte Seiten

open book Regeln (serverseitig)


Serverregeln.

Öffnen →

puzzle piece Businessobjekt


GBO markieren.

Öffnen →

... ...

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

Konfiguration

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

  • 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. Ist ein Attribute im GBO als Pflichtfeld definiert, so muss ein Mapping angegeben werden. Es bedeutet nicht, dass das Attribute im originalen BO ein Pflichtfeld sein muss.
 

Image RemovedImage Removed

Begrifflichkeiten

GenericBusinessobject (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 = Hilfsbegriff für ein BO welches auf ein GBO gemappt ist. Dem Implementing BO sieht man nicht an, dass es ein Implementing BO ist.

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

Aspekte

Generic Objects

  • Generische Businessobjekte (GBO) können auf beliebig viele Businessobjekte (Implementierende BOs) gemappt werden.
  • Ein Businessobjekt (Implementierendes BO) kann auf beliebig viele GBOs gemappt sein.
  • Die Implementierenden BOs und deren Mappings sind Teil desselben Nuclets, das Mapping muss nicht separat zugewiesen werden.
  • GBOs werden über den Businessobjekt erstellt. GBOs können Referenzfelder auf andere GBOs haben (siehe Beispiel Beleg und Belegposition im Tutorial).
  • Das Mapping wird mithilfe der oben beschriebenen Maske erstellt
  • GBOs können vom RuleContext nur mittels einer neuen Methode getGenericBusinessObject(Class GBOClass) abgeholt werden. Analog werden in GBOs Getter für die abhängigen GBOs benötigt (siehe Beispiel Beleg und Belegposition).
  • GBOs werden nur durch Teile der Nuclos API unterstützt. Es sind insbesondere (trivialerweise) keine QueryProvider- oder StatemodelProvider-Aufrufe etc. für GBOs möglich.
  • GBOs erhalten je Implementing BO einen Konstruktur, um ein Implementierendes BO in das Generische BO 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 GBO werden soll, um es einer Generic-Rule zu übergeben (MyGenericUtils.calculateSums(<GenericBusinessObject> gbo).
  • GBOs können gelesen (Getter) und geändert (Setter), später ggf. auch gelöscht werden. Die entsprechenden Aufrufe werden an das zugrundeliegende, gemappte BO „delegiert“.

Generische Regeln

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