Autor Thema: Memo aus Excel senden - Text teilweise vorgeben - Bearbeitung ermöglichen  (Gelesen 19304 mal)

Offline thorte

  • Frischling
  • *
  • Beiträge: 2
Excel 2000
Lotus Notes 6.5
Late Binding - Early Binding möglich aber bisher nicht genutzt

Liebe Notes Gemeinde,

ich hoffe erst einmal, dass ich hier richtig bin.

In Ermangelung einer guten Lösung bei uns im Hause, habe ich mir selbst zu einem Thema ein Excel Tool gebastelt. Dabei befinden sich Datensätze in einer Listbox aufgelistet. 
Per Tastendruck wird dann ein Memo an einen email Empfänger gerichtet (der Adressat ergibt sich aus dem gerade gewählten Datensatz) - Das klappt auch super!



ZIEL: Ein Memo an einen Empfänger senden, kontextbezogen einen Text einfügen zB "Sehr geehrte Damen und Herren "  + Zeilenumbruch + "Sie müssen bei folgenden Betrieben: " + Zeilenumbruch + Textvariable1 + Zeileneumbruch + Textvariable2 + "noch Ermittlungen führen" UND anschließend das Memo zur weiteren Bearbeitung öffnen / bereit stellen, Versand anschließend manuell.

Die Textvariablen bzw String werden in Excel zusammengestellt. Das habe ich auch hinbekommen.

ABER ich schaffe es leider nur ENTWEDER das Memo zur Bearbeitung zu öffnen ODER Text zu übergeben. Sobald ich Text übergebe bekomme ich nur einen sofortigen Versand des Memo hin, ein Öffnen zur weiteren Bearbeitung ist mir nicht gelungen. IN dem beiliegenden Script wird das Memo zur weiteren Bearbeitung geöffnet, aber leider kein Text / String übergeben.

Es wäre von daher super, wenn Ihr eine Lösung wüßtet, wie man beides hinbekommt.


ZWEITES  ALTERNATIVES ZIEL: Wäre eine Möglichkeit eine Memovorlage zu nutzen. Wenn diese nicht vorhanden ist, ein Memo zu erstellen und wenn die Vorlage vorhanden ist, dann diese auch zu nutzen. Hat hierzu jemand eine Idee? Ich habe leider überhaupt keine Ahnung, wie man eine Vorlage ansprechen und mit dem Empänger Daten versorgen und anschl zur Bearbeitung öffnen könnte


Code
Public Sub SendNotesMail(Subject As String, Attachment As String, Recipient As String, bodyText As
String)
On Error Resume Next

Dim Maildb As Object
Dim UserName As String
Dim MailDBName As String
Dim MailDoc As Object
Dim Item2 As Object
Dim AttachME As Object
Dim session As Object
Dim EmbedObj As Object
Dim NotesUser As String
Dim Workspace As Variant
'UserName = Session2.UserName
Set session = CreateObject("Notes.NotesSession")
UserName = session.UserName
NotesUser = UserName
MailDBName = Left$(UserName, 1) & Right$(UserName, (Len(UserName) - InStr(1, UserName, " "))) & ".n
sf"
Set Maildb = session.GETDATABASE("", MailDBName)
If Maildb.IsOpen = True Then
Else
Maildb.OPENMAIL
End If
Set MailDoc = Maildb.CREATEDOCUMENT
MailDoc.Form = "Memo"
'MailDoc.replaceitemvalue("sendto", Recipient)
'Recipient = "Thorsten Wiedemann"
'Call Notesmail.ReplaceItemValue("sendto", Split(Recipient, ","))
MailDoc.sendto = Recipient
MailDoc.Subject = Subject
MailDoc.Body = Chr(2)
MailDoc.ADDNEWLINE1
MailDoc.ADDNEWLINE2
MailDoc.ADDNEWLINE3
'MailDoc.Body = bodyText
'MailDoc.CREATERICHTEXTITEM ("Body")
'With MailDoc
'.APPENDTEXT bodyText
'.ADDNEWLINE1
'End With
MailDoc.SaveMessageOnSend = True
If Attachment <> "" Then
mNotes - 3
Set AttachME = MailDoc.CREATERICHTEXTITEM("Attachment")
Set EmbedObj = AttachME.EMBEDOBJECT(1454, "", Attachment, "Attachment")
MailDoc.CREATERICHTEXTITEM ("Attachment")
End If
'MailDoc.PostedDate = Now()
'MailDoc.send 0, Recipient

Set Workspace = CreateObject("Notes.NotesUIWorkspace")
Call Workspace.EditDocument(True, MailDoc).GotoField("Body")
Set Maildb = Nothing
Set MailDoc = Nothing
Set session = Nothing
Set AttachME = Nothing
Set EmbedObj = Nothing
End Sub


Vielen Dank für jede Hilfe, jeden Hinweis, jeden Gedanken, jeden Link

Gruß aus Bonn

Thorsten

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
In diesem Bereich stimmt es auf jeden Fall nicht. Ignorieren wir mal die Kommentierungen, dann passiert hier folgendes

MailDoc.Body = Chr(2) -> Maildoc hat jetzt ein Textfeld Body mit Inhalt Chr (2) (was immer das auch sein soll)
MailDoc.ADDNEWLINE1 -> ist sinnfrei, NotesDocument hat m.E. keine Methode ADDNEWLINE1
MailDoc.ADDNEWLINE2 -> s.o.
MailDoc.ADDNEWLINE3 -> s.o.
'MailDoc.Body = bodyText -> Maildoc hat jetzt ein Textfeld Body mit Inhalt bodytext
'MailDoc.CREATERICHTEXTITEM ("Body") -> Maildoc hat jetzt ein RichtTextfeld Body ohne Inhalt, das Textfeld Body ist vermutlich weg

'With MailDoc
'.APPENDTEXT bodyText -> auch hier hängst Du Text und Zeilenumbruch an das Dokument, das gibt es nicht
'.ADDNEWLINE1
'End With

Dein  Script ist in VBA, LotusScript hat einen etwas anderen Dialekt, dort würde der Part etwa so aussehen:

Dim rtitem As NotesRichtextItem
Set rtitem = New NotesRichtextItem (MailDoc, "Body")
Call rtitem.AppendText (bodytext)
Call rtitem.AddNewLine (2)

Du willst evtl. auch einen Dateianhang anhängen, und das ganze soll eine Mail werden. Warum hängst Du die Datei dann an das RichtextItem "Attachment"? In einer Mail kommt der Inhalt immer in das RichtextItem Body.

Set AttachME = MailDoc.CREATERICHTEXTITEM("Attachment")
Set EmbedObj = AttachME.EMBEDOBJECT(1454, "", Attachment, "Attachment")
MailDoc.CREATERICHTEXTITEM ("Attachment") -> wieso hier nochmal?

In der Annahme, dass Dein Script der 2. Zeile korrekt ist, müsste es so sein:

Set EmbedObj = rtitem.EMBEDOBJECT(1454, "", Attachment, "Attachment")

Oder, falls Du das Objekt nicht mehr brauchst, ginge auch

Call rtitem.EMBEDOBJECT(1454, "", Attachment, "Attachment")

Wenn beim Öffnen der Mail kein Inhalt zu sehen ist, liegt es daran, dass bei im Hintergrund erzeugtem Richtext das Dokument vor dem Öffnen gespeichert werden muss.

Call MailDoc.Save (True, True)

und erst dann

Call Workspace.EditDocument(True, MailDoc).GotoField("Body")

falls das so in einem Rutsch geht, falls nicht, würde ich es so schreiben:

Dim MailUIDoc As NotesUIDocument
Set MailUIDoc = Workspace.EditDocument (True, MailDoc)
Call MailUIDoc.GotoField ("Body")

Kurz zusammengefasst:

Das Dokument (NotesDocument, bei Dir MailDoc) ist der Träger der Felder (bzw. Items, um in der Notessprache korrekt zu bleiben). Der Inhalt der Mail befindet sich in den Feldern, z.B. SendTo für den Empfänger, Subject für den Titel und eben Body für den Inhalt der Mail. Body ist grundsätzlich Richtext. Aller (fachlicher) Inhalt der Mail kommt also in Body (Text, Zeilenumbrüche, Dateianhänge usw.). Also:

Dokument erstellen
Felder ergänzen
  Bei Textfeldern einfach mit Maildoc.Feldname = "Wert"
  (ReplaceItemValue geht auch, ist mir aber zu umständlich, wenn ich mit statischen Feldnamen arbeite)
  Bei Richtextfeldern erst Richtextfeld erstellen -> Set rtitem = New NotesRichtextItem (doc, "Feldname")
  erst dann das RichtextItem füllen
     -> Call rtitem.AppendText ("Text")
     -> Call rtitem.AddNewLine (Anzahl)
     -> Call rtitem.EmbedObject (...)
     ...
Dokument senden (oder öffnen, dann vorher speichern, damit Richtext übernommen wird)

Ich hoffe, das hilft Dir ein wenig

Offline thorte

  • Frischling
  • *
  • Beiträge: 2
Hallo Peter,

VIELEN VIELEN DANK! Ihr seid hier ja echt aktiv! - und nett! In manch anderem Forum hätte man erstmal einen schönen Verweis auf das Forum bekommen... Sehr freundlich!

Das verleitet mich auch gleich zu einer Anschlußfrage nach Test.

Ich habe nun den Code mitels Deiner Hinweise und einiger Einträge aus dem Forum umgebaut - ergänzt. Jetzt versteh ich aber erstmal das mit dem Attachment und NotesRichTextItem. Ich hatte immer ein Attachment als Anhang interpretiert im Sinne von einem *.pdf Dokument... Anyway...

mein AKTUELLES PROBLEM: Die Signatur... Wenn ich das korrekt verstanden habe, dann wid die Signatur erst beim Erstellen / öffnen des Memo erzeugt und das ist stets erst nach der Zusammenstellung im Backend, richtig?

Nun habe ich hier im Forum einen Codeschnipsel gefunden, mit dem man wohl die Signatur ausliest, dann an den Text dran hängt, danach ausschaltet um sie nicht wieder vor den Text zu haben, wenn man das Memo öffnet und dann wieder einschaltet, damit der Nutzer die Signatur wieder zur Verfügung hat, wenn er sie denn nutzt.

Diesen Code habe ich hier Forum gefunden und betreffend der Signatur eingefügt (die zugehörigen Deklarationen habe ich natürlich durchgeführt / angepasst)

Code
'Uns interessiert ob Signatur verwendet wird
if profile.GetFirstItem("EnableSignature").Text="1" then
   'Signatur wird verwendet
   bolSignaturEnabled=True
   'Signatur auslesen 
   set rtsignature=profile.getfirstitem("Signature_Rich")
   If rtsignature.Type = 1 Then
      'dranhängen
      rtBody.appendrtitem rtsignature
      'Zeilenumschaltungen
      rtBody.addnewline 2
   end if

   'Nun schalten wir Signatur aus!
   profile.EnableSignature=""
   profile.save false,false 
end if 



Wenn ich diesen Block auskommentiere, dann ist die Sigantur enthalten, aber der Text kommt leider erst nach der Signatur. Solange ich den Block NICHT auskommentiere, fehlt die Signatur gänzlich, der Text ist jedoch enthalten.
ich dachte, dass die Signatur durch die Zeile

Code
 rtBody.appendrtitem rtsignature

eingefügt wird, nachdem sie zuvor ausgelesen wurde.

Kann es sein, dass in Lotus Notes 6.5 die Signatur anders ausgelesen wird? (wir nutzen LN 6.5 und Excel 2000) Ich kann leider nicht feststellen, ob es sich bei dem rtsignature

Code
 set rtsignature=profile.getfirstitem("Signature_Rich")

bzw überhaupt bei einem RichtTextItem um einen textknoten handelt, oder um ein Objekt. Ich kann jedenfalls "rtsignature" nicht (in VBA) auslesen.
In der Zeile

Code
If rtsignature.Type = 1 Then

meldet mir Excel, dass das Object = nothing ist. Ich habe allerdings mittels On Error Resume Next die Fehlerbehandlung ausgeschaltet, also läuft der VBA Code durch.
es wäre super, wenn ich de Signatur UND den Text in das Memo bekäme. Bisher muß ich mich leider entscheiden, denn den Text NACH der Signatur zu bekommen ist etwas unschön  ;)

Ob Du / Ihr / jemand dabei bitte nochmal helfend kommetieren könntet? Das wäre echt super!

unbedingt nochmal: VIELEN DANK - Super Forum

viele Grüße vom Rhein

Thorsten
« Letzte Änderung: 20.01.13 - 16:52:27 von thorte »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz