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

Тема в разделе "Lotus - Программирование", создана пользователем NickProstoNick, 13 сен 2010.

  1. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Всем привет!
    Вот столкнулся с каким приколом. Есть документ с приатаченным файлом. файл обрабатываю вот так (грубо говоря)
    Код (LotusScript):
     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
    В чем может быть прикол?
     
  2. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Вообще-то не глюк, а фича. ртфм.
    Unlike the EmbeddedObjects property in NotesRichTextItem, this property does not include file attachments
     
  3. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    NickProstoNick
    через @AttachNames... надо
     
  4. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    А через 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)
     
  5. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    рт не учитывает приаттаченные не к рт, а напрямую к доку аттачи (через веб, например)
     
  6. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    А если по всем полям $FILE пробежаться?
     
  7. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    и как вы это себе представляете - форалл?
     
  8. susinmn

    susinmn Well-Known Member

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

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    ToxaRat
    точна, и кот здеся был
     
  10. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    susinmn
    Можно... пробовал... только вот какой прикол еще обнаружился.
    Поле Body какое-то кривое... без флага Summary. :unsure:
    Документы попадают в базу в виде сообщений через SMTP... после обрабатываются.
     
  11. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.019
    Симпатии:
    8
    А так разве не сработает? Могу ошибавться, давно дело было:

    Код (LotusScript):
    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
     
  12. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Ну как бы так и должно быть.
     
  13. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Да... прошу прощения... тупанул
     
  14. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    такая конструкция тоже не работает
    Код (LotusScript):
        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, а не ругаться на несоответствие типов
     
  15. nvyush

    nvyush Lotus team
    Lotus team

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

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    вопрос решился так
    Код (LotusScript):
    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
     
  17. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Не должно. EmbeddedObjects возвращает Empty. Отсюда несоответствие типов. И проверять надо соответственно isEmpty.
     
  18. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    таки Forall в итоге вышел :)))
    кста, насчет проверки isEmpty указывала в теме http://codeby.net/ipb.html?s=&sh...st&p=177565
    А почему нельзя было эвалюейтить @attachmentNames?
     
  19. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    OKEN
    подожди, пусть намучаются, я им это с самого начала написал, можа вдруг кто-то найдёт еще действенный метод кроме этого одного :)
     
  20. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Мыш
    Дякую... только сейчас прочел сообщения :)
    Всем спасибо
     
Загрузка...

Поделиться этой страницей