Home › Forum › Nuclos Entwicklung › Makros und Regeln › Email versand an einen Bestimmen User
- Dieses Thema hat 14 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 8 Jahren, 10 Monaten von
Franz Holzer.
-
AutorBeiträge
-
28 Januar 2015 um 23:03 Uhr #8169
Franz Holzer
TeilnehmerAufgabe
1. ich möchte die Email an jeden in einer bestimmen gruppe senden.
2. ich möchte die Email an einen User versenden welcher in einem BO (in einem Attribute mit Referenz auf „nuclos_user“) hinterlegt wurde.Was hab ich als Basis geschaft:
/** @name benachrichtigung User
* @change
*/package org.nuclet.businessentity;
import org.nuclos.api.rule.StateChangeFinalRule;
import org.nuclos.api.context.StateChangeContext;
import org.nuclos.api.annotation.Rule;
import org.nuclos.api.exception.BusinessException;
import org.nuclos.api.mail.NuclosMail;
import org.nuclos.api.provider.MailProvider;public class benachrichtigunguser implements StateChangeFinalRule {
public void changeStateFinal(StateChangeContext context) throws BusinessException {
NuclosMail newMail = new NuclosMail();newMail.setSubject("Abschluss eines Auftrags");
newMail.setFrom("test@test.com");
newMail.addRecipient("test1@test1.com");
newMail.setMessage("Der Auftrag wurde erfolgreich abgeschlossen.");MailProvider.send(newMail);
}
}Funktioniert auch tadellos.
Aber die 2 Aufgabe Stellungen bekomm ich nicht hin.freu mich über jede Hilfe.
Steh grad etwas daneben.Update:
ich gebe auf.
Ich verstehs nicht.Bekomm es nicht auf die Reihe.
Was ich geschafft habe ist es dem derzeitig angemeldetem User zu schicken 😉
User u = context.getUser();
String usermail = u.getEmail();
und halt die Zeile „newMail.addRecipient“ auf
newMail.addRecipient(usermail);
angepasst.29 Januar 2015 um 00:48 Uhr #8170Ramin Goettlich
Teilnehmerzu 2)
Wenn das BO mit der Referenz auf nuclos_user z.B. „MeinBO“ heisst und das Referenzfeld auf nuclos_user z.B. „benutzer“, dann:MeinBO bo = context.getBusinessObject(MeinBO.class);
nuclosuser u = QueryProvider.getById(nuclosuser.class, bo.getBenutzerId());
String usermail = u.getEmail();29 Januar 2015 um 00:55 Uhr #8171Ramin Goettlich
Teilnehmerzu 1) Wenn man die Gruppe (Objekt vom Typ nuclosrole) schon hat, z.B. in der Variable „r“, dann:
Query q = QueryProvider.create(nuclosroleuser.class);
q.where(nuclosroleuser.Role.eq(r.getId());
for (nuclosroleuser ru : QueryProvider.execute(q)) {
nuclosuser u = QueryProvider.getById(nuclosuser.class, ru.getUserId());
mail.addRecipient(u.getEmail());
}
29 Januar 2015 um 00:57 Uhr #8172Ramin Goettlich
Teilnehmernuclosuer, nuclosrole und nuclosuserrole befinden sich im Package:
import org.nuclos.businessentity.*;
29 Januar 2015 um 01:55 Uhr #8173Franz Holzer
Teilnehmervielen dank für die Ausführliche Hilfe !
das Wiki wirds freuen 😉aber ich hab noch das problem das er mein BO nicht erkennt.
Muss man das noch irgendwie separat importieren ?
wenn ja wie lautet der pfad ?habe dazu nichts im wiki gefunden.
(Das ist mein Hauptgrund warum ich es nicht geschafft habe)NOCHMALS: DANKE DANKE DANKE !
ich bin am verzweifeln hier und kämpfe seit 6 Stunden nur an dem Problem rum – weil ich mir denke „das kann doch nicht so kompliziert sein 😉Update:
ich hab das package org.nuclet.meinnuclet
hinzugefügt – zur info.alles ist diesem nuclet seit anfang an zugewiesen.
natürlich heisst meinBO bei mir anderst.
Update 29.01:
Ich komm nicht drauf warum er mein BO Spieler nicht kennt.
Hab div. imports versucht (aber eventuell die falschen)darüber hinaus steht im Wiki
http://wiki.nuclos.de/pages/viewpage.action?pageId=327852das man die Regel noch zu ordner soll unter „Verwendung“
Diesen Punkt Verwendung gibt es bei mir (nicht) mehr.Dachte es genügt das ich die regel im Statusmodell bereits hinterlegt habe.
Funktionieren tut die Regel selbst ja. (ohne den Querys von Spieler)29 Januar 2015 um 15:04 Uhr #8175Franz Holzer
TeilnehmerIch glaub ich habe den Fehler gefunden.
Und meiner Meihnung nach sollte das angepasst oder anders dokumentiert werden.Ich habe im Nuclet unter „Package“ den namen „meinnuclet“ vergeben.
nach längerem Fehler suchen ist mir aufgefallen das Nuclos hier aber nicht den präfix „org.nuclet.“ anfügt. (macht im nachhinein auch sinn – ist aber sehr verwirrend)
somit hies mein package wirklich nur „meinnuclet“
Ich denke das ist sehr verwirrend für alle Neulinge – da die API oder das WIKI dies nirgends aufzeigt – sonderen immer mit dem Beispiel „org.nuclet.“ arbeitet.
Eventuell würde es schon Helfen die Beschreibung des Feldes im Nuclet Management (mouse over) besser zu beschreiben.
Zb mit einem Beispiel „org.nuclet.“29 Januar 2015 um 15:12 Uhr #8176Franz Holzer
TeilnehmerGELÖST
29 Januar 2015 um 17:01 Uhr #8178Franz Holzer
Teilnehmer[quote=“nuclosian“ post=7151]zu 1) Wenn man die Gruppe (Objekt vom Typ nuclosrole) schon hat, z.B. in der Variable „r“, dann:
[/quote]
Query q = QueryProvider.create(nuclosroleuser.class);
q.where(nuclosroleuser.Role.eq(r.getId());
for (nuclosroleuser ru : QueryProvider.execute(q)) {
nuclosuser u = QueryProvider.getById(nuclosuser.class, ru.getUserId());
mail.addRecipient(u.getEmail());
}
die Zeile
„q.where(nuclosroleuser.Role.eq(r.getId());“mag der Compiler nicht – seh aber den Fehler nicht.
Edit:
Nach 20x drüberschaun erst bemerkt das eine ) am ende fehlt.
GELÖST.
Danke für die großartige Hilfe.
30 Januar 2015 um 00:46 Uhr #8180Franz Holzer
Teilnehmerhab noch eine frage auf die ich nicht komme.
Kann ich eine Gruppe auch „hardcoded“ eintragen ?oder muss ich diese auch iwie über den QueryProvider mit einem equal auslesen ?
Ziel ist eben das es immer an eine bestimmte Gruppe (oder auch person) geschickt wird.
1 Februar 2015 um 15:00 Uhr #8187Franz Holzer
Teilnehmerbekomm es leider nicht hin.
Muss doch aber möglich sein oder ?also das ich in der Regel schreibe wenn gruppen name ist „test“ in nuclosroleuser … und es eben aus keinem Feld direkt auslesen.
1 Februar 2015 um 17:30 Uhr #8190Ramin Goettlich
TeilnehmerIch bin nicht sicher, ob ich die Frage richtig verstehe, aber für die Benutzergruppen werden in der API Objekte generiert, siehe Screenshot. Ganz allgemein gilt, dass ein Blick in das /data/codegenerator-Verzeichnis oftmals hilfreich ist, auch um ggf. die genauen getter- und setter-Namen in Businessobjekten herauszufinden, wenn man sich nicht sicher ist (und nicht das Eclipse-Plugin nutzt).
Was genau ist das Problem? Mit obigem Beispielcode lässt sich doch der Versand an alle Mitglieder einer Gruppe vornehmen. Man kann jedoch die Gruppe nicht direkt als Emailempfänger irgendwo eintragen, man muss schon durch die Mitglieder der Gruppe iterieren.
Attachments:1 Februar 2015 um 18:50 Uhr #8193Franz Holzer
TeilnehmerDas Beispiel funktioniert wunderbar.
Es ging mir nur darum das ich noch ein anderes Szenario habe wo ich fix an ein Bestimmte Gruppe benachrichtigen würde.Sprich die Gruppe nicht aus einen Attribut (referenz) auslese sondern eben fix (hardcoded) in der Regel haben möchte.
Aufjedenfall danke für deine Hilfe!
5 Februar 2015 um 23:36 Uhr #8214Franz Holzer
Teilnehmerum es nochmal genauer zu erklären, ich habe mir folgendes vorgestellt:
nuclosrole r = QueryProvider.getById(nuclosrole.class, bo.getZustaendigegruppeId());
if (r != null) {
Query q = QueryProvider.create(nuclosroleuser.class);
q.where(nuclosroleuser.Role.eq(r.getId()));for (nuclosroleuser ru : QueryProvider.execute(q)) {
nuclosuser u1 = QueryProvider.getById(nuclosuser.class, ru.getUserId());
newMail.addRecipient(u1.getEmail());
}
Sprich ich habe nun
nuclosrole r = QueryProvider.getById(nuclosrole.class, bo.getZustaendigegruppeId());möchte aber:
nuclosrole r = QueryProvider.getById(nuclosrole.class, „Gruppenname“);
verwenden.Ich habe schon verschiedene wege probiert.
zb
q.where(nuclosroleuser.Role.eq(„Gruppenname“));irgendwie fehlt mir was um hier weiterzukommen.
6 Februar 2015 um 18:40 Uhr #8226Franz Holzer
Teilnehmerweil ich gerade wieder drüber gestolpert bin,
Im Endeffekt fehlt mir eine ähnliche möglichkeit wie bei nuclosuser.class.
Da kann ich mir mit getName(); behilflich sein.Update:
Ich weiß nun das die ID meiner Gruppe „XhhiT5EVNhF6I7Tb0vZ3“ lautet. nur wie mir das weiterhilft hab ich noch nicht ganz intus.
6 Februar 2015 um 21:03 Uhr #8228Franz Holzer
TeilnehmerSo ich habe es nun so gelöst:
UID zid = UID.parseUID("XhhiT5EVNhF6I7Tb0vZ3");
q.where(nuclosroleuser.Role.eq(zid));
ob es einfacher auch geht – weiß ich nicht.
Bin über jeden Hinweis dankbar.Für mich funktioniert es erstmal so.
-
AutorBeiträge