Решено Attach файла с иконкой (back-end)

Есть ли решение на лотусскрипт, чтобы когда креплю аттач
Call rtitem.EmbedObject ( EMBED_ATTACHMENT, "", файлик)
иконка не становилась серым квадратиком?

ИЛи только цеплять целую библиотеку для этого?

Visual Basic:
Dim ses As New NotesSession
    Dim db As NotesDatabase
    
    Dim doc As NotesDocument
    
    ses.ConvertMIME = false
    
    Set db = ses.Currentdatabase
    
    Set doc = db.Createdocument()
    
    Dim body As NotesMIMEEntity, header As NotesMIMEHeader ,  child As NotesMIMEEntity
    Dim streamIn As NotesStream
    
    Dim z_data As String
    Dim Stream As NotesStream
    
    Set Stream = ses.Createstream()
    
    If Not Stream.Open("D:/Temp/excel.xlsx", "Binary") Then
        Error 5001, "stream not open"
    End If
    
    z_data = Stream.Readtext()
    
    Set body = doc.CreateMIMEEntity("Body")
    
    'Content Type
    Set header = body.CreateHeader("Content-Type")
    Call header.SetHeaderValAndParams({multipart/alternative;charset="UTF-8"})
    
    Set child = body.createChildEntity() 'ChildEntities are containers
    
    Set streamIn = ses.CreateStream 
    Call streamIn.WriteText(z_data)
    streamIn.Position = 0
    
    Set header = child.CreateHeader("Content-Type")
    Call header.SetHeaderVal("multipart/mixed")

    Set header = child.CreateHeader("Content-Disposition")
    Call header.SetHeaderVal("attachment; filename=excel.xlsx")

    Set header = child.CreateHeader("Content-ID")
    Call header.SetHeaderVal("excel.xlsx")
    
    Call child.setContentFromText(streamIn, {"application/octet-stream"}, ENC_IDENTITY_BINARY)
    
    Call doc.Closemimeentities(True)
    Call doc.Replaceitemvalue("Form", "rtItem")
    
    Call doc.save(True, false)
    
    ses.ConvertMIME = True
    
    Call Stream.Close()
    Call streamIn.Close()
 
  • Нравится
Реакции: seoman2
Что то не работает, даже сделал простейший тестовый пример, чтбы по кнопке в поле засунуть что то в миме в уи.
но не пашет. не понимаю почему.
 
Что то не работает, даже сделал простейший тестовый пример, чтбы по кнопке в поле засунуть что то в миме в уи.
но не пашет. не понимаю почему.
я не пробовал через UI делать, но возможно как раз дело в форме и в том, что на форме уже есть одноименное поле.
Вот только если есть UI док, то зачем программно на LS делать?
Можно сделать хот-спот или кнопку с формульным кодом:
Код:
@Command([EditGotoField];"Body");
@Command([EditInsertFileAttachment])
 
Если уже есть одноименное поле у doc - да, ошибка при вызове, так и указано в документации .
doc.CreateMIMEEntity("поле").

Я делаю переименование существующего аррача на LotusScript, всё ок - только иконочка исчезает.
Вот и думал через миме крепить обратно.

"я не пробовал через UI делать," - попробуйте? никак не получается. чтобы корректно.
пробую сначала закрыть док в уи...
Call doc.Save(True, True) скидывает содержимое NotesMIMEEntity в поле.
в общем пока никак (
 
ничего не происходит (
Visual Basic:
Sub Click(Source As Button)
On Error Goto ErrH
Dim session As New NotesSession, ws As New NotesUIWorkspace, db As NotesDatabase, sview As NotesView, dc As NotesDocumentCollection
Dim uidoc As NotesUIDocument, doc As NotesDocument
 
Set doc = ws.CurrentDocument.Document
Set uidoc=ws.CurrentDocument
Call uidoc.save
Dim result As Variant
Call uidoc.GoToField("Body2")
Macro$ = { @Command([EditInsertFileAttachment] ; "C:\\XML\\Инст.docx"; "1";  "0";   "0";     "0");     }
result = Evaluate(Macro$, doc)
Print "OK"
Exit Sub
 
вот это работает
Создал файл test.xlsx. После работы скрипта иконка файла в документе реально отображается, но сам файл по нормальному не вкладывается - занимает не 5 kb, каким должен быть файл, а какие-то жалкие крохи. В общем получившийся документ занимает около 800 байтов. При попытке открытия файла даблкликом Excel выдаёт сообщение "Excel cannot open the file 'test.xlsx' because the file format or file extension is not valid. Verify that the file has not been corrupted and that the file extension matches the format of the file.". Предполагаю, что можно это доточить, но извлечь Base64-текст иконки файла всё равно не представляется возможным. И потом работать с этими данными программно далее очень неудобно.

Сколько не пытался работать с MIME, это всегда напоминает какие-то уж совсем жуткие танцы с бубном...

Как по мне, проще, как обычно, приатачить файл в поле временного документа, а потом в DXL подменить Base64-текст иконки файла. Его можно получить и помощью и отредактировать размер на нужный свойствами класса javax.swing.Icon. А в конце получившееся содержимое поля просто добавить к RichText-полю своего документа.
 
Да, похоже что открытие не работает. я не вот чтобы проверял сильно работоспособность.
Ну что ж, был не прав. Подумаю еще, всё же интересно.
А так, вот тут можно отсюда начать
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab