从Notes文档的底部删除附件?

时间:2014-06-03 16:18:43

标签: lotus-notes lotusscript lotus

我的Notes文档在文档的底部有附件(是的,我知道是什么原因)。如何在不删除字段中的附件的情况下以编程方式删除这些附件?

我希望使用NotesDoument.Embeeded对象,但它不包含文件附件。 :(

2 个答案:

答案 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