Форум продуктов IBM Lotus
Общие вопросы => Разработка приложений => Тема начата: K85 от 10 Июнь 2011, 17:06:57
-
Есть письмо из вне, необходимо в преставлении Все документы нажимать кнопку или в действиях выбирать агент и сохранять данное письмо в определенном месте на диске в текстовом формате. Как сохранить поле Field Name: Body Data Type: MIME Part
пытаюсь сделать так:
Dim dc As NotesDocumentCollection
Set dc = db.UnprocessedDocuments
Set nd_tmp=ndc_tmp.getfirstdocument()
While Not(nd_tmp Is Nothing)
Set mime = nd_tmp.GetMIMEEntity
While Not(mime Is Nothing)
Dim new As Variant
Set mime = nd_tmp.GetMIMEEntity
new= ""
Call mime.DecodeContent
new = mime.ContentAsText
ConvertRTDoc = new
Print #ФАЙЛ%,"Body: " & new
Call mime.remove
Set nd_tmp=ndc_tmp.getfirstdocument()
Wend
Set nd_tmp=ndc_tmp.getnextdocument(nd_tmp)
Wend
но так добавляется в файл только информация из 1-го поля, а остальные не попадают
Как сделать правильно?
-
А если напечатать строчку
Messagebox mime.ContentAsText,, "Content as text"
что будет выведено?
-
если в этой части вставить:
Print #ФАЙЛ%,"Body: " & new
Messagebox mime.ContentAsText,, "Content as text"
Call mime.remove
то This is a multi-part message in MIME format
если в эту часть:
Wend
Set nd_tmp=ndc_tmp.getnextdocument(nd_tmp)
Messagebox mime.ContentAsText,, "Content as text"
Wend
то Object variable not set
-
Т.е. говорится, что сообщение формата MIME состоит из множества частей.
В использовании метода ContentAsText написано, что для родительского объекта в множественном объекте (mime оказался множественным) этот метод возвращает преамбулу. Наверно поэтому берется информация только из первого поля.
Если попробовать так (печатать содержимое частей множественного объекта mime)
Sub Initialize
Dim s As New NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim mime As NotesMIMEEntity
Dim child As NotesMIMEEntity
Dim m As String
Set db = s.CurrentDatabase
s.ConvertMIME = False ' Do not convert MIME to rich text
Set dc = db.UnprocessedDocuments
Set doc = dc.GetFirstDocument
While Not(doc Is Nothing)
Set mime = doc.GetMIMEEntity
If Not(mime Is Nothing) Then
If mime.ContentType = "multipart" Then
n = 1
Set child = mime.GetFirstChildEntity
While Not(child Is Nothing)
'необходимые действия, ContentAsText'
n = n + 1
Set child = child.GetNextSibling
Wend
Else ' if not multipart
Messagebox "Not multipart",, _
doc.GetItemValue("Subject")(0)
End If
Else ' if not MIME
Messagebox "Not MIME",, doc.GetItemValue("Subject")(0)
End If
Set doc = dc.GetNextDocument(doc)
Wend
s.ConvertMIME = True ' Restore conversion
End Sub
-
огромное спасибо! Вышло, но осталось у меня одна проблема
например, в документе есть 4 поля Body, а выводит только 3 и всего три прохода делает (смотрю в дебагере)
в строке Set mime = doc.GetMIMEEntity показывает ту, которую в итоге не выводит
в Set child = mime.GetFirstChildEntity выводит следующее поле
как можно первое тоже вывести?
-
Давайте разберем, может в коде что-то забыто
'Рассматриваем документ
While Not(doc Is Nothing)
' Задаем значение mime
Set mime = doc.GetMIMEEntity
' Проходим в цикл
If Not(mime Is Nothing) Then
'Строчка состоит из множества частей? Если да, то Set child = mime.GetFirstChildEntity выведет нужное поле. Иначе в цикл не проходим, переходим к Else
If mime.ContentType = "multipart" Then
n = 1
Set child = mime.GetFirstChildEntity
While Not(child Is Nothing)
'обработка поля
n = n + 1
Set child = child.GetNextSibling
Wend
Else ' if not multipart
'Должно выводиться это сообщение, здесь надо обработать первое поле
Messagebox "Not multipart",, _
doc.GetItemValue("Subject")(0)
End If
Else ' if not MIME
Messagebox "Not MIME",, doc.GetItemValue("Subject")(0)
End If
Messagebox нигде не выводится?
-
сообщения не выводит, все так и сделано, но первое поле не в какую не хочет брать
-
Попробуйте отследить вывод полей Messagebox-м
Messagebox "MIME",, doc.GetItemValue("Subject")(0)
Set mime = doc.GetMIMEEntity
If Not(mime Is Nothing) Then
Messagebox "MIME isn't Nothing"
If mime.ContentType = "multipart" Then
Messagebox "MIME is multipart"
n = 1
Set child = mime.GetFirstChildEntity
While Not(child Is Nothing)
Call child.DecodeContent
Messagebox child.ContentAsText,,doc.GetItemValue("Subject")(0)
'печатаем содержимое поля
n = n + 1
Set child = child.GetNextSibling
Wend
-
или я уже просто не могу ничего понять или.... :-\
Проверяю по messagbox
1. MIme и название (правильное)
2. MIME isn't Nothing
3. MIME is multipart
4. только 2 поля из четырех :'( . Сообщение только о 2-х полях
-
Проверьте, может child тоже является multipart. И какое значение имеет счетчик n после выполнения агента?
Messagebox "Child is multipart"
-
n=3
child не multipart
-
Может опять проблема с использованием ContentAsText? Проблемы с ним могут возникать из-за кодировки объекта, если кодировка не US-ASCII. Или в полях хранятся не текстовые данные, что тоже может стать проблемой для дальнейшей их обработки. Например, данные, содержащие нулевой символ, вероятно, будут усечены до нулевого символа во время работы со строками.
Проверьте тип данных в потомках методом ContentType и Messagebox
Покажите, пожалуйста, весь код агента
-
спасибо за ответ... буду пробовать