Как узнать размер Richtext

Тема в разделе "Lotus - Программирование", создана пользователем KLif, 6 дек 2007.

  1. KLif

    KLif Гость

    Всем привет. Вообщем такая проблема ... на форме есть richtext, в нём находится всякая ерунда: картинки, доки и т.д.

    Нужно узнать размер этого richtext ...

    Forall item In uidoc.Document.Items
    If item.Name = "Attach_Body" Then
    l = item.ValueLength
    End If
    End Forall

    В итоге l = 0, но если я таким же способом переберу все поля, то получу опр значение, после чего добавлю в свой RichText какой-нибудь док, то значение увеличится ...

    Ещё один способ:
    Set rt = New NotesRichTextItem(uidoc.Document, "Attach_Body")
    Msgbox(rt.ValueLength)
    при этом, чтобы не лежало на richtext сообщение всегда - "2"
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    1 Документ ужо сохранён?
    2 Надо узнать размер вложений?
     
  3. Sandr

    Sandr Гость

    RTItem.ValueLength
    102-пустое рт поле
    Если больше 102, значит там уже что-то есть...
     
  4. KLif

    KLif Гость

    1. RT не сохранён ... да, нужно узнать размер вложений, чтобы в дальнейшем его ограничить ...
    2. RTItem.ValueLength - выдаёт 2 и причём всегда ...
     
  5. Sandr

    Sandr Гость

    @AttachmentLengths возвращает размеры аттачей без сохранения дока... Работает и в Evaluate...если надо скриптом...
     
  6. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    после сохранения - GetEmbeddedObject method - получаете все вложеия в РТ поле, а патом проверяете их размер

    Прастой пример , а одно вложение

    Код (Text):
    Dim doc As NotesDocument
    Dim rtitem As Variant
    Dim object As NotesEmbeddedObject
    Dim sizeInBytes As Long
    '...set value of doc...
    Set rtitem = doc.GetFirstItem( "Body" )
    If ( rtitem.Type = RICHTEXT ) Then
    Set object = rtitem.GetEmbeddedObject( "City picture" )
    sizeInBytes = object.FileSize
    End If
    А можно и собаками -
    @AttachmentLengths
     
  7. KLif

    KLif Гость

    Так делал, постоянно говорит на строчке sizeInBytes = object.FileSize - что объект не выбран ... но такого не может быть ... док сохранял ...
     
  8. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: KLif
    Проверять надо
    Код (Text):
    If not object is Nothing Then sizeInBytes = object.FileSize
     
  9. KLif

    KLif Гость

    Ога, и в результате sizeInBytes = 0, не может он найти объекты в ричтексте ... но они там есть, т.к. сумарный размер документа увеличивается с каждым вложением ...
     
  10. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Можно на скриптах и без сохранения.

    Код (Text):
    Dim ws As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Dim rtitem As NotesRichTextItem

    Set uidoc = ws.CurrentDocument
    Call uidoc.Refresh(True)

    Set rtitem = uidoc.Document.GetFirstItem("Поле")
    If Not Isempty(rtitem.EmbeddedObjects) Then
    Forall x In rtitem.EmbeddedObjects
    Msgbox Cstr(x.FileSize)
    End Forall
    End If
     
  11. KLif

    KLif Гость

    1. rtitem.EmbeddedObjects - пустое
    2. Set uidoc = ws.CurrentDocument
    Set rt = New NotesRichTextItem(uidoc.Document, "Attach_Body")
    Call uidoc.Save - вот так работает, НО размер rt какой то не понятный, почему он не соответствует реальному размеру файла?
     
  12. Sandr

    Sandr Гость

    1. Если файл аттачится на бекэнде, то аттачи нужно получать потом не из РТитема, а из нотесдокумента.
    2. Аттачи пакуются внутренними архиваторами... Птотму и размер не совпадает...
     
  13. KLif

    KLif Гость

    1) пробовал получить из NotesDocument, размер найденого = 0
    2) решил остановится на способе:

    Set uidoc = ws.CurrentDocument
    Set rt = New NotesRichTextItem(uidoc.Document, "Attach_Body")
    Call uidoc.Refresh(True)
    sizeInBytes = rt.ValueLength

    Всем огромное спасибо!
     
  14. Sandr

    Sandr Гость

    А Вам вообще что, нужно сделать ограничение на размер вклабываемых файлов? Тогда проверяйте размер файла до аттача... Так разумней будет...
     
  15. KLif

    KLif Гость

    Да, есть richtext, вкладываем файлы и в опр. момент он должен запретить вложение ... я делаю так

    1) создал доп. richtext
    2) вкладываю в него новые файлы
    3) смотрю сумму обоих ричтекстов и сравниваю с границей вложения

    Если узнавать размер файла аттача, то:

    - Isempty(rtitem.EmbeddedObjects) - в таком случае их нет
    - Isempty(doc.EmbeddedObjects) - в таком случае размер равен 0, но если вывести на печать Msgbox (obj.Name) - то он выдаст имя объекта, почему тогда размер 0?
     
  16. Sandr

    Sandr Гость

    Это не совсем правильно.. Вы сначала выполнили операцию, а птомо узнали размер... Обычно делается наоборот.. Сначала узнаем рамер файла. а потом уже вкладываем файл, если размер подходит... Нужно стараться избегать лишних действий... оптимизиция - это важно даже для лотуса...
     
  17. KLif

    KLif Гость

    А как узнать размер файла, если мы его вот так получаем:

    @Command([EditGotoField];"Attach_Body");
    @Command([EditInsertFileAttachment])
     
  18. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Код (Text):
    @Command([EditGotoField];"Attach_Body");
    @Command([EditInsertFileAttachment]);
    @PROMPT( [OK], "", @AttachmentLengths );
    Разве что рефреш делать
     
  19. KLif

    KLif Гость

    Сделал так, где Temp - доп ричтекст

    @Command([EditGotoField];"Temp");
    @Command([EditInsertFileAttachment]);
    @Command([ToolsRunMacro] ; "(Insert Template2)") - агент, смотрит размер основного ричтекст + темт, если не заходит за границу, то копирует всё из темпа в наш ричтекст ... после чего чистит темп ...

    Осталась одна проблем, Temp надо скрыть, но когда он скрыт - с ним нельзя работать ...
     
  20. Sandr

    Sandr Гость

    А что Вам стоит получить его скриптом? Вот Вам готовый пример аттача с проверкаой размера...

    Код (Text):
                    On Error Goto errhand

    Dim file As Variant
    Dim rtItem As NotesRichTextItem
    Dim obj As Variant
    Dim o As notesEmbeddedObject
    Dim verLen As Long

    Set doc = uidoc.Document
    Set rtItem = doc.GetFirstItem("Body")

    Let file = ws.OpenFileDialog(False,"Выберите файл для вложения!")
    If Isempty(file) Then Exit Sub

    verLen = FileLen(Cstr(File(0)))

    If verLen > 1048576 then
    Msgbox "Размер файла не должен превышать 1-го Мб"
    End If

    If rtItem Is Nothing Then
    Set rtItem = doc.CreateRichTextItem("Body")
    End If

    Call rtItem.EmbedObject(1454, "", Cstr(File(0)))
    uidoc.Reload
    exiting:
    Exit Sub
    errhand:
    Msgbox "Ошибка " & Error & ", в строке " & Cstr(Erl) & ". Выбор вложения."
    Resume exiting
     
Загрузка...

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