Autor Thema: Prüfen in LotusScript ob mail gesendet ist  (Gelesen 4410 mal)

Offline sja

  • Senior Mitglied
  • ****
  • Beiträge: 328
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Prüfen in LotusScript ob mail gesendet ist
« am: 18.06.13 - 10:33:28 »
Hallo Zusammen,

eine Frage:
In Formula Language kann man mit  @if(@MailSend.... ) prüfen ob mail gesendet ist.
Wie schreibt man das richtig in LotusScript?
Mit der Suche habe ich nichts gefunden, ewtl. kann ich nicht, maine Frage richtig für die Suche zu formulieren.

Vielen dank im Voraus

Sofia
« Letzte Änderung: 19.06.13 - 16:29:49 von sja »

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Prüfen in LotusScript ob mail gesendet ist
« Antwort #1 am: 18.06.13 - 10:38:30 »
Hallo,

Versendest Du das Dokument auch ueber Script und speicherst es nach dem Senden bzw. beim Senden?


Andreas

Offline sja

  • Senior Mitglied
  • ****
  • Beiträge: 328
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Re: Prüfen in LotusScript ob mail gesendet ist
« Antwort #2 am: 18.06.13 - 11:50:51 »
es ist so:
in einer DB in dem geöffnetem Dokument A gibt es ein Button, beim Klick auf den Batton, wird eine neue Mail in der Mail-DB aktuelles User geöffnet mit Übernahme von bestimmten Daten aus dem Dokument A (programmiert in LotusScript), dabei bleibt das Dokument A auch geöffnet. Wenn die Mail gesendet wird, dann in der Dokument A in dem Feld "history" sollte aktuelles Datum, aktueller user usw. gespeichert werden.
« Letzte Änderung: 18.06.13 - 12:13:56 von sja »

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Prüfen in LotusScript ob mail gesendet ist
« Antwort #3 am: 18.06.13 - 12:29:20 »
Da hast Du Dir aber was ziemlich kompliziertes vorgenommen...

Entweder Du musst die Mailschablone anpassen, dass Sie in einem entsprechenden Event (QuerySend o.ä.) schaut, ob es ein Dokument gibt, aus dem heraus das aktuelle Memo erstellt wurde, oder aber Du musst mit Remote Event Binding arbeiten... Das ist auf jeden Fall die hohe Kunst der Script- Programmierung (die sicherlich nicht viele schon ausprobiert haben, weil die Anwendungsfälle zu selten sind), aber wenn Du da ran willst, dann gib Bescheid...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline sja

  • Senior Mitglied
  • ****
  • Beiträge: 328
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Re: Prüfen in LotusScript ob mail gesendet ist
« Antwort #4 am: 18.06.13 - 13:12:42 »
Also, in einfache Version sieht der Script so aus:

Dim ws As NotesUIWorkspace   
Dim s As NotesSession
Dim db As NotesDatabase
Dim dbMail As NotesDatabase
Dim uidb As NotesDatabase
Dim uiDocA As NotesUIDocument
Dim docA As NotesDocument
Dim uiDocM As NotesUIDocument
Dim docM As NotesDocument

Dim tmpSubject As String
Dim rtitemA As NotesRichTextItem
Dim object As NotesEmbeddedObject
Dim body As NotesRichTextItem

'Kaufmännischer Ansprechpartner
Dim tmpAPK_EMail As String   'Email
Dim tmpAPK_Salutation As String   'Anrede
Dim tmpAPK_LastName As String   'Nachname
Dim tmpAnrede As String
Dim tmpText As String

Dim tmpBody As Variant
Dim tmpSAPNr As String

Dim user As String       'aktueller User
Dim cName As String
Dim tmpDatum As String      'aktuelles Datum
Dim tmpZeit As String      'akeuelle Zeit (hh:mm)
Dim tmpDatumZeit As String   'aktuelles Datum undZeit
Dim tmpDatumZeitName As String
Dim tmpTextHistory As String
Dim tmpHistory As String

Sub Initialize
   
   Set s = New NotesSession
   Set ws = New NotesUIWorkspace
   Set uidb = s.CurrentDatabase   'aktuelle Anwendung "Workflow Angebot"
   Set uiDocA = ws.CurrentDocument   'aktuell geöffnete Anbebot-Dokument
   uiDocA.Editmode = True
   Call uiDocA.Refresh
   Call uiDocA.Save
   Set docA = uiDocA.Document

   user = s.UserName
   cName = s.CommonUserName   
   tmpDatum=  Format(Now, "Short Date")      'Aktuelles Datum
   tmpZeit = Format(Now, "Short Time")         'Aktuelle Zeit
   tmpDatumZeit = tmpDatum & " " & tmpZeit    'Aktuelle TT.MM.JJJJ hh:mm   
   tmpDatumZeitName = tmpDatum & " " & tmpZeit & "  " & cName & Chr(13)   
   tmpTextHistory = tmpDatumZeit & ": Mail-Angebot versendet von " & cName   
   tmpHistory = tmpTextHistory  & Chr(13) & uiDocA.FieldGetText("history")      
   docA.history = tmpHistory
      
   tmpAPK_EMail = uiDocA.FieldGetText("APK_EMail")
   tmpAPK_Salutation = uiDocA.FieldGetText("APK_Salutation")
   tmpAPK_LastName = uiDocA.FieldGetText("APK_LastName")
   tmpSAPNr = uiDocA.FieldGetText("SAPNr")
   
   If tmpAPK_Salutation = "Frau" Then
      tmpAnrede = "Sehr geehrte Frau " & tmpAPK_LastName & ","
   ElseIf tmpAPK_Salutation = "Herr" Then
      tmpAnrede = "Sehr geehrter Herr " & tmpAPK_LastName & ","
   End If   
   tmpText  = "anbei finden Sie unser Angebot " & tmpSAPNr

   tmpSubject = "Angebot " & tmpSAPNr
   
   If docA.Hasembedded Then
         Set rtitemA  = docA.GetFirstItem("Kunde_Angebot")   
   End If   
   
   Call Erstellen()
   
End Sub

Function Erstellen()
   Dim mailDb As NotesDatabase
   Dim docM As NotesDocument
   Dim uidoc As NotesUIDocument
   Dim msgStr As String
   
   Set mailDb = New NotesDatabase( "", "" )
   Call mailDb.OpenMail

   Set docM = New NotesDocument( mailDb )
   docM.Form = "Memo"
   docM.Subject = tmpSubject
   docM.EnterSendTo = tmpAPK_EMail
   
      If Not rtitemA Is Nothing Then
         If (rtitemA.Type = RICHTEXT ) Then
            If Not IsEmpty(rtitemA.EmbeddedObjects) Then
               ForAll object In rtitemA.EmbeddedObjects
                  If ( object.Type = EMBED_ATTACHMENT ) Then
                     Call rtitemA.CopyItemToDocument( docM, "Body" )
                     Exit ForAll
                  End If
               End ForAll
            End If         
         End If   
      End If
   
   If False Then
      Call body.AppendText( tmpAnrede )
      Call body.AddNewLine( 2 )
      Call body.AppendText( tmpText )
   End If

   Set uidoc = ws.Editdocument(True, docM)
   Call uidoc.GotoField( "Body" )
   msgStr = tmpAnrede & Chr(10) & Chr(10)
   msgStr = msgStr & tmpText & Chr(10) & Chr(10)
   Call uidoc.InsertText( msgStr )      
   
   Call docA.Save(True, True)

End Function


In diesem Version wird Information in dem Feld „history“ auf jedem Fall gespeichert, unabhängig davon hat der User Mail versendet oder nicht.
Ich brauche, dass den Befehl
               Call docA.Save(True, True)
wird nur dann ausgeführt, wenn der User Mail versendet hat. In Formula Language kann man mit  @if(@MailSend.... ) das machen. Gibt es eine Analog auch in LotusScript?
irgenwas wie   if uidoc.send….       ???


Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Prüfen in LotusScript ob mail gesendet ist
« Antwort #5 am: 18.06.13 - 13:21:14 »
Und genau dass hat Dir Tode (Torsten) doch geschrieben.

Nein.
Es sei denn, dass Du Dich mit den bereits erwaehnten Moeglichkeiten auseinandersetzt.

NotesDocument.Send bzw. NotesUIDocument.Send haben keinen Rueckgabewert a la
TRUE=ich habe die Mail erfolgreich versendet oder FALSE=es ist zu einem Fehler gekommen.

Und bei @If(@MailSend(...)) hast Du genaugenommen auch nicht die Gewissheit, dass die Mail
erfolgreich versendet wurde. Da hast nur die die Aussage darueber, dass es bei der Funktion @MailSend
nicht zu einem Fehler gekommen ist.



Andreas

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Prüfen in LotusScript ob mail gesendet ist
« Antwort #6 am: 18.06.13 - 13:30:03 »
Wie Tode schon geschrieben hat, geht das nicht so einfach, wie Du das denkst. Du hast m.E. vier Möglichkeiten (die ersten beiden davon hat Tode bereits erwähnt)

1. Remote-Binding (mag funktionieren, habe ich selbst noch nie benutzt)
2. Ändern der Mailschablone (würde ich persönlich nie tun, schon garnicht, für solch einen Fall)
3. Du verschickst die Mail direkt im Script ohne Bearbeitungsmöglichkeit durch den User (falls das die Anforderung hergibt, kann ich nicht beurteilen)
4. Du erstellst die Mail nicht in der Maildatenbank des Benutzers, sondern z.B. in der Datenbank

Option 4 hat mehrere Vorteile

1. Die Dokumentation über versendete Mails ist in einer zentralen Datenbank und nicht zerfleddert in den Maildatenbanken der User
2. Bei der Gestaltung der eigenen Mailmaske bist Du frei und kannst solche Anforderungen einfach einbauen, z.B. so:

UniversalID des aufrufenden Dokuments in das Maildokument übernehmen
aufrufendes Dokument schließen
Beim Senden der Mail aufrufendes Dokument über UniversalID suchen und Versand protokollieren
bei Bedarf aufrufendes Dokument erneut öffnen (im Queryclose, dann passiert es auch, wenn nicht gesendet wurde).

Die ganze Aktion läuft dann auch, wenn das aufrufenden Dokument schon längst geschlossen wurde, z.B. beim Versand erst am nächsten Tag. Remote-Binding wird da sicherlich versagen (spätestens, wenn der Client zwischen Erstellen und Senden der Mail geschlossen wurde).

Offline ghostmw

  • Aktives Mitglied
  • ***
  • Beiträge: 201
  • Geschlecht: Männlich
    • BELOS - Raum+Ressourcenmanagement unter Lotus Notes
Re: Prüfen in LotusScript ob mail gesendet ist
« Antwort #7 am: 18.06.13 - 13:34:19 »
autsch ... da hast du ja was vor.

Mit dem Event-Handling wirst du vermutlich nicht glücklich, da due solange warten müsstest, bis das Mail versendet worden ist.
Solange muss du in deiner Routine bleiben und Schleifchen drehen, wie man dann gleichzeitig das Mail fertig machen soll, frag ich mich dann gerade.


Vielleicht geht auch folgender Ansatz ... du erstellst die Mail und gibts sie im Frontend dem User zur Verfügung ... fügst aber als BCC deine Datenbank an (die natürlich als Mail-In Datenbank konfiguriert werden muss).

Somit bekommst du mit, sobald die Mail versendet wurde. Den Rest (Historie schreiben), kannst du per Agent machen, der nach Eingang neuer Mail läuft oder beim Speichern von Dokument A, wenn du es speicherst oder schließt.

Das - denke ich - ist eher noch im Bereich des Möglichen.
Grüße
Marco Weller
Lotus Domino / Lotus Notes seit 1996 (ab 4.5x)

Offline sja

  • Senior Mitglied
  • ****
  • Beiträge: 328
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Re: Prüfen in LotusScript ob mail gesendet ist
« Antwort #8 am: 18.06.13 - 14:57:57 »
Herzlich danke ich alle für so schnelle und reiche Information/Hilfe. Dabei habe ich vieles gelernt und hoffe noch einige andere auch :-). Für mich, denke ich, die beste Lösung wäre die 4. Variant von Peter:
die Mail nicht in der Maildatenbank des Benutzers, sondern in der Anwendung-Datenbank erstellen und vom aktuellen Benutzer versenden lassen, aber hier entsteht weiteres Problem (bzw. Aufgabe): die Mail soll mit der Signatur aktuelles Users versendet werden aber unsere Firma hat sehr komplizierte Signatur.

Sofia

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Prüfen in LotusScript ob mail gesendet ist
« Antwort #9 am: 18.06.13 - 16:05:50 »
Ist die Signatur beim Erstellen einer Mail in der Maildatenbank des Benutzers sofort korrekt dargestellt?

Dann könntest Du mittels Script dort ein Dokument erstellen, in das Body-Feld im Frontend gehen, alles markieren und in die Zwischenablage kopieren.

Eine andere Alternative wäre, die Mail in der Datenbank zu erstellen, vom Benutzer editieren zu lassen, und beim Senden eine Mail mit dem fertigen Text in der persönlichen Maildatenbank zu erstellen und direkt per Script zu versenden. Hängt davon ab, wo und wann die Signatur gerechnet wird.

Noch eine Möglichkeit wäre, die Signaturerstellung nachzubauen. Falls die fertige Signatur irgendwo in der Maildatenbank abgelegt ist, sollte das kein allzugroßes Problem sein. "Komplizierte Signatur" klingt allerdings nach etwas anderem ...

EDIT:

Oder vielleicht doch Marcos Ansatz mit dem bcc, finde ich auch nicht schlecht. Einziger Haken ist, dass der Benutzer dort manuell eingreifen und den Blindkopieempfänger löschen könnte.

Offline sja

  • Senior Mitglied
  • ****
  • Beiträge: 328
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Re: Prüfen in LotusScript ob mail gesendet ist
« Antwort #10 am: 19.06.13 - 16:29:26 »

Herzlichen Dank für die Vorschläge, alle finde ich interessant
1.   Signatur
Mail-Datenbanken sind nicht meinen Bereich und ich habe da überhaupt keinen Einfluss.
Signatur wird beim Absenden berechnet, denke ich,  und zwar anderes für interne und externe Mailing. Für externe Mail  kommen auch verschiedene Bild-Links usw. Zu dieser Programmierung bin ich nicht zu gelassen und ich weiß nicht was da läuft. Also mit Signatur kann ich nicht manipulieren.
2.   BCC auch keine schlechte Idee, aber die Anwendung ist bei und für jede Geschäftsstelle separate Datenbank und unsere Administratoren werden alles anderes als begeistern, so viele Datenbanken als Mail-In zu konfigurieren und betreuen.
3.   Die geeignete finde ich der Vorschlag von Peter:
... die Mail in der Datenbank zu erstellen, vom Benutzer editieren zu lassen, und beim Senden eine Mail mit dem fertigen Text in der persönlichen Maildatenbank zu erstellen und direkt per Script zu versenden. 

Für mich geeignete Lösun:
...
   Call uidoc.Send()
   Call uidoc.Close(True)
   
   tmpTextHistory = tmpDatumZeit & ": Angebot versendet aus der Mail-Datenbank von " & cName   & " an " & tmpAPK_EMail
   tmpHistory = tmpTextHistory  & Chr(13) & uiDocA.FieldGetText("history")      
   'tmpHistory = tmpTextHistory  & Chr(13) & docA.history(0)
   docA.history = tmpHistory
   Dim textPrompt As String
   textPrompt = "Angebot versendet aus der Mail-Datenbank von " & cName & " an " & tmpAPK_EMail
   
   call ws.Prompt(PROMPT_OK, "Angebot", textPrompt)
   Call docA.Save(True, True)

End Function

Die Mail wir auf jedem Fall versendet und in der Mail-Datenbank des Versenders gespeichert. In der history wird es bemerkt. Selbst Mail brauchen wir nicht in der Anwendung. Der Angebot ist sowieso in der Dokument A als Anhang, in history haben wir: wann, von wem und an wen wurde Angebot gesendet. Wenn es erwünscht wird,  nicht nur Standart-Text, sondern zusätzliche Eingaben und zusätzliche Empfänger, dann kann ich einfach in der Maske von Dokument A noch zwei editierbaren Felder integrieren, sagen wir Text-Angebot und Empfänger-Angebot und in Script werden Werte aus diesen Felder übernommen.

Noch mal herzlichen Dank an alle! Ihr habt mir sehr geholfen!

Liebe Grüße
Sofia


 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz