• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Проблемы с присоединением файлов

  • Автор темы Автор темы George1979
  • Дата начала Дата начала
G

George1979

Передо мной была поставлена задача присоединения файлов к документу.

Я это сделал с помощью @Command [EditInsertFileAttachment].
В списке документов столбцу прописываю Simple Function
[Attachment Names].
Все работает правильно. Но когда присоединяется дважды один и
тот же файл, на форме все отображается нормально, а в списке документов
пишется какая-то билиберда: ATTT8VBQ, ATT7DQGJ.

Посмотрел Help по EditInsertFileAttachment не нашел ничего нужного.
Решил программно перебрать все уже присоединенные файлы. И если
встречается повтор, то отменить присоединение.

Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document

If doc.HasEmbedded Then
Forall o In doc.EmbeddedObjects
Messagebox( o.Name )
End Forall
Else
Messagebox "No embedded objects found"
End If

Но на строчке 'Forall o In doc.EmbeddedObjects' вылетает ошибка
"Type mismatch".

Еще попробовал считать имена файлов через поле $FILE.
Forall item In doc.Items
If item.Name = "$FILE" Then
Forall v In item.Values
If Cstr(v) = FileName2 Then
Messagebox "Файл с именем "+v+" уже присоединен к документу"
End If
End Forall
End if
End forall
Если документ сохранен, то работает правильно.
Но если не сохранен, то всегда возвращает имя первого присоединенного
файла. Т.е. если имя 1-го присоединенного файла, допустим, eulo.doc,
2-го otgul.doc и т.д. то возвращает каждый раз eulo.doc.
 
У EmbeddedObjecta есть 2 проперти: Name и Source - почитай в хелпе.

Но на строчке 'Forall o In doc.EmbeddedObjects' вылетает ошибка
Тебе надо перебирать EmbeddedObjects у NotesRichTextItem'a а не у документа.

Как решение твоей проблемы, могу посоветовать на QuerySave вызвать Source.Refresh(True), потом перебрать EmbeddedObjects у айтема и если есть пара с одним и тем же Source (или Name, точно не помню), то взвести Continue = False с матом в адрес юзера.
 
А у какого NotesRichTextItem'a. Когда файл присоединяется к документу создается поле $FILE.
 
Нашел я поле RichTextItem. Но это годится только для сохраненных документов.
Я в отладчике смотрел - если документ новый (еще не был сохранен), то
св-во Embedded Objects пустое.
А если сохранен, то совсем другое дело, все видно в отладчике и все
нормально работает.
 
Спасибо большое все заработало.
Единственное, что когда в QuerySave ставлю Continue=false, тогда
выдается Lotus'ое сообщение - NotesUIDocument: Save cancelled.
 
Мы в соцсетях:

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