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

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

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

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

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

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Всем привет!
Вот столкнулся с каким приколом. Есть документ с приатаченным файлом. файл обрабатываю вот так (грубо говоря)
Код:
 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
В чем может быть прикол?
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Вообще-то не глюк, а фича. ртфм.
Unlike the EmbeddedObjects property in NotesRichTextItem, this property does not include file attachments
 
S

susinmn

А через 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)
 
H

hosm

рт не учитывает приаттаченные не к рт, а напрямую к доку аттачи (через веб, например)
 
H

hosm

и как вы это себе представляете - форалл?
 
S

susinmn

и как вы это себе представляете - форалл?

Перевод от Google:
Если несколько элементов в документе, имеют те же названия, программный доступ ограничен первого дня. Остальные пункты повестки дня выхода неверные данные. Обойти это, чтобы получить первый элемент, а обработать его, удалите его, снова получить первый пункт (который был второй пункт), и так далее, пока вы не обрабатывать все элементы с таким же названием. Если вы не сохраните этот документ, пунктов на самом деле не удаляется. Тем не менее, эта рекомендация является то, что избежать создания нескольких объектов с тем же именем.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 940
609
BIT
210
ToxaRat
точна, и кот здеся был
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
susinmn
Можно... пробовал... только вот какой прикол еще обнаружился.
Поле Body какое-то кривое... без флага Summary. :unsure:
Документы попадают в базу в виде сообщений через SMTP... после обрабатываются.
 

Мыш

Lotus Team
12.02.2008
1 219
29
BIT
66
А так разве не сработает? Могу ошибавться, давно дело было:

Код:
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
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
такая конструкция тоже не работает
Код:
	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, а не ругаться на несоответствие типов
 
N

nvyush

NickProstoNick
Может вместо Forall пройтись обычным циклом For i = 0 To Ubound(body.EmbeddedObjects)? Кстати, а что говорит проверка IsArray(body.EmbeddedObjects)?
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
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

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Medevic и тут дело не в том что это аттач! body.EmbeddedObjects должно вернуть объект или Nothing, а не ругаться на несоответствие типов
Не должно. EmbeddedObjects возвращает Empty. Отсюда несоответствие типов. И проверять надо соответственно isEmpty.
 
H

hosm

таки Forall в итоге вышел :)))
кста, насчет проверки isEmpty указывала в теме link removed
А почему нельзя было эвалюейтить @attachmentNames?
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
OKEN
А почему нельзя было эвалюейтить @attachmentNames
подожди, пусть намучаются, я им это с самого начала написал, можа вдруг кто-то найдёт еще действенный метод кроме этого одного :)
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Мыш
Дякую... только сейчас прочел сообщения :)
Всем спасибо
 
Мы в соцсетях:

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