Я пытаюсь экспортировать все документы и их вложения из базы данных Lotus Notes (с помощью Designer 7.0). Я могу получить данные документа и получить вложение, но только если я буду жестко закодировать имя. Два метода в LotusScript, которые я нашел для получения имени файла программным образом, не работают, как показано в нижних двух блоках кода. В первом случае doc.GetFirstItem («Тело») возвращает Nothing, а во втором - несоответствие типа во время выполнения в строке Forall. Любая помощь по извлечению вложений будет принята с благодарностью! Я не уверен, хранятся ли вложения как «вложения» или OLE, но я подозреваю, что это вложения, поскольку они в основном являются PDF-файлами.Как получить вложения Lotus Notes?
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim query As String
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Dim fileCount As Integer
Dim attachment As NotesEmbeddedObject
Dim fileName As String
Set db = session.CurrentDatabase
' get a document that has an attachment
Set collection = db.FTSearch("06/25/2013", 10)
fileNum% = Freefile()
fileName$ = "c:\kcw\lotusexport.txt"
Open fileName$ For Output As fileNum%
Write #fileNum%, "docs found", collection.Count
Set doc = collection.GetFirstDocument
' write out document properties
Forall x In doc.Items
Write #fileNum%, x.Name, " = ", x.Text
End Forall
'extract document (using hardcoded name)
Set attachment = doc.GetAttachment("OCSE-FRONT_SCANTODESKTOP_06262013-104822.pdf")
Call attachment.ExtractFile _
("c:\kcw\attachment")
'Try to get attachment through "Body", but rtitem is Nothing
Set rtitem = doc.GetFirstItem("Body")
Write #fileNum%, "rtitem is Nothing", rtitem Is Nothing
fileCount = 0
If Not rtitem Is Nothing Then
If (rtitem.Type = RICHTEXT) Then
Write #fileNum%, "rtitem is RICHTEXT"
Forall o In rtitem.EmbeddedObjects
Write #fileNum%, "has Embedded Objects"
fileCount = fileCount + 1
Write #fileNum%,"rtitem num", fileCount
Call o.ExtractFile _
("c:\kcw\newfile" & Cstr(fileCount))
End Forall
End If
End If
'Fails with "Type mismatch" at Forall loop
If doc.HasEmbedded Then
Write #fileNum%, "doc has embedded"
Forall objects In doc.EmbeddedObjects
Write #fileNum%, "in for loop"
Write #fileNum%, "filename= ", object.Source
End Forall
End If
Close fileNum%
End Sub
Что вы подразумеваете под Dim session..etc.? – zanbri
Поле тела существует в каждом документе? Очень странно, что он ничего не возвращает. –
Вы определенно должны смотреть на методы обработки ошибок в LotusScript. Может возникнуть проблема с документом, обработанным в цикле - в любое время. С самого начала: другая форма (без поля тела), поврежденный документ (.isValid), недопустимое имя файла (имя внутреннего вложения может отличаться от указанного в клиенте) и т. Д. –