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

Unterschiede anzeigen Seitenhistorie anzeigen

« Vorherige Version anzeigen Version 14 Aktuelle »

Erster Fall: Die Rechnungen der Kunden werden nicht in der Nuclos-Datenbank gespeichert, sondern werden auf einem Drittsystem gepflegt. Dazu kann ein sogenanntes "ProxyBO" Rechnungen im Bo-Wizard erstellt werden. Damit wird ein Interface (hier: "org.nuclet.businessentity.RechnungProxy", wichtig ist das komplette Ausschreiben des Pfades, damit die Klasse aus Proxy-Implementation erkannt wird) zur Verfügung gestellt, dessen Implementation die Daten holt, bzw. schreibt:

 

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;
}
}

 

Zweiter Fall (ab Nuclos 4.16): Es soll eine Sammelbearbeitung geben, bei der die Rechnungen mehrerer Kunden auf einmal bearbeitet werden. Grundsätzlich ist das schon mit dem Standard-Proxy-Interface oben möglich. Um die Performance zu verbessern, gibt es die Option eines weiteren Interface: "org.nuclos.api.rule.CollectiveProcessingProxy" fordert die Implementierung einer zusätzlichen Methode "getForCollectiveProcessing", mit der die Rechnungen mehrerer Kunden auf einmal geholt werden können:

 

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

 

Bitte beachten, dass mit dem Interface "CollectiveProcessingProxy" beim Laden von abhängigen Daten immer zuerst "getForCollectiveProcessing" aufgerufen wird. Nur wenn diese Methode "null" zurück gibt, wird die Standard-Methode "getByKunde" aufgerufen (bei mehreren ids in einer Schleife). Die vollständige Bezeichnung der Methode mit Generics lautet:

<PK> List<? extends BusinessObject<PK>> getForCollectiveProcessing(ForeignKeyAttribute<PK> attribute, Collection<PK> ids);

 

 

Beispiel für Regel-Implementationen von Schreib-ProxyBOs

Schreib-ProxyBOs sind eine abgewandelte Form der ProxyBOs. Gelesen werden bei einem Schreib-ProxyBO die Daten, die in der Datenbank-View hinterlegt sind, geschrieben wird mit den Proxy-Funktionalitäten die über das Interface implementiert wurden. Ein typischer Anwendungsfall für ein Schreib-ProxyBO ist ein externes System, in dem man neue Datensätze über Webservices anlegt, die aber eine Datenbank-View zum Lesen der Datensätze bereitstellt.

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{}
}

 

 

 

 

  • Keine Stichwörter