AW: Nutzen der COM-Schnittstelle von Zope aus

"Iffland Stefan" <[email protected]>
Newsgroups gmane.comp.web.zope.german
Message-ID <[email protected]>
Hallo Patrick,

den Holzhammer habe ich noch nicht verwendet. Würde aber - denke ich - auch nicht viel weiter helfen, weil es nur
das Problem aus der Python-Konsole behebt. Dass das Skript dort nur läuft wenn Outlook bereits läuft, kann ich
verschmerzen. Wichtig ist, dass das Skript von Zope aus gestartet werden kann und auch durchläuft. Deshalb nun
auch speziell hier in der Mailing-Liste.

Im Eclipse wird beispielsweise CoInitialize() bzw. CoUninitialize() als Fehler markiert. Vermutlich liegt es daran,
dass in der Konsole nur bei laufendem Outlook alles durchläuft. In Zope brauche ich diese Aufrufe aber, weil dieser
ja in mehreren Threads läuft und ggf. mehrere Aufrufe parallel bearbeitet werden müssen. Ohne diese Aufrufe kann
ab dem zweiten Aufruf dieses Skripts keine Instanz mehr initialisiert werden.

Um mal weiter Licht ins Dunkel zu bringen: Das Python-Skript hat in der Konsole auch erst funktioniert nachdem ich
in PythonWin die COM-Bibliotheken mit Hilfe vom Makepy-Utility erzeugt habe. Vorher scheiterte das Skript auch an
Outlook-spezifischen Attributen oder Methoden. Daher habe ich immernoch den Verdacht, dass Zope - obwohl es seit
Version 2.12 scheinbar eher als Python-Modul zu betrachten ist - diese Bibliotheken nicht kennt. Muss man die
generierten Klassen / Python-Dateien im Zope noch einmal separat verfügbar machen?

Viele Grüße
Stefan

Stefan Iffland

Telefon +49 (7243) 570-1681 
E-Mail [email protected]

-----Ursprüngliche Nachricht-----
Von: [email protected] [mailto:[email protected]] Im Auftrag von Patrick Gerken
Gesendet: Montag, 23. November 2009 10:45
An: Deutschsprachige Zope-Benutzer-Liste
Betreff: Re: [dzug-zope] Nutzen der COM-Schnittstelle von Zope aus

Hi,

auf dem Forum hast du wahrscheinlich keine Antwort bekommen weil die Leser dachten es waere eine Zope Frage und damit kennen sich nicht so viele aus.

Hier stellst du nun eine win32 Funktionalitaeten und riskierst wieder keine Antworten zu bekommen weil hier vielleicht nicht so viele die win32 Schnittstelle kennen.

Ich wuerde dir gerne weiterhelfen, weiss aber die Antwort nicht. Falls hier niemand anderes eine Antwort weiss, stell die Frage, wie man Outlook aus python starten kann, nochmal mit passendem subject im Forum. Oder falls du keine Angst vor Englisch hast, probier mal
stackoverflow:
http://stackoverflow.com/search?q=outlook+python


MfG

      Patrick

p.s.: Hast du vielleicht mal die Holzhammer Methode probiert, vorher einfach mittels os.system() Outlook zu starten?


2009/11/23 Iffland Stefan <[email protected]>:
> Hallo zusammen,
>
>
>
> ich habe mein Problem unter
> http://www.python-forum.de/topic-20807.html?sid=495671c5e331f0c2b566b6
> 81e04b0959
> schon einmal
>
> etwas detailiert gepostet. (mit Code-Beispiel)
>
>
>
> Meine erste Nachricht an die Liste. Hoffe, dass ich hier ein paar 
> Anregungen bekomme.
>
>
>
> Also es geht um eine etwas veraltete webbasierte 
> Unternehmensanwendung, die mit Hilfe von Zope realisiert wurde. Die 
> Anwendung
>
> wurde mittlerweile von Zope 2.4.2 auf Zope 2.11.4 migriert und läuft wieder.
> Verwendet werden neben den Standard-Produkten
>
> NFGnav, ZPyODBCDA und experimentell COMObject. Die Anwendung wird zum 
> Erfassen von Abwesenheiten (Urlaub, Gleitzeit, etc.)
>
> und einer ggf. notwendigen Genehmigung durch Vorgesetzte verwendet. In 
> der Hauptsache bildet die Anwendung also eine
>
> An-/Abwesenheitsübersicht ab. Die Mitarbeiterdatensätze und 
> Abwesenheitsdatensätze werden in einer SQL-Server DB gespeichert.
>
>
>
> Da sich der Python-Kern der Installerversion von Zope 2.11.4 schlecht 
> erweitern lässt und zum Beispiel PythonWin nicht nutzbar ist um
>
> die COM-Schnittstellen zu generieren, bin ich nach langen Versuchen 
> nun bei Zope 2.12.1 angekommen. Dieser läuft zunächst nur auf
>
> meinem Entwicklungsrechner (Windows XP), aber auch dort läuft die 
> Applikation soweit. Was ich nun abbilden muss: Wenn ein Mitarbeiter
>
> im Portal eine Abwesenheit erfasst, soll an seine Kollegen statt einer 
> Email-Benachrichtigung eine Besprechungsanfrage für Outlook
>
> versendet werden. Das möchte ich über die COM-Schnittstelle realisieren.
> Zope wird dazu als Windows-Dienst eingerichtet und mit
>
> einem bestimmten Benutzer gestartet. Auf diese Weise wird 
> sichergestellt, dass Outlook auch mit den Einstellungen dieses 
> Benutzers
>
> gestartet wird. Der Dummy-User hat also irgendwann einen Kalender mit 
> sämtlichen Abwesenheiten aller MA und man könnte so auch
>
> wieder über COM existierende Einträge überarbeiten und löschen. Soweit 
> die Theorie. ;-)
>
>
>
> Von der Python-Konsole aus funktioniert folgendes Skript ohne 
> Probleme, allerdings nur, wenn Outlook bereits geöffnet ist.
>
>
>
> def besprechung(subject, start_year, start_month, start_day, 
> start_hour="0", start_minute="0", debug=False):
>
>     import win32com.client
>
>     import pythoncom
>
>
>
>     pythoncom.CoInitialize()
>
>     o = win32com.client.gencache.EnsureDispatch("Outlook.Application")
>
>
>
>     appointment = 
> o.CreateItem(win32com.client.constants.olAppointmentItem)
>
>     try:
>
>         appointment.Start = start_year + "-" + start_month + "-" + 
> start_day
> + " " + start_hour + ":" + start_minute
>
>         appointment.AllDayEvent = True
>
>         appointment.MeetingStatus = 
> win32com.client.constants.olMeeting
>
>         appointment.Subject = "Urlaubsportal: " + subject
>
>         appointment.ReminderSet = False
>
>         appointment.ResponseRequested = False
>
>         myRequiredAttendee = appointment.Recipients.Add("USERXY")
>
>         myRequiredAttendee.Type = win32com.client.constants.olRequired 
> # 1 = erforderlich
>
>         #myOptionalAttendee = appointment.Recipients.Add("Bachmann 
> Eric")
>
>         #myOptionalAttendee.Type = 2 # 2 = optional
>
>         appointment.Send()
>
>         appointment.Save()
>
>         print "Keine Fehler"
>
>     finally:
>
>         appId = appointment.EntryID
>
>         del o
>
>         try:
>
>             pythoncom.CoUninitialize()
>
>         except:
>
>             pass
>
>         if debug:
>
>             return "Objekt geloescht! EntryID:" + appId
>
>
>
>     return appId
>
>
>
>
>
> print besprechung(subject="Max Muster hat frei", start_year="2009", 
> start_month="11", start_day="12", debug=True)
>
>
>
> Python scheint also nicht in der Lage zu sein, eine Outlook-Instanz zu 
> starten. Wenn das Skript auf einem Server laufen soll, kann ich jedoch 
> nicht sicherstellen,
>
> dass Outlook immer schon geöffnet ist. Andererseits, wenn ich das 
> Skript – leicht modifiziert – in Zope als External Method einbinde und 
> starte, wenn Outlook
>
> läuft, dann bekomme ich eine Windows-Fehlermeldung (Fehler beim
> Speicherzugriff) und darf Zope neu starten.
>
>
>
> Rufe ich die externe Methode auf, wenn Outlook geschlossen ist, 
> scheitert Zope beim Hinzufügen der Empfänger (Zeile 22). Nun bin ich 
> für jeden Hinweis
>
> dankbar, was ich beachten muss und wo der Fehler liegen könnte. Ich 
> bin neu in Python und entsprechend dürftig ist mein Wissen teils noch.
>
>
>
> Vielen Dank und Viele Grüße
>
> Stefan
>
>
>
> Stefan Iffland
>
> Telefon +49 (7243) 570-1681
> E-Mail [email protected]
>
>
>
>
> _______________________________________________
> zope mailing list
> [email protected]
> https://mail.dzug.org/mailman/listinfo/zope
>
>



_______________________________________________
zope mailing list
[email protected]
https://mail.dzug.org/mailman/listinfo/zope
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.