Seitenhistorie
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();
}
} |
Überblick
Inhalte