API getEmbeddedObjects();
当从脚本发送包含附件(作为嵌入对象)的邮件时,Domino 服务器返回错误结果(零)。虽然附件是作为EmbeddedOBject
,getEmbeddedObjects();
返回的ZERO
。邮件类型是NOT MIME
。
这是一个 Java 应用程序。这个问题有什么解决方法吗?
我从文件中取出尸体。如果正文是richtextitem,我调用getEmbeddedObjects(),尽管附件作为嵌入对象存在,但它返回零。
API getEmbeddedObjects();
当从脚本发送包含附件(作为嵌入对象)的邮件时,Domino 服务器返回错误结果(零)。虽然附件是作为EmbeddedOBject
,getEmbeddedObjects();
返回的ZERO
。邮件类型是NOT MIME
。
这是一个 Java 应用程序。这个问题有什么解决方法吗?
我从文件中取出尸体。如果正文是richtextitem,我调用getEmbeddedObjects(),尽管附件作为嵌入对象存在,但它返回零。
查看文档中的所有项目以查找附件的可能性是徒劳的。您需要做的就是使用 @AttachmentNames 公式获取附件名称的集合(可通过 Session 对象的 evaluate() 方法,使用 Document 参数),如果集合包含多个空字符串,则使用 getAttachment () 方法获取文档对应的 EmbeddedObject 的句柄。
getAttachment() 可以获取文档的任何附件,无论它是与 RichTextItem 还是与 V2 样式的附件相关联(由 Web UI 或在转换外部邮件时创建)。并且永远不要害怕在适当的时候使用公式语言——它可以让你的生活变得更简单。
遗憾的是,Lotus Notes 没有提供从 NotesDocument 对象中提取附件的单一可靠方法。为了彻底,您需要检查它包含的所有富文本项目,以及文档对象本身。
我编写了以下代码来从邮箱中的选定电子邮件中提取附件,以减少文件大小(我的用户保存了所有内容)。不过,主循环与您的问题有关。它显示了遍历文档的所有项目以查找带有附件的富文本项目的过程,然后再次遍历所有项目以查找“附件”类型的项目。
(原谅代码的hackiness。它不是为了效率而写的)
Sub Initialize
Set s = New NotesSession
Set db = s.CurrentDatabase
Set dc = db.UnprocessedDocuments
Set doc = dc.GetFirstDocument
Dim rtItem As NotesRichTextItem
Dim RichTextItemNames List As String
Dim DocumentItemNames List As String
Dim itemCount as Integer
While Not (doc Is Nothing)
'Scan all richtext items in document for embedded objects
Forall i In doc.Items
If i.Type = RICHTEXT Then
Set rtItem = doc.GetFirstItem(i.Name)
If Not Isempty(rtItem.EmbeddedObjects) Then
RichTextItemNames(itemCount) = Cstr(i.Name)
itemCount = itemCount + 1
End If
End If
End Forall
'Loop through richtext items and extract the embedded attachments
For j = 0 To itemCount - 1
Set rtItem = doc.GetfirstItem(RichTextItemNames(j))
Forall Obj In rtItem.EmbeddedObjects
If ( Obj.Type = EMBED_ATTACHMENT ) Then
Call ExportAttachment(Obj)
Call Obj.Remove
Call doc.Save( False, True ) 'creates conflict doc if conflict exists
End If
End Forall
Next
'Scan all items in document for Attachment type items
itemCount = 0
Forall i In doc.Items
If i.Type = ATTACHMENT Then
DocumentItemNames(itemCount) = i.Values(0)
itemCount = itemCount + 1
End If
End Forall
'Loop through all attachment items in document and extract them
For j = 0 To itemCount - 1
Set attachmentObject = doc.GetAttachment(DocumentItemNames(j))
Call ExportAttachment(attachmentObject)
Call attachmentObject.Remove
Call doc.Save( False, True ) 'creates conflict doc if conflict exists
Next
Set doc = dc.GetNextDocument(doc)
Wend
End Sub
Sub ExportAttachment(o As Variant)
Dim sAttachmentName As String
Dim sNum As String
Dim sTemp As String
' Append number to end of filename if filename exists.
sAttachmentName = sDir & "\" & o.Source
While Not (Dir$(sAttachmentName, 0) = "")
sNum = Right(Strleftback(sAttachmentName, "."), 2)
If Isnumeric(sNum) Then
sTemp = Strleftback(sAttachmentName, ".")
sTemp = Left(sTemp, Len(sTemp) - 2)
sAttachmentName = sTemp & Format$(Cint(sNum) + 1, "##00") & _
"." & Strrightback(sAttachmentName, ".")
Else
sAttachmentName = Strleftback(sAttachmentName, ".") & _
"01." & Strrightback(sAttachmentName, ".")
End If
Wend
Print "Exporting " & sAttachmentName
'Save the file
Call o.ExtractFile( sAttachmentName )
End Sub
附件不一定必须嵌入 RichText 字段中。引用设计师帮助:
如果您需要访问存在于文档中但不属于富文本项的 OLE/2 嵌入对象(例如,因为该对象最初是在文档的表单上创建的),请使用 Document 中的 EmbeddedObjects 属性。
您的问题的另一个来源可能是您必须检查几个“Body”RichText 项目。
高温高压
如果您从对象中获取嵌入的Document
对象,它们将不包含附件。getEmbeddedObjects
与“Body”一起使用RichTextItem
也可以获得附件。
这有帮助吗?