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)
Code: Alles auswählen
schema = BaseSchema + Schema((
StringField('erinnerung',
searchable = True,
vocabulary = ERINNERUNG,
widget = SelectionWidget(),
),
),)
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)
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)

Könnte mir jemand helfen?
Dass ich das Skript dann aus dem teilnehmer_workflow auch aufrufen muss ist mir bewusst und ist auch eingetragen.