| Auszug | ||
|---|---|---|
| ||
Nuclos Proxy Businessobjekt: Proxy-BO, Interface implementieren, externe Daten, Webservice, CollectiveProcessingProxy, Schreib-Proxy-BO, Unterformular. |
Sprache: Deutsch · English
Externe Daten wie ein BO anzeigen und schreiben – Proxy-Interface, Sammelbearbeitung und Schreib-Proxy-BO.
| Status | ||||
|---|---|---|---|---|
|
| Status | ||||
|---|---|---|---|---|
|
| Status | ||||
|---|---|---|---|---|
|
| Status | ||||
|---|---|---|---|---|
|
| Panel | ||||||
|---|---|---|---|---|---|---|
| ||||||
Auf dieser Seite
|
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
Ein Proxy-Businessobjekt besteht aus zwei Teilen:
Businessobjekt-Definition in Nuclos
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 | ||||||
|---|---|---|---|---|---|---|
| ||||||
@Override
public Object insert(final VirtualBO pVirtualBO) throws BusinessException {
AnyBO anyBo = new AnyBO();
anyBo.save();
return anyBo.getId();
} |
Öffne
Konfiguration → Businessobjekt
Erstelle ein neues Businessobjekt.
Aktiviere die Option Proxy Businessobjekt.
Dadurch wird automatisch ein Java-Interface für dieses BO generiert.
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 | ||
|---|---|---|
| ||
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. |
Nuclos erzeugt ein Interface wie z. B.:
org.nuclet.businessentity.RechnungProxy...
Dieses muss in einer Java-Klasse implementiert werden.
Beispiel:
...
Die Methoden definieren, wie Nuclos mit den externen Daten interagiert (getByKunde, getAll, getById, insert, update, delete, commit/rollback):
| Codeblock | ||
|---|---|---|
| ||
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; } } |
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 | ||
|---|---|---|
| ||
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-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 | ||
|---|---|---|
| ||
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{}
} |
Diese Methoden definieren, wie Nuclos mit den externen Daten interagiert.
Die Implementierung muss voll qualifiziert mit Package angegeben werden, damit Nuclos sie erkennt.
Das Proxy-BO kann anschließend:
als Unterformular
oder als Datenquelle für externe Daten
verwendet werden.
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.