Das folgende Beispiel soll den Aufbau einer Regel vom Typ "Aktualisieren (im Anschluss)" und die Weiterverarbeitung der übergebenen Inhalte veranschaulichen.

Fachlicher Hintergrund

Eine bestehende Nuclos-Instanz umfasst das Businessobjekt Bestellungen. Diese wiederum besitzt den Reiter Positionen, der alle Artikel einer konkreten Bestellung auflistet. Die Aufgabe besteht darin, dass in allen Positionen die Bestellnummer vermerkt werden soll. Aber nur dann, wenn die manuell vorgenommen Änderungen des Benutzers an der Nuclos-Oberfläche auch valide sind und abgespeichert werden konnten.

Dafür erstellen wir eine UpdateFinal-Regel. Diese wird nur im Anschluss an einen fehlerfreien Update-Process ausgeführt. Wir lesen die Positionen aus und aktualisieren sie mit Hilfe des BusinessObjectProviders.

Quellcode


package org.nuclet.company; 

import java.util.List;
import org.nuclos.api.rule.UpdateRule; 
import org.nuclos.api.context.UpdateContext; 
import org.nuclos.api.annotation.Rule; 
import org.nuclos.api.exception.BusinessException; 

/** @name        
  * @description 
  * @usage       
  * @change      
*/
@Rule(name="UpdateFinalBestellung", description="UpdateFinalBestellung")
public class UpdateFinalBestellung implements UpdateFinalRule {
    public void updateFinal(UpdateContext context) throws BusinessException { 
     
		    // this is the businessObject after storing the updated data in the database
            Bestellung curBestellung = context.getBusinessObject(Bestellung.class);
        
            // changes are not recognized, because data has already been saved
            // the following description will not be stored in the database
            curBestellung.setKurzbeschreibung("Bestellung wurde im Schnellverfahren abgeschlossen.");
           
			// we want to re-update all positions after the order has been updated properly
			// so we use the QueryProvider
            for (Bestellposition pos : curBestellung.getPosition()) {
                pos.setBemerkung("Position im Gesamtkontext von " + curBestellung.getNr());
                pos.save();
            }
           
 	}
}
  • Keine Stichwörter