我的Notes文档在文档的底部有附件(是的,我知道是什么原因)。如何在不删除字段中的附件的情况下以编程方式删除这些附件?
我希望使用NotesDoument.Embeeded对象,但它不包含文件附件。 :(
答案 0 :(得分:3)
您可以使用Evaluate()(是的,这是您想要使用它的次数之一),调用@AttachmentNames公式以获取文档中所有附件的列表。 然后,您可以处理您返回的数组,并与您在富文本字段中附加的数组进行比较,并删除您不想要的数组。
我首先从富文本字段中获取所有嵌入的附件,并将名称存储在列表中。 然后我会使用@AttachmentNames获取文档上的所有附件并将它们放在另一个列表中。 机器人列表应该具有文件名作为列表标记。 您现在可以使用ForAll轻松遍历第二个列表,如果第一个列表中没有匹配的'list项,则从文档中删除附件。使用IsElement()检查是否存在特定的列表项。
答案 1 :(得分:0)
您只需删除Rich Text
以外的Form
字段,然后删除Rich Text
字段以外的附件。
要检索Form
字段,您可以使用NotesForm
对象,您可以通过NotesDatabase.GetForm
方法访问该对象。如果您的Notes Document
没有表单,则可以从默认数据库表单中检索字段,您可以使用NotesDocument
及其NotesDatabase.GetDocumentByID("FFFF0004")
项中的$Fields
来获取该字段。但是,如果您的Form
含有Computed Sub Forms
,则需要手动检查此Computed Sub Forms
中可能包含的字段。
要获取所有附件,您可以将NotesDocument.Items
与“$ FILE”名称一起使用,并使用其值来获取附件名称。
这是一个例子:
'Declarations
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim form As NotesForm
Dim defaultForm As NotesDocument
Dim fields As Variant
Dim rtItems() As NotesRichTextItem
Dim files() As String
Dim fileItem As NotesItem
'Get the database and document here
Set form = db.GetForm(doc.Form(0))
'Get Form fields
If form Is Nothing Then
Set defaultForm = db.GetDocumentByID("FFFF0004")
If defaultForm Is Nothing Then
Exit Sub 'Nothing to do
End If
fields = defaultForm.~$Fields
Else
fields = form.Fields
End If
count% = 0
'Get all Rich Text items in document
Forall item In doc.Items
If item.Type = RICHTEXT% Then
Redim Preserve rtItems(count%) As NotesRichTextItem
Set rtItems(count%) = item
count% = count% + 1
End If
End Forall
Redim files(0) As String
If count% > 0 Then
count% = 0
'Remove Rich Text items that are not in form and get all file names
Forall rtItem In rtItems
fieldIndex = Arraygetindex(fields, rtItem.Name)
If Isnull(fieldIndex) Then
Call rtItem.Remove
Elseif Not Isempty(rtItem.EmbeddedObjects) Then
Forall obj In rtItem.EmbeddedObjects
Redim Preserve files(count%) As String
files(count%) = obj.Name
count% = count% + 1
End Forall
End If
End Forall
End If
'Remove all files that are not in Rich Text item
For index = Ubound(doc.Items) To 0 Step -1
Set fileItem = doc.Items(index)
If Ucase(fileItem.Name) = "$FILE" Then
fileIndex = Arraygetindex(files, fileItem.Values(0))
If Isnull(fileIndex) Then
fileItem.Remove
End If
End If
Next
'Save changes here