Versionen im Vergleich

Schlüssel

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

Nuclos Event-Regel Job: Interface, JobContext, Struktur, Zuweisung im Server-Regelmanager, Beispielcode (Java).

globe with meridians Sprache: Deutsch · English

open book Event - Job

Ereignis-Regel „Job“: Interface, Kontext und ein Beispiel – so reagierst du auf dieses Nuclos-Ereignis.

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

Panel
bgColor#F4F5F7

Auf dieser Seite

Inhalt
maxLevel2

...

Allgemein

Regeln des Typs "Job" können nur Fristen zugewiesen werden und müssen das Interface "JobRule" implementieren.

Innerhalb des Baums mit der Regelbibliothek werden sie dem Knoten "Job" zugeschrieben.

Struktur

Quellcode einer Klasse des Typs "Job":

...

minLevel2

Wann greift die Regel?

Diese serverseitige Regel wird ausgeführt zeitgesteuert durch einen Job/Timer. Sie kann einem Timer/Job zugewiesen werden.

Struktur

Grundgerüst der Regelklasse (der Regeleditor legt es automatisch an):

Codeblock
languagejava
package org.nuclet.lager; 

import org.nuclos.api.rule.JobRule; 
import org.nuclos.api.context.JobContext; 
import org.nuclos.api.annotation.Rule; 
import org.nuclos.api.exception.BusinessException; 

/** @name        
  * @description 
  * @usage       
  * @change      
*/

@Rule(name="Job Lager", description="Job Lager")
public class JobLager implements JobRule {
   
 public void execute(JobContext context) { 

//So werden Logs während des Ausführen in den Reiter Log Info in der Jobsteuerung geschrieben
 			context.joblog(e.getMessage());
            context.joblogError("TEST");
            context.joblogWarn("Warnung");
    }
}

...

Das entsprechende Interface schreibt die Implementierung der Methode "execute" vor und liefert als Kontext die Klasse JobContext. Darin enthalten ist die Session-Id. 

Innerhalb der execute-Methode kann der Regelprogrammierer auch eine BusinessException auslösen, die zwar geloggt wird, aber nicht zum Abbruch der Jobdurchführung führt.

Die Angabe der Annotation "Rule" ist nicht zwingend notwendig, wird aber empfohlen, da die Beschreibungen (name und description) im Regelbibliotheksbaum angezeigt werden.

Transaktionale Jobs

Normalerweise wird die gesamte Verarbeitung des Jobs in nur einer Transaktion ausgeführt. Wenn man die Verarbeitung auf mehrere Transaktionen verteilen möchte muss das Interface TransactionalJobRule zusätzlich implementiert werden. Die Methode getTransactionalObjects(JobContext context) liefert eine Liste vom Typ Object wobei nun für jedes Element in der Liste eine eigene Transaktion eröffnet wird. Dabei wird für jedes Object die Methode execute(JobContext context) aufgerufen. Das Object kann vom JobContext mittels .getTransactionalObject() abgeholt werden.

 

Struktur TransactionalJobRule

Quellcode einer Klasse des Typs "Job" mit "TransactionalJobRule":

...

Info
titleKontext: JobContext

Der Kontext JobContext liefert das betroffene BusinessObject über context.getBusinessObject(...); zusätzlich stehen die Funktionen des RuleContext (Provider) bereit. Eine BusinessException bricht den Vorgang ab.

Zuweisung

Im Server-Regelmanager per Drag-and-Drop dem Ziel zuweisen. Optional lässt sich die Ausführung auf einen Status oder eine Aktion einschränken; die Reihenfolge steuerst du über die Pfeil-Buttons.

Image Added

Zuweisung „Job“.

Beispiel

Das folgende Beispiel soll den Aufbau einer Regel vom Typ „Job„ veranschaulichen.

Codeblock
languagejava
package org.nuclet.company; 

import java.util.

...

List;

import org.nuclos.api.annotation.Rule;
import org.nuclos.api.context.JobContext

...

;
import org.nuclos.api.provider.QueryProvider;
import org.nuclos.api.rule.JobRule;

...


...

/** @name        
  * @description 
  * @usage       
  * @change      
*/

...

@Rule(name="

...

JobBestellungenPruefen", description="

...

JobBestellungenPruefen")
public class 

...

JobBestellungenPruefen implements JobRule

...

 

...

{

...

    public void execute(JobContext context){ 

...


        // 

...

Get 

...

all 

...

Bestellungen
        List<Bestellung> lstBestellungen = QueryProvider.execute(
                QueryProvider.create(Bestellung.class));
        
        for (Bestellung b : lstBestellungen) {
            // orders that are not confirmed are ok, but should be logged as infos
            if (Boolean.FALSE.equals(b.getBestaetigt())) {
                context.joblog("Info: Bestellung " + b.getNummer() + " wurde noch nicht bestätigt.");
            }
            
            // orders without articles are formally valid, but dont make sense
            if (b.getPosition().size() <= 0) {
                context.joblogWarn("Warnung: Bestellung " + b.getNummer() + " besitzt keine Positionen");
            }
            
            // orders without an internal advisor are formally invalid 
            if (b.getSachbearbeiter() == null) {
                context.joblogError("Fehler: Bestellung " + b.getNummer() + " besitzt keinen Sachbearbeiter");
            }
                        
        }
        
    }
}

Verwandte Seiten

open book Regeln (serverseitig)


Grundlagen.

Öffnen →

gear Server Regelmanager


Zuweisen.

Öffnen →

clipboard Ausführungsreihenfolge der Regeln


Reihenfolge.

Öffnen →

(Order) context.getTransactionalObject(); // do something ... // encapsulated transaction end } public List<Object> getTransactionalObjects(JobContext context) { List<Object> result = new ArrayList<Object>(); try { result.addAll(QueryProvider.getByState(Order.class, ExampleorderSM.State_10)); } catch (BusinessException e) { context.joblogError(e.getMessage()); } return result; } }

 

Mandantenabhängige Verarbeitung in Jobs

Wird die Mandantenfähigkeit für ein BO aktiviert, werden automatisch alle objektbezogenen Regeln (Speichern, Status, etc.) im Kontext des im BO hinterlegten Mandanten ausgeführt. Damit werden z.B. Queries auf andere BOs, welche ebenfalls mandantenabhängig sind, automatisch auf den gleichen Mandanten eingeschränkt. 

Da ein Job nicht objektbezogen arbeitet kann in der Jobsteuerung gepflegt werden, für welche Mandanten dieser Job laufen soll. Ein Joblauf wird dann alle eingetragenen Mandanten berücksichtigen und hintereinander die execute Methode mit einem entsprechenden mandanteneingeschränkten Kontext aufrufen.

Eine weitere Alternative bietet die TransactionalJobRule (siehe weiter oben), wenn die Liste mandantenabhängige BOs enthält. In solch einem Fall ist die neue Transaktion auch gleich auf den im BO hinterlegten Mandanten eingeschränkt. Das hat den Vorteil, dass keine zusätzliche Konfiguration im Job nötig ist.

Zuweisung

Klassen des Typs "Job" können nur Fristen zugewiesen werden. Nach der Verknüpfung erscheint die Klasse nach Auswahl der Frist und des Typs im Zuweisungsfenster.

Image Removed

Mit dem Symbol des Mülleimers kann die Zuweisung der Klasse zur Frist gelöscht werden. Wichtig ist, dass damit nur die Zuweisung gelöscht wird. Weiterhin lässt sich mit Hilfe der Pfeile-Buttons die Ausführungsreihenfolge verändern.

Jede Änderung wird automatisch gespeichert.

Beispiel

Hier finden Sie ein Beispiel, das den Aufbau einer Regel vom Typ "Job" veranschaulicht.

Probleme und Lösungen

Support und Informationen zur Problembehandlung finden Sie hier.