Versionen im Vergleich

Schlüssel

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

Nuclos Regelausführung selektiv ausschalten: ThreadLocal-Schalter, Endlosschleifen vermeiden, try/finally, UpdateRule deaktivieren, BusinessObjectProvider.update.

globe with meridians Sprache: Deutsch · English

hammer and wrench Regelausführung selektiv ausschalten

Endlosschleifen vermeiden: einzelne Regeln kontextbezogen über ThreadLocal-Schalter deaktivieren.

Status
colourPurple
titleHow-to
Status
colourBlue
titleEntwickler
Status
colourGreen
titleStand: Jul 2026
Status
colourGrey
titlegilt fuer Nuclos 4.2026.x

Panel
bgColor#F4F5F7

Auf dieser Seite

Inhalt
maxLevel

...

Definition

...

2
minLevel2

Wozu Regeln selektiv ausschalten?

Manchmal soll verhindert werden, dass bestimmte Regeln (oder Teile davon

...

Beispiel

...

) laufen – typisch beim gezielten Aktualisieren einzelner Felder aus einer Regel

...

heraus, um Endlosschleifen oder Performance-Probleme zu vermeiden. Umgesetzt wird das über regelübergreifende ThreadLocal-Variablen.

Warnung
titleVorsicht

Mit Bedacht einsetzen – die fachliche Logik der Regeln

...

darf nicht ausgehebelt werden. Für einfache Fälle ggf. SaveFlags bevorzugen.

1. Schalter

...

in der zu deaktivierenden Regel

Codeblock
languagejava

...

public class MyUpdateRule implements UpdateRule

...

 {

...

    //

...

 

...

ThreadLocal-Schalter, initial aktiv
    public static final ThreadLocal<Boolean> ACTIVE =

...


        

...

ThreadLocal.withInitial(() 

...

-> Boolean.TRUE

...

);

...


...

    public void update(UpdateContext context) throws BusinessException {

...


...

 

...

 

...

 

...

 

...

 

...

   

...

if (ACTIVE.get()) {
            

...

// ... eigentliche Logik ...
        }
    }
}

ThreadLocal-Variablen

...

wirken nur im aktuellen Thread/Benutzerkontext – die Regel wird also nicht generell deaktiviert

...

(anders als das Aktiv-Flag der Regel).

2. Deaktivierung aus

...

der aktualisierenden Regel

Codeblock
languagejava

...

MyBusinessObject mbo = QueryProvider.getById(MyBusinessObject.class, id);

...

mbo.setMyField(value);

...

try {

...

 

...

   

...

MyUpdateRule.ACTIVE.set(Boolean.FALSE);

...

 

...

 

...

 

...

// 

...

Regel deaktivieren
    

...

BusinessObjectProvider.update(mbo);

...

} finally {

...

    MyUpdateRule.ACTIVE.set(Boolean.TRUE);    // immer wieder aktivieren!
}
Tipp
titlefinally nicht vergessen

Immer im finally-Block reaktivieren, damit der Schalter auch im Fehlerfall zuverlässig zurückgesetzt wird.

Verwandte Seiten

open book Regeln (serverseitig)


Regelkontext.

Öffnen →

gear SaveFlags


Alternative beim Speichern.

Öffnen →

} ... ... } Es ist darauf zu achten, dass die Deaktivierung zuverlässig wieder zurückgesetzt wird (auch im Fehlerfall), daher sollte dies immer wie in diesem Beispiel im finally-Block geschehen. Die Aktivierung und Deaktivierung befindet sich in diesem Beispiel also in einem try-catch-finally-Block, um sicherzustellen, dass selbst nach Auftreten einer Exception in BusinessObjectProvider.update() die Regel anschliessend wieder aktiviert wird.