• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы 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.
 
O

Omh

У EmbeddedObjecta есть 2 проперти: Name и Source - почитай в хелпе.

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

Как решение твоей проблемы, могу посоветовать на QuerySave вызвать Source.Refresh(True), потом перебрать EmbeddedObjects у айтема и если есть пара с одним и тем же Source (или Name, точно не помню), то взвести Continue = False с матом в адрес юзера.
 
G

George1979

А у какого NotesRichTextItem'a. Когда файл присоединяется к документу создается поле $FILE.
 
G

George1979

Нашел я поле RichTextItem. Но это годится только для сохраненных документов.
Я в отладчике смотрел - если документ новый (еще не был сохранен), то
св-во Embedded Objects пустое.
А если сохранен, то совсем другое дело, все видно в отладчике и все
нормально работает.
 
G

George1979

Спасибо большое все заработало.
Единственное, что когда в QuerySave ставлю Continue=false, тогда
выдается Lotus'ое сообщение - NotesUIDocument: Save cancelled.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!