Einladung per E-Mail versenden

Django, Flask, Bottle, WSGI, CGI…
Antworten
Alex_winf01
User
Beiträge: 28
Registriert: Samstag 5. Februar 2005, 19:35

Hallo,

ich habe folgendes "Problem":

Ich habe einen Kalender, der beliebig viele Termine beinhalten kann und zu jedem Termin können beliebig viele Teilnehmer definiert werden.

Das mit dem Kalender und den Terminen funktioniert wunderbar. Auch kann zu jedem Termin auch Teilnehmer definiert werden. Nun möchte ich jedem Teilnehmer eine E-Mail versenden, sobald sein state auf pendig gesetzt ist. Hierfür habe ich einen eigenen Workflow definiert.

Nun gibt es bei mir folgende Konstelation:

Datei Termin.py

Code: Alles auswählen

schema = BaseSchema+Schema((
...
LinesField('teilnehmer',
               searchable=True,
               multiValued = True,
               vocabulary = '_voc_teilnehmer',
               widget = MultiSelectionWidget(label="Teilnehmer"),
               ),),)

class Termin (BaseFolder):
...
def setTeilnehmer (self, value, **kwargs):
      field = self.getField('teilnehmer')
      field.set(self, value, **kwargs)
      neu_tn = self.getTeilnehmer()
      cur_tn = self.objectIds(['Teilnehmer'])
      for tn in cur_tn:
           self.invokeFaktory('Teilnehmer', tn)
           tn_obj = gestattr(self, tn)
           # bearbeiten
      for tn in cur_tn:
           if tn not in neu_tn:
              self.manage_delObjects(tn)

def _voc_teilnehmer (self):
     members = self.portal_membership.listMembers()
     result = []
     for members in members:
          fullname = members.getProperty('fullname')
          id = members.getProperty('id')
          results.append ([id, fullname])
memberstuple = tuple (results)
return DisplayList(memberstuple)
Die Datei Teilnehmer.py enthält nur folgenden Code:

Code: Alles auswählen

schema = BaseSchema + Schema((
    StringField('erinnerung',
                    searchable = True,
                    vocabulary = ERINNERUNG,
                    widget = SelectionWidget(),
                    ),
                ),)
Nun wollte ich folgenden Code in die Klasse Termin.py einfügen

Code: Alles auswählen

mship = context.portal_membership
mhost = context.MailHost
workflow = context.portal_workflow

# the message format, %s will be filled in from data
message = """
From: email@email.com
To : %s
Subject: Einladung


%s

URL: %s
"""
for user in mship.listMembers():
     if "pending" in workflow.getStatus():
         if user.email:
            msg = message % (
                   user.email
                   )
            mhost.send(msg)
Die Funktion sieht dann wie folgt aus:

Code: Alles auswählen

def _voc_teilnehmer (self):
     members = self.portal_membership.listMembers()
     result = []
     for members in members:
          fullname = members.getProperty('fullname')
          id = members.getProperty('id')
          results.append ([id, fullname])
          if "pending" if "pending" in workflow.getStatus():
          if user.email:
            msg = message % (
                   user.email
                   )
            mhost.send(msg)
memberstuple = tuple (results)
return DisplayList(memberstuple)
1. Frage: Leider funktioniert das nicht. Ich bekomme noch nicht einmal eine Fehlermeldung. :(

Könnte mir jemand helfen?
Dass ich das Skript dann aus dem teilnehmer_workflow auch aufrufen muss ist mir bewusst und ist auch eingetragen.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Alex_winf01 hat geschrieben: Nun möchte ich jedem Teilnehmer eine E-Mail versenden, sobald sein state auf pendig gesetzt ist. Hierfür habe ich einen eigenen Workflow definiert.
Hi!

Möchtest du wirklich jedem Benutzer ein Email schicken, oder nur dem, der den Termin erstellt hat, oder nur den Reviewern? Weiters geht aus deinem Code nicht schlüssig hervor, von welchem Objekt du den Workflow-Status abfragst.

Den Status eines Objektes erfährst du so:

Code: Alles auswählen

portal_workflow.getInfoFor(obj, "review_state")
Hier ein paar nützliche Links zum Thema Workflow und Email bei Statusänderung verschicken:
http://docs.neuroinf.de/PloneBook/ch8.r ... ifications
http://plone-book.agmweb.ca/Chapters/8/

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Alex_winf01
User
Beiträge: 28
Registriert: Samstag 5. Februar 2005, 19:35

@ gerold

Danke zunächst für die Hinweise.

Zur weiteren Erklärung:
Wird ein Termin eingetragen, können Teilnehmer zugeordnet werden. Diese werden automatisch mithilfe von teilnehmer_workflow auf pending gesetzt. Wird der Termin gespeichert und sind die ausgewählten Teilnehmer pending, soll eine E-Mail an die Teilnehmer dieses Termines verschickt werden. Die E-Mail soll also vom Teilnehmerobjekt aus gehen.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Alex_winf01 hat geschrieben: [...]Wird der Termin gespeichert und sind die ausgewählten Teilnehmer pending, soll eine E-Mail an die Teilnehmer dieses Termines verschickt werden. Die E-Mail soll also vom Teilnehmerobjekt aus gehen.
Hi!
Leider muss ich passen. Das ist mir zu Archetypes-Lastig. Da kann ich nicht mithalten. Das Einzige was ich hierzu noch beitragen kann ist ein Hinweis auf plone_log zum Debuggen.

Spicke deinen Code mit Debug-Meldungen, die du mit context.plone_log("die Meldung") schreiben lässt und kontrolliere anhand dieser Meldungen deine Code. So kannst du recht schnell heraus bekommen, in welcher Schleife oder Verzweigung das Problem zu finden ist. Die Logmeldungen findest du dann in der Datei log/event.log im Zope-Ordner.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Alex_winf01
User
Beiträge: 28
Registriert: Samstag 5. Februar 2005, 19:35

@ gerold

Ich habe das Problem jetzt anders gelöst. Vielen lieben Dank trotzdem für Deine Hilfsbereitschaft. In diesem Forum bekommt man jederzeit als Neuling Hilfe. Ich werde Python und diesem Forum treu bleiben und weiter lernen.
Antworten