Home Forum Nuclos Entwicklung Makros und Regeln Email versand an einen Bestimmen User

Ansicht von 15 Beiträgen - 1 bis 15 (von insgesamt 15)
  • Autor
    Beiträge
  • #8169
    Franz Holzer
    Teilnehmer

    Aufgabe

    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.

    #8170
    Ramin Goettlich
    Teilnehmer

    zu 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();

    #8171
    Ramin Goettlich
    Teilnehmer

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

    #8172
    Ramin Goettlich
    Teilnehmer

    nuclosuer, nuclosrole und nuclosuserrole befinden sich im Package:

    import org.nuclos.businessentity.*;

    #8173
    Franz Holzer
    Teilnehmer

    vielen 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=327852

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

    #8175
    Franz Holzer
    Teilnehmer

    Ich 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.“

    #8176
    Franz Holzer
    Teilnehmer

    GELÖST

    #8178
    Franz 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:

    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());
    }
    [/quote]

    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.

    #8180
    Franz Holzer
    Teilnehmer

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

    #8187
    Franz Holzer
    Teilnehmer

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

    #8190
    Ramin Goettlich
    Teilnehmer

    Ich 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:
    #8193
    Franz Holzer
    Teilnehmer

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

    #8214
    Franz Holzer
    Teilnehmer

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

    #8226
    Franz Holzer
    Teilnehmer

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

    #8228
    Franz Holzer
    Teilnehmer

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

Ansicht von 15 Beiträgen - 1 bis 15 (von insgesamt 15)