Versionen im Vergleich

Schlüssel

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

Nuclos Proxy Businessobjekt: Proxy-BO, Interface implementieren, externe Daten, Webservice, CollectiveProcessingProxy, Schreib-Proxy-BO, Unterformular.

globe with meridians Sprache: Deutsch · English

light bulb Proxy Businessobjekt

Externe Daten wie ein BO anzeigen und schreiben – Proxy-Interface, Sammelbearbeitung und Schreib-Proxy-BO.

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

Panel
bgColor#F4F5F7

Auf dieser Seite

Inhalt
maxLevel2
minLevel2

Was ist ein Proxy-BO?

Ein Proxy Businessobjekt

...

wird verwendet, wenn Daten nicht

...

aus der Nuclos-Datenbank stammen, sondern

...

per Java-Code aus externen Quellen

...

gelesen oder geschrieben werden

...

z.

...

​B.

...

Drittsysteme,

...

Webservices oder

...

das Dateisystem.

...

Nuclos generiert dazu ein Interface

...

, das in einer Regel implementiert wird. Diese Implementierung übernimmt

...

Lesen, Schreiben

...

und Löschen

...

.

Typische Einsatzfälle:

  • Integration von Drittsystemen

  • Zugriff auf Dateisystemdaten

  • Daten aus Webservices

  • Daten, die nicht in der Nuclos-Datenbank gespeichert sind

Funktionsprinzip

Ein Proxy-Businessobjekt besteht aus zwei Teilen:

  1. Businessobjekt-Definition in Nuclos

  2. Java-Implementierung des Proxy-Interfaces

Die Benutzeroberfläche zeigt Datensätze wie bei einem normalen Businessobjekt an.
Die Daten werden jedoch durch den Java-Code der Proxy-Implementierung bereitgestellt oder verändert.

Codeblock
languagejava
titleExample
linenumberstrue
@Override
public Object insert(final VirtualBO pVirtualBO) throws BusinessException {
	AnyBO anyBo = new AnyBO();
	anyBo.save();
	return anyBo.getId();
}

blue book  How-to: Proxy Businessobjekt erstellen

keycap: 1  Proxy-BO anlegen

  1. Öffne
    Konfiguration → Businessobjekt

  2. Erstelle ein neues Businessobjekt.

  3. Aktiviere die Option Proxy Businessobjekt.

Dadurch wird automatisch ein Java-Interface für dieses BO generiert.

keycap: 2  Attribute definieren

Lege die benötigten Attribute an, z. B.:

  • ID

  • Name

  • Datum

  • Referenz auf ein Elternobjekt

Proxy-BOs werden häufig als Unterformular eines anderen Businessobjekts verwendet.

Hinweis
titleEinsatz als Unterformular

Proxy-BOs können nur als Unterformular verwendet werden (Referenzfeld auf das Eltern-BO nötig). Ein Referenzfeld auf ein Proxy-BO ist nicht möglich.

How-to: Proxy-BO erstellen

keycap: 3  Interface implementieren

Nuclos erzeugt ein Interface wie z. B.:

  1. BO anlegen (Konfiguration → Businessobjekt) und Option Proxy Businessobjekt aktivieren – ein Java-Interface wird generiert.
  2. Attribute definieren (ID, Name, Referenz auf das Eltern-Objekt …).
  3. Interface implementieren (vollständiger Package-Pfad, z.​B.
  1. org.nuclet.businessentity.RechnungProxy

...

Dieses muss in einer Java-Klasse implementiert werden.

Beispiel:

...

  1. ).
  2. Implementierung voll qualifiziert registrieren.
  3. Proxy-BO im Layout als Unterformular verwenden.

Beispiel: lesendes/schreibendes Proxy-BO

Die Methoden definieren, wie Nuclos mit den externen Daten interagiert (getByKunde, getAll, getById, insert, update, delete, commit/rollback):

Codeblock
languagejava
package org.nuclet.businessentity;
import java.util.*;
import org.nuclos.api.exception.*;
import org.nuclos.api.rule.*;

public class RechnungProxyImpl implements org.nuclet.businessentity.RechnungProxy {
private User user;

public List<Rechnung> getByKunde(Long id) {
  List<Rechnung> rlist = new ArrayList<>();
  // Get Rechnungen for Kunde with "id" from another source
  // ...
  // rlist.add(...)
  //
  return rlist;
}

public List<Rechnung> getAll() {
  // Get Data from another source
}
public List<Long> getAllIds() {
  // Get Data from another source
}
public Rechnung getById(Long id) {
  // Get Data from another source
}

public void insert(Rechnung rechnung) throws BusinessException {
  // Write Data to another source
}
public void update(Rechnung rechnung) throws BusinessException {
  // Write Data to another source
}
public void delete(Long id) throws BusinessException {
  // Delete Data within another source
}

public void commit() {
}
public void rollback() {
}
public void setUser(User user) {
  this.user = user;
}
}

Sammelbearbeitung (CollectiveProcessingProxy, ab 4.16)

Für bessere Performance beim Laden abhängiger Daten implementiert das BO zusätzlich CollectiveProcessingProxy. getForCollectiveProcessing wird zuerst aufgerufen; nur bei Rückgabe null greift die Standardmethode (z.​B. getByKunde) je Id.

Codeblock
languagejava
package org.nuclet.businessentity;

import java.util.*;
import org.nuclos.api.businessobject.attribute.*;
import org.nuclos.api.exception.*;
import org.nuclos.api.rule.*;
import org.nuclos.api.*;
 
public class RechnungProxyImpl implements org.nuclet.businessentity.RechnungProxy, CollectiveProcessingProxy {
private User user;

public <PK> List getForCollectiveProcessing(ForeignKeyAttribute<PK> attribute, Collection<PK> ids) {
  if (attribute == Rechnung.KundeId) {
    List ret = new ArrayList<>();
    // Fetch Rechnungen für several Kunden (ids) at once
    // ret.add(...);
    //
    return ret;
  }
  return null; // When null is returned, the standard proxy methods (like getByKunde()) will be called
}
 
public List<Rechnung> getByKunde(Long id) {
  // Rest is the same as before
  // ...

Schreib-Proxy-BO

Schreib-Proxy-BOs sind eine Variante der virtuellen BOs: Lesen erfolgt über die hinterlegte Datenbank-View (auch außerhalb von Unterformularen referenzierbar), Schreiben über die Interface-Methoden – z.​B. via Webservice:

Codeblock
languagejava
package example.rest;

public class ArtikelProxyImpl implements example.rest.ArtikelProxy{    
	private User user;
	public Object insert(Artikel artikel) throws org.nuclos.api.exception.BusinessException{          
            // Call Webservice
            WS myWS =...
            WSArtikel artikel=myWS.createArtikel(...);
       
            return artikel.getId();       
      }
	public void update(Artikel  artikel) throws org.nuclos.api.exception.BusinessException{
    	   // Call Webservice
           WS myWS =...
           myWS.updateArtikel(...);
    }	
	
	public void commit() {
	}
	public void rollback() {
	}
	public void setUser(User user) {
  		this.user = user;
	}
	public void delete(java.lang.Long id) throws org.nuclos.api.exception.BusinessException{}
}

Verwandte Seiten

package Virtuelle Businessobjekte


Virtuelle BOs.

Öffnen →

open book View mit Dokumenten erstellen


Praxisbeispiel.

Öffnen →

gear Regeln (serverseitig)


Regeln.

Öffnen →

{
publicList<Rechnung> getAll() {
// Daten aus externem System laden
}
publicRechnunggetById(Longid) {
// Datensatz aus externem System laden
}
publicvoidinsert(Rechnungrechnung) throwsBusinessException {
// Datensatz im externen System speichern
}
publicvoidupdate(Rechnungrechnung) throwsBusinessException {
// Datensatz aktualisieren
}
publicvoiddelete(Longid) throwsBusinessException {
// Datensatz löschen
}
}

Diese Methoden definieren, wie Nuclos mit den externen Daten interagiert.

keycap: 4  Implementierung registrieren

Die Implementierung muss voll qualifiziert mit Package angegeben werden, damit Nuclos sie erkennt.

keycap: 5  Proxy-BO im Formular verwenden

Das Proxy-BO kann anschließend:

  • als Unterformular

  • oder als Datenquelle für externe Daten

verwendet werden.

check mark button  Ergebnis

  • Benutzer sehen Datensätze im Proxy-BO wie in normalen Businessobjekten.

  • Daten werden jedoch dynamisch über Java-Code geladen oder gespeichert.

  • Änderungen werden im externen System durchgeführt.

light bulb  Typische Einsatzfälle

SzenarioLösungRechnungen liegen in FremdsystemProxy-BO liest Daten über APIDokumente im DateisystemProxy-BO lädt DateienDaten aus WebserviceProxy-BO ruft Service aufDaten sollen nicht lokal gespeichert werdenProxy-BO ersetzt DB-Speicherung