Lotusscripts 获取富文本字段并发送电子邮件
Lotusscripts Get rich text field and send Email
我尝试编码是通过电子邮件发送富文本字段,但我发现一个错误,我认为这种发送电子邮件的方法是通过以下代码
Sub Click(Source As Button)
Dim s As New NotesSession
Dim w As New NotesUIWorkspace
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument
Set uidoc = w.CurrentDocument
Set s = New NotesSession
Set w = New NotesUIWorkspace
Set db = s.CurrentDatabase
Set doc = New NotesDocument (db)
doc.sendTo =s.UserName
doc.Subject = "Employee Information"
Dim rt As NotesRichTextItem
Set rt = New NotesRichTextItem ( doc, "Body" )
'Dim file As Variant 'if I use this code for declare for get value; Error : Type Mismatch
'Set file = doc.GetFirstItem("Body")
Dim rtitem As NotesRichTextItem 'if I use this code for declare for get value ; Error : Missing text object
Set rtitem = doc.GetFirstItem( "Body" )
Call rt.AppendRTItem(rtitem)
doc.Send(False)
End Sub
我注意到的一件事是您没有在您正在创建的邮件文档上设置表单。
您有一些不需要的代码,因为您没有在任何地方使用 uidoc,因此不需要它或声明 NotesUIWorkspace 对象。
我还建议您使用更好的变量名,并且在 NotesDocument 对象中设置字段值时不要使用扩展符号。
我建议你看看这里的文章:
http://blog.texasswede.com/how-to-write-better-code-in-notesdomino/
下面是我清理的代码:
Option Public
Option Declare
Sub Click(Source As Button)
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim db As NotesDatabase
Dim mailDoc As NotesDocument
Dim mailBody As NotesRichTextItem
Set db = session.CurrentDatabase
Set mailDoc = New NotesDocument(db)
Call mailDoc.ReplaceItemValue("Form","Memo")
Call mailDoc.ReplaceItemValue("SendTo",session.UserName)
Call mailDoc.ReplaceItemValue("Subject","Employee Information")
Set mailBody = New NotesRichTextItem(mailDoc,"Body" )
'Dim file As Variant 'if I use this code for declare for get value; Error : Type Mismatch
'Set file = doc.GetFirstItem("Body")
Dim rtitem As NotesRichTextItem 'if I use this code for declare for get value ; Error : Missing text object
Set rtitem = doc.GetFirstItem("Body")
Call mailBody.AppendRTItem(rtitem)
Call mailDoc.Send(False)
End Sub
这里的大问题是您从哪里获得要发送的富文本字段?在您的原始代码中,您试图从新创建的文档(我称之为 mailDoc 的文档)中读取它。但这没有任何意义。
你的问题只是你没有从任何地方阅读富文本。
如果您的目标是发送电子邮件,您可以使用我的邮件通知class:
http://blog.texasswede.com/updated-mailnotification-class-now-with-html-email-support-and-web-links/
那么您的代码将如下所示:
Dim session As New NotesSession
Dim mail As NotesMail
' *** Create a mail
Set mail = New NotesMail()
' Set receipient and subject
mail.MailTo = session.CommonUsername
mail.Subject = "Employee Information"
mail.Principal = "noreply@example.com"
' Create body content from rtitem.
' Yes, I should have added a method in the
' class to append RichtText to the mail body...
mail.body.AppendRTItem(rtitem)
Call mail.Send()
您唯一需要做的就是从某个地方获取 rtitem。由于您的原始代码声明了一个 NotesUIWorkSpace 对象和一个 NotesUIDocument 对象,我猜您想从当前打开的文档中读取它。然后您只需将以下内容添加到代码的开头:
Dim ws As New NotesUIWorkspace
Dim thisdoc As NotesDocument
Dim rtitem as NotesRichTextItem
Set thisdoc = ws.CurrentDocument.Document
Set rtitem = thisdoc.GetFirstItem("Body")
您是否也看到使用描述性变量名称时阅读起来更容易?
您好,您没有保存文档。请注意,如果文档未保存,则 Richtext 不可用。
我尝试编码是通过电子邮件发送富文本字段,但我发现一个错误,我认为这种发送电子邮件的方法是通过以下代码
Sub Click(Source As Button)
Dim s As New NotesSession
Dim w As New NotesUIWorkspace
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument
Set uidoc = w.CurrentDocument
Set s = New NotesSession
Set w = New NotesUIWorkspace
Set db = s.CurrentDatabase
Set doc = New NotesDocument (db)
doc.sendTo =s.UserName
doc.Subject = "Employee Information"
Dim rt As NotesRichTextItem
Set rt = New NotesRichTextItem ( doc, "Body" )
'Dim file As Variant 'if I use this code for declare for get value; Error : Type Mismatch
'Set file = doc.GetFirstItem("Body")
Dim rtitem As NotesRichTextItem 'if I use this code for declare for get value ; Error : Missing text object
Set rtitem = doc.GetFirstItem( "Body" )
Call rt.AppendRTItem(rtitem)
doc.Send(False)
End Sub
我注意到的一件事是您没有在您正在创建的邮件文档上设置表单。
您有一些不需要的代码,因为您没有在任何地方使用 uidoc,因此不需要它或声明 NotesUIWorkspace 对象。 我还建议您使用更好的变量名,并且在 NotesDocument 对象中设置字段值时不要使用扩展符号。
我建议你看看这里的文章:
http://blog.texasswede.com/how-to-write-better-code-in-notesdomino/
下面是我清理的代码:
Option Public
Option Declare
Sub Click(Source As Button)
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim db As NotesDatabase
Dim mailDoc As NotesDocument
Dim mailBody As NotesRichTextItem
Set db = session.CurrentDatabase
Set mailDoc = New NotesDocument(db)
Call mailDoc.ReplaceItemValue("Form","Memo")
Call mailDoc.ReplaceItemValue("SendTo",session.UserName)
Call mailDoc.ReplaceItemValue("Subject","Employee Information")
Set mailBody = New NotesRichTextItem(mailDoc,"Body" )
'Dim file As Variant 'if I use this code for declare for get value; Error : Type Mismatch
'Set file = doc.GetFirstItem("Body")
Dim rtitem As NotesRichTextItem 'if I use this code for declare for get value ; Error : Missing text object
Set rtitem = doc.GetFirstItem("Body")
Call mailBody.AppendRTItem(rtitem)
Call mailDoc.Send(False)
End Sub
这里的大问题是您从哪里获得要发送的富文本字段?在您的原始代码中,您试图从新创建的文档(我称之为 mailDoc 的文档)中读取它。但这没有任何意义。 你的问题只是你没有从任何地方阅读富文本。
如果您的目标是发送电子邮件,您可以使用我的邮件通知class:
http://blog.texasswede.com/updated-mailnotification-class-now-with-html-email-support-and-web-links/
那么您的代码将如下所示:
Dim session As New NotesSession
Dim mail As NotesMail
' *** Create a mail
Set mail = New NotesMail()
' Set receipient and subject
mail.MailTo = session.CommonUsername
mail.Subject = "Employee Information"
mail.Principal = "noreply@example.com"
' Create body content from rtitem.
' Yes, I should have added a method in the
' class to append RichtText to the mail body...
mail.body.AppendRTItem(rtitem)
Call mail.Send()
您唯一需要做的就是从某个地方获取 rtitem。由于您的原始代码声明了一个 NotesUIWorkSpace 对象和一个 NotesUIDocument 对象,我猜您想从当前打开的文档中读取它。然后您只需将以下内容添加到代码的开头:
Dim ws As New NotesUIWorkspace
Dim thisdoc As NotesDocument
Dim rtitem as NotesRichTextItem
Set thisdoc = ws.CurrentDocument.Document
Set rtitem = thisdoc.GetFirstItem("Body")
您是否也看到使用描述性变量名称时阅读起来更容易?
您好,您没有保存文档。请注意,如果文档未保存,则 Richtext 不可用。