Versionen im Vergleich

Schlüssel

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

Nuclos Kommunikationsregel: CommunicationRule, communicate(), PhoneCallNotificationContext, Zuweisung, Beispiel.

globe with meridians Sprache: Deutsch · English

open book Event - Kommunikation

Auf Kommunikationsereignisse reagieren – z.​B. eingehende Anrufe oder Benachrichtigungen.

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 "Kommunikation" können  Businessobjekte zugewiesen werden und müssen das Interface "CommunicationRule" implementieren.

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

minLevel2

Wann greift die Regel?

Eine Kommunikationsregel (Interface CommunicationRule) reagiert auf Kommunikationsereignisse – etwa eingehende Anrufe, E-Mails oder andere Benachrichtigungen. Sie wird einem Businessobjekt zugewiesen und ist typisiert auf einen Kommunikationskontext (z.​B. PhoneCallNotificationContext).

...

Struktur

Codeblock
languagejava
package de.projekt; 

import org.nuclos.api.rule.CommunicationRule; 
import org.nuclos.api.context.communication.CommunicationContext; 
import org.nuclos.api.context.communication.PhoneCallNotificationContext; 
import org.nuclos.api.annotation.Rule; 
import org.nuclos.api.exception.BusinessException; 

/** @name        
  * @description 
  * @usage       
  * @change      
*/
@Rule(name="ComPhone", description="ComPhone")
public class ComPhone implements CommunicationRule<PhoneCallNotificationContext> {

	public Class<PhoneCallNotificationContext> communicationContextClass() {
		return PhoneCallNotificationContext.class;
	}
	public void communicate(PhoneCallNotificationContext context)  throws BusinessException { 
	}
}
Info
titleKontext: CommunicationContext

Über communicationContextClass() legst du fest, auf welchen Kontexttyp die Regel reagiert. communicate(...) enthält die eigentliche Logik.

Zuweisung

Wie andere serverseitige Regeln im Server-Regelmanager einem Businessobjekt zuweisen; optional auf Status/Aktion einschränken.

Image Added

Zuweisung einer Kommunikationsregel.

Beispiel

Codeblock
languagejava
package org.nuclet.projekt.rule; 

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;

import org.nuclos.api.annotation.Rule; 
import org.nuclos.api.businessobject.Query;
import org.nuclos.api.businessobject.SearchExpression;
import org.nuclos.api.context.communication.PhoneCallNotificationContext; 
import org.nuclos.api.exception.BusinessException; 
import org.nuclos.api.provider.BusinessObjectProvider;
import org.nuclos.api.provider.QueryProvider;
import org.nuclos.api.rule.CommunicationRule; 

import org.nuclet.arcd.Kommunikationsart;
import org.nuclet.arcd.Kommunikationsprotokoll;
import org.nuclet.arcd.Kontakt;
import org.nuclet.arcd.logik.Stammdatenzugriff;

import org.nuclet.basistemplate.Bearbeiter;


/** @name KommunikationsprotokollAnlegen       
  * @description Legt ein Kommunikationsprotokoll bei eingehendem Telefonanruf an
  * @usage       
  * @change      
*/
@Rule(name="KommunikationsprotokollAnlegen", description="Legt ein Kommunikationsprotokoll bei eingehendem Telefonanruf an")
public class KommunikationsprotokollAnlegen implements CommunicationRule<PhoneCallNotificationContext> 
{

	public Class<PhoneCallNotificationContext> communicationContextClass() 
    {
		return PhoneCallNotificationContext.class;
	}

	public void communicate(PhoneCallNotificationContext context)  throws BusinessException 
    { 
        if (PhoneCallNotificationContext.State.RINGING.equals(context.getState())) {
	        final Kontakt boKontakt = ermitteleAnrufer(context);
	        final Kommunikationsart boKommunikationsartAnruf = Stammdatenzugriff.getInstance().ermitteleKommunikationsart("Anruf");
	        final Bearbeiter boBearbeiter = ermitteleBearbeiter("Nuclos");
	        final Calendar calDatum = GregorianCalendar.getInstance();
	        
	        if (boKontakt != null) {
		        final Kommunikationsprotokoll boProtokoll = new Kommunikationsprotokoll();
	            boProtokoll.setKontaktId(boKontakt.getId());
	            boProtokoll.setDatum(calDatum.getTime());
	            boProtokoll.setZeit(ermitteleUhrzeit(calDatum));
	            boProtokoll.setBearbeiterId(boBearbeiter.getId());
	            boProtokoll.setKommendId(boKommunikationsartAnruf.getId());
		        boProtokoll.setErledigt(Boolean.FALSE);
                boProtokoll.setNichtverschickt(Boolean.FALSE);
	
		        BusinessObjectProvider.insert(boProtokoll);
	        }
        }
        
	}

    private Kontakt ermitteleAnrufer(final PhoneCallNotificationContext context) throws BusinessException
    {
        final String strFromNumber = context.getFromNumber();
        
        final SearchExpression seAnrufer = Kontakt.Telefon.eq(strFromNumber);
        seAnrufer.or(Kontakt.Mobil.eq(strFromNumber));
        seAnrufer.or(Kontakt.Telefondienstl.eq(strFromNumber));
        
        final Query qryAnrufer = QueryProvider.create(Kontakt.class)
			.where(seAnrufer);
        final List<Kontakt> lstKontakte = QueryProvider.execute(qryAnrufer);
        
        if (lstKontakte != null && lstKontakte.size() == 1) {
            return lstKontakte.iterator().next();
        } else {
            return null;
        }       
    }
    
    public Bearbeiter ermitteleBearbeiter(final String strBearbeiter) throws BusinessException
    {
        // @todo Besser über Benutzer selektieren!
        final Query qry = QueryProvider.create(Bearbeiter.class)
            .where(Bearbeiter.Nachname.eq(strBearbeiter));
        final List<Bearbeiter> lst = QueryProvider.execute(qry);
        
        if (lst != null && lst.size() == 1) {
            return lst.iterator().next();
        } else if (lst != null && lst.size() > 1) {
            throw new BusinessException("Bearbeiter ist mehrdeutig in Stammdaten: \"" + strBearbeiter + "\"");
        } else {
            throw new BusinessException("Bearbeiter fehlt in Stammdaten: \"" + strBearbeiter + "\"");            
        }
     
    }
    
    private String ermitteleUhrzeit(final Calendar calUhrzeit)
    {
        final StringBuffer sbUhrzeit = new StringBuffer();
        final String strStunden = String.valueOf(calUhrzeit.get(Calendar.HOUR_OF_DAY));
        final String strMinuten = String.valueOf(calUhrzeit.get(Calendar.MINUTE));
        
        if (strStunden.length() == 1) {
            sbUhrzeit.append("0");
        }
        sbUhrzeit.append(strStunden);
        
        sbUhrzeit.append(":");
        
        if (strMinuten.length() == 1) {
            sbUhrzeit.append("0");
        }
        sbUhrzeit.append(strMinuten);
        
        return sbUhrzeit.toString();
        
    }
}

Verwandte Seiten

open book Regeln (serverseitig)


Grundlagen.

Öffnen →

Zuweisung

Klassen des Typs "Kommunikation" können nur Businessobjekte zugewiesen werden. Nach der Verknüpfung erscheint die Klasse nach Auswahl des Businessobjekts und des Typs im Zuweisungsfenster und bietet folgende weitere Einstellungsmöglichkeiten:

  • Ausführen bei einem bestimmten Status
  • Ausführen bei einer bestimmten Aktion

Image Removed

Mit dem Symbol des Mülleimers kann die Zuweisung der Klasse zum Businessobjekt gelöscht werden. Wichtig ist, dass damit nur die Zuweisung gelöscht wird, nicht die Regel selbst. 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 "Kommunikation" veranschaulicht.

Probleme und Lösungen

Support und Informationen zur Problembehandlung finden Sie hier.