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

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

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

Не понятный глюк Embeddedobjects

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
Всем привет!
Вот столкнулся с каким приколом. Есть документ с приатаченным файлом. файл обрабатываю вот так (грубо говоря)
Код:
 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
В чем может быть прикол?
 
Вообще-то не глюк, а фича. ртфм.
Unlike the EmbeddedObjects property in NotesRichTextItem, this property does not include file attachments
 
А через RT не подойдет?

Set rtdoc=doc.GetFirstItem("Files")
If ( rtdoc.Type = RICHTEXT ) Then
If Not Isempty(rtdoc.EmbeddedObjects) Then
Forall object In rtdoc.EmbeddedObjects
If (object.Type = EMBED_ATTACHMENT ) Then
filepath =Environ("Temp")+"\"+Cstr(Object.Name)
Call object.ExtractFile(filepath)
 
рт не учитывает приаттаченные не к рт, а напрямую к доку аттачи (через веб, например)
 
и как вы это себе представляете - форалл?
 
и как вы это себе представляете - форалл?

Перевод от Google:
Если несколько элементов в документе, имеют те же названия, программный доступ ограничен первого дня. Остальные пункты повестки дня выхода неверные данные. Обойти это, чтобы получить первый элемент, а обработать его, удалите его, снова получить первый пункт (который был второй пункт), и так далее, пока вы не обрабатывать все элементы с таким же названием. Если вы не сохраните этот документ, пунктов на самом деле не удаляется. Тем не менее, эта рекомендация является то, что избежать создания нескольких объектов с тем же именем.
 
ToxaRat
точна, и кот здеся был
 
susinmn
Можно... пробовал... только вот какой прикол еще обнаружился.
Поле Body какое-то кривое... без флага Summary. :unsure:
Документы попадают в базу в виде сообщений через SMTP... после обрабатываются.
 
А так разве не сработает? Могу ошибавться, давно дело было:

Код:
Dim doc As NotesDocument
Dim neo As NotesEmbeddedObject
....
forall it in doc.items
if it.name = "$FILE" Then 
forall n in it.values
Set neo = doc.GetAttachment(n)
' Делаем что-то с аттачментом
end forall
end forall
 
такая конструкция тоже не работает
Код:
	If ( body.Type = RICHTEXT ) Then
ForAll o In body.EmbeddedObjects

If ( o.Type = EMBED_ATTACHMENT ) Then

......

Call o.Remove

End If

End ForAll

End If
Medevic и тут дело не в том что это аттач! body.EmbeddedObjects должно вернуть объект или Nothing, а не ругаться на несоответствие типов
 
NickProstoNick
Может вместо Forall пройтись обычным циклом For i = 0 To Ubound(body.EmbeddedObjects)? Кстати, а что говорит проверка IsArray(body.EmbeddedObjects)?
 
NickProstoNick
Может вместо Forall пройтись обычным циклом For i = 0 To Ubound(body.EmbeddedObjects)? Кстати, а что говорит проверка IsArray(body.EmbeddedObjects)?

вопрос решился так
Код:
Forall it In Doc.Items
If it.name = "$FILE" Then
filename = it.values(0)
Set f= Doc.GetAttachment( fileName )
Call f.ExtractFile(strFileLocation & f.Source)
End If
End Forall
 
  • Нравится
Реакции: NetWood
Medevic и тут дело не в том что это аттач! body.EmbeddedObjects должно вернуть объект или Nothing, а не ругаться на несоответствие типов
Не должно. EmbeddedObjects возвращает Empty. Отсюда несоответствие типов. И проверять надо соответственно isEmpty.
 
таки Forall в итоге вышел :)))
кста, насчет проверки isEmpty указывала в теме link removed
А почему нельзя было эвалюейтить @attachmentNames?
 
OKEN
А почему нельзя было эвалюейтить @attachmentNames
подожди, пусть намучаются, я им это с самого начала написал, можа вдруг кто-то найдёт еще действенный метод кроме этого одного :)
 
Мыш
Дякую... только сейчас прочел сообщения :)
Всем спасибо
 
Мы в соцсетях:

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