Versionen im Vergleich

Schlüssel

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

Das folgende Beispiel soll den Aufbau einer Regel vom Typ "Kommunikation" und die Weiterverarbeitung der übergebenen Inhalte veranschaulichen.

Fachlicher Hintergrund

Legt ein Kommunikationsprotokoll bei eingehendem Telefonanruf an.

Quellcode

Codeblock
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();
        
    }
}