Тема: Программное прикрепление файла с иконкой в рич поле на LotusScript.
Хочу программно на лотус-скрипт (LotusScript) прикреплять в поле файлы, но чтобы при этом не исчезала иконка.
Для этого попробовать использовать класс NotesMIMEEntity (Multipurpose Internet Mail Extensions - многоцелевое расширение интерне почты)
MIME - это API-объект, который позволяет читать, изменять, создавать и удалять MIME-содержимое внутри письма или любого документа, где поле хранится в MIME-формате.
doc.CreateMIMEEntity("Body") — создаёт MIME-представление в поле Body вместо RichTextItem.
Заголовки (Content-Type, Content-Disposition, Content-Transfer-Encoding) задаются вручную.
multipart/mixed ← Корневой MIME-узел (письмо целиком)
│
├─ multipart/alternative ← Варианты отображения тела письма
│ ├─ text/plain ← Версия письма в чистом тексте (на случай старых клиентов)
│ └─ text/html ← HTML-версия письма (ссылки на картинки через CID)
│
├─ multipart/related ← Блок HTML + встроенные картинки
│ ├─ text/html ← HTML-код письма
│ ├─ image/png (Content-ID: <img1>) ← Встроенная картинка
│ └─ image/jpeg (Content-ID: <img2>)← Ещё картинка
│
└─ application/pdf ← Обычное вложение (файл.pdf)
Каждый блок MIME (multipart/…, text/html, application/pdf) — это отдельный объект NotesMIMEEntity.
У каждого есть заголовки (NotesMIMEHeader) и тело (данные в NotesStream).
Чтобы пройти по всей структуре, используют:
.GetFirstChildEntity — первый "вложенный" MIME-блок
.GetNextSiblingEntity — соседний MIME-блок
.GetParentEntity — родительский блок.
Хочу вложить файл в поле attach через MIMEEntity:
Примерный код, кнопка test1.
Sub Click(Source As Button)
Sub Click(Source As Button)
On Error Goto ErrH
Dim ses As New NotesSession, ws As New NotesUIWorkspace
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument
ses.ConvertMIME = False
Set db = ses.Currentdatabase
Set doc = ws.CurrentDocument.Document
Set uidoc=ws.CurrentDocument
Dim body As NotesMIMEEntity, header As NotesMIMEHeader , child As NotesMIMEEntity ' body child неисп пока
Dim mime As NotesMIMEEntity
Set mime = doc.CreateMIMEEntity("attach")
Set header = mime.CreateHeader("Content-Type") ' создали хедер штмл
Call header.SetHeaderVal("application/vnd.ms-excel")
Call header.SetHeaderValAndParams({multipart/alternative;charset="UTF-8"})
' Открываем файл
Dim Stream As NotesStream
Set Stream = ses.Createstream()
Call Stream.Open("С:/Temp/excel.xlsx", "UTF-8")
' Записываем содержимое в MIMEEntity
Call mime.SetContentFromBytes(Stream, "application/vnd.ms-excel", ENC_BASE64)
' Сохраняем документ
Call doc.Save(True, False)
ses.ConvertMIME = True
Call Stream.Close()
Call uidoc.Close
Call ws.EditDocument(True, doc) ' False - чтение
Exit Sub
ErrH:
Print "Ошибка " & Error(Err) & " в строке " & Erl
Exit Sub
End Sub
Но!
Set mime = doc.CreateMIMEEntity("attach")
не работает, так как в документе уже есть такое поле, на форме например.