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
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