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

NickProstoNick

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

susinmn

Well-Known Member
16.10.2007
529
8
33
Саратов
#4
А через 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)
 

hosm

* so what *
18.05.2009
2 442
9
42
Kiev, Ukraine
#5
рт не учитывает приаттаченные не к рт, а напрямую к доку аттачи (через веб, например)
 

susinmn

Well-Known Member
16.10.2007
529
8
33
Саратов
#8
и как вы это себе представляете - форалл?
Перевод от Google:
Если несколько элементов в документе, имеют те же названия, программный доступ ограничен первого дня. Остальные пункты повестки дня выхода неверные данные. Обойти это, чтобы получить первый элемент, а обработать его, удалите его, снова получить первый пункт (который был второй пункт), и так далее, пока вы не обрабатывать все элементы с таким же названием. Если вы не сохраните этот документ, пунктов на самом деле не удаляется. Тем не менее, эта рекомендация является то, что избежать создания нескольких объектов с тем же именем.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 785
42
35
Киев
#10
susinmn
Можно... пробовал... только вот какой прикол еще обнаружился.
Поле Body какое-то кривое... без флага Summary. :unsure:
Документы попадают в базу в виде сообщений через SMTP... после обрабатываются.
 

Мыш

Well-Known Member
Lotus team
12.02.2008
1 084
13
#11
А так разве не сработает? Могу ошибавться, давно дело было:

Код:
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 785
42
35
Киев
#14
такая конструкция тоже не работает
Код:
	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, а не ругаться на несоответствие типов
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#15
NickProstoNick
Может вместо Forall пройтись обычным циклом For i = 0 To Ubound(body.EmbeddedObjects)? Кстати, а что говорит проверка IsArray(body.EmbeddedObjects)?
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 785
42
35
Киев
#16
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
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
36
Россия, Калуга
#17
Medevic и тут дело не в том что это аттач! body.EmbeddedObjects должно вернуть объект или Nothing, а не ругаться на несоответствие типов
Не должно. EmbeddedObjects возвращает Empty. Отсюда несоответствие типов. И проверять надо соответственно isEmpty.